创建现有仪表板的完整副本,包括所有图表、分段和权限


copyDashboard 变更创建现有仪表板的完整副本,包括所有图表、图表分段、值和用户权限。此操作执行深度复制,为所有复制的元素分配新的唯一标识符。

基本示例

创建一个具有自定义标题的仪表板副本:

mutation CopyDashboard {
  copyDashboard(input: {
    dashboardId: "dashboard_123"
    title: "Q4 Sales Dashboard Copy"
  }) {
    id
    title
    createdAt
    charts {
      id
      title
      chartType
    }
    dashboardUsers {
      id
      role
      user {
        id
        email
      }
    }
  }
}

高级示例

复制一个不指定标题的仪表板(自动附加“(Copy)”):

mutation CopyDashboardAuto {
  copyDashboard(input: {
    dashboardId: "dashboard_456"
  }) {
    id
    uid
    title
    createdBy {
      id
      email
    }
    company {
      id
      name
    }
    charts {
      id
      title
      chartType
      position
      chartSegments {
        id
        title
        formula
        chartValues {
          id
          value
        }
      }
    }
    dashboardUsers {
      id
      role
      user {
        id
        email
        fullName
      }
    }
    createdAt
    updatedAt
  }
}

输入参数

CopyDashboardInput

参数 类型 必需 描述
dashboardId String! ✅ 是 要复制的仪表板的 ID
title String 复制仪表板的自定义标题。如果未提供,则在原始标题后附加“(Copy)”

响应字段

仪表板响应

该变更返回一个完整的 Dashboard 对象,包含所有复制的数据:

字段 类型 描述
id String! 新仪表板的唯一标识符
uid String! 用于 URL 路由的唯一标识符
title String! 复制仪表板的标题
createdBy User! 执行复制操作的用户
company Company! 仪表板所属的公司(与原始相同)
project Project 项目关联(与原始相同,如果有)
charts [Chart!]! 从原始仪表板复制的所有图表
dashboardUsers [DashboardUser!]! 从原始复制的用户权限(不包括复制用户)
createdAt DateTime! 复制创建的时间
updatedAt DateTime! 复制最后修改的时间

仪表板复制行为

深度复制过程

copyDashboard 操作执行完整的深度复制,包括:

  1. 仪表板元数据

    • 创建新仪表板,分配新 ID 和 UID
    • 复制标题(如果没有自定义标题,则附加“(Copy)”)
    • 将创建者设置为执行复制的用户
    • 保持公司和项目关联
  2. 图表和结构

    • 复制所有图表,分配新 ID 和 UID
    • 保留图表类型、标题和位置
    • 保持图表配置和元数据
  3. 图表分段和数值

    • 复制所有图表分段,分配新 ID 和 UID
    • 保留分段标题、公式和配置
    • 复制所有图表值及其数据
  4. 公式引用

    • 更新公式引用以使用新 UID
    • 保持公式逻辑和计算
    • 确保复制的公式引用复制的数据
  5. 用户权限

    • 从原始仪表板复制所有用户权限
    • 排除复制用户(他们成为创建者)
    • 保留 VIEWER 和 EDITOR 角色分配

复制后操作

创建副本后,系统会自动:

  • 发布仪表板创建事件以进行实时更新
  • 触发所有复制图表的结果重新计算
  • 更新任何依赖的系统或集成

所需权限

仪表板复制需要特定权限:

角色 可以复制仪表板
Dashboard Creator ✅ 是
Dashboard EDITOR ✅ 是
Dashboard VIEWER ❌ 否
非仪表板用户 ❌ 否

权限检查:用户必须对原始仪表板具有 EDITOR 访问权限,条件为:

  • 是原始仪表板的创建者
  • 在仪表板上具有明确的 EDITOR 角色分配

错误响应

找不到仪表板

{
  "errors": [{
    "message": "Dashboard was not found.",
    "extensions": {
      "code": "DASHBOARD_NOT_FOUND"
    }
  }]
}

权限不足

{
  "errors": [{
    "message": "You don't have permission to access this dashboard",
    "extensions": {
      "code": "FORBIDDEN"
    }
  }]
}

输入无效

{
  "errors": [{
    "message": "Dashboard ID is required",
    "extensions": {
      "code": "VALIDATION_ERROR"
    }
  }]
}

用例

1. 模板仪表板

创建可以为新项目或团队复制的模板仪表板:

mutation CreateProjectDashboard {
  copyDashboard(input: {
    dashboardId: "template_dashboard_id"
    title: "Project Alpha - Sales Dashboard"
  }) {
    id
    title
  }
}

2. 备份和版本控制

在进行重大更改之前创建备份:

mutation BackupDashboard {
  copyDashboard(input: {
    dashboardId: "production_dashboard"
    title: "Production Dashboard - Backup 2024-01-15"
  }) {
    id
    title
    createdAt
  }
}

3. 跨团队共享

在团队之间复制仪表板,同时保持数据结构:

mutation ShareDashboardWithTeam {
  copyDashboard(input: {
    dashboardId: "marketing_dashboard"
    title: "Marketing Dashboard - Sales Team Copy"
  }) {
    id
    title
    dashboardUsers {
      role
      user {
        email
      }
    }
  }
}

最佳实践

命名约定

  • 使用描述性标题,指示副本的目的
  • 包括团队名称、日期或版本号以提高清晰度
  • 避免使用“Copy”或“New Dashboard”等通用名称

权限管理

  • 创建后检查复制仪表板的权限
  • 根据特定用例添加或删除用户
  • 考虑查看者是否需要成为副本的编辑者

数据完整性

  • 验证复制后公式和计算是否正确
  • 检查图表数据源是否适合新上下文
  • 测试任何自动报告或集成

性能考虑

  • 复制具有多个图表的大型仪表板可能需要几秒钟
  • 图表重新计算在复制后异步发生
  • 考虑在非高峰时段复制非常大的仪表板
  • 在同时复制多个仪表板时监控系统资源

限制

  • 不能跨不同公司复制仪表板
  • 公式引用仅限于同一公司的数据
  • 某些外部集成可能需要重新配置
  • 自定义权限或角色可能需要手动调整
  • 历史数据和分析在复制中不会保留

相关资源

AI助手

响应是通过人工智能生成的,可能包含错误。

我能帮您什么?

随时问我关于 Blue 或本文档的任何问题。

输入发送 • Shift+Enter 换行 • ⌘I 打开