創建現有儀表板的完整副本,包括所有圖表、區段和權限
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
操作執行完整的深度複製,包括:
-
儀表板元數據
- 創建具有新 ID 和 UID 的新儀表板
- 複製標題(如果沒有自定義標題則附加“(Copy)”)
- 將創建者設置為執行複製的用戶
- 維護公司和項目關聯
-
圖表和結構
- 複製所有圖表,並生成新的 ID 和 UID
- 保留圖表類型、標題和位置
- 維護圖表配置和元數據
-
圖表區段和值
- 複製所有圖表區段,並生成新的 ID 和 UID
- 保留區段標題、公式和配置
- 複製所有圖表值及其數據
-
公式引用
- 更新公式引用以使用新的 UID
- 維護公式邏輯和計算
- 確保複製的公式引用複製的數據
-
用戶權限
- 從原始儀表板複製所有用戶權限
- 排除複製用戶(他們成為創建者)
- 保留 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”等通用名稱
權限管理
- 在創建後檢查複製儀表板的權限
- 根據具體使用案例添加或刪除用戶
- 考慮查看者是否需要成為副本的編輯者
數據完整性
- 確認複製後公式和計算正確運行
- 檢查圖表數據源是否適合新上下文
- 測試任何自動報告或集成
性能考量
- 複製大型儀表板(包含許多圖表)可能需要幾秒鐘
- 圖表重新計算在複製後異步發生
- 考慮在非高峰時段複製非常大的儀表板
- 在同時複製多個儀表板時監控系統資源
限制
- 無法跨不同公司複製儀表板
- 公式引用僅限於同一公司的數據
- 某些外部集成可能需要重新配置
- 自定義權限或角色可能需要手動調整
- 歷史數據和分析不會在副本中保留