Создайте полную копию существующей панели, включая все графики, сегменты и разрешения
Мутация 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
}
}
}
}
Расширенный пример
Скопируйте панель, не указывая заголовок (автоматически добавляет "(Копия)"):
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 | Нет | Пользовательский заголовок для скопированной панели. Если не предоставлен, добавляет "(Копия)" к оригинальному заголовку |
Поля ответа
Ответ панели
Мутация возвращает полный объект 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
- Копирует заголовок (или добавляет "(Копия)", если нет пользовательского заголовка)
- Устанавливает создателя на пользователя, выполняющего копирование
- Сохраняет ассоциации компании и проекта
-
Графики и структура
- Копирует все графики с новыми 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
}
}
}
}
Лучшие практики
Конвенции именования
- Используйте описательные заголовки, которые указывают на цель копии
- Включайте названия команд, даты или номера версий для ясности
- Избегайте общих названий, таких как "Копия" или "Новая панель"
Управление разрешениями
- Проверьте разрешения скопированной панели после создания
- Добавьте или удалите пользователей по мере необходимости для конкретного сценария использования
- Рассмотрите, нужно ли зрителям стать редакторами копии
Целостность данных
- Убедитесь, что формулы и вычисления работают корректно после копирования
- Проверьте, что источники данных графиков подходят для нового контекста
- Протестируйте любые автоматизированные отчеты или интеграции
Учет производительности
- Копирование больших панелей с множеством графиков может занять несколько секунд
- Повторный расчет графиков происходит асинхронно после копирования
- Рассмотрите возможность копирования в нерабочие часы для очень больших панелей
- Мониторьте ресурсы системы при копировании нескольких панелей одновременно
Ограничения
- Нельзя копировать панели между разными компаниями
- Ссылки на формулы ограничены данными в одной и той же компании
- Некоторые внешние интеграции могут потребовать перенастройки
- Пользовательские разрешения или роли могут потребовать ручной настройки
- Исторические данные и аналитика не сохраняются в копии
Связанные ресурсы
- Обзор панели - Общие концепции панели
- Переименовать панель - Изменить заголовки панелей
- Пользователи панели - Управление разрешениями панели
- API графиков - Работа с отдельными графиками