Utwórz pełną kopię istniejącego projektu z konfigurowalnymi opcjami dotyczącymi tego, co ma być uwzględnione.
Skopiuj projekt
Mutacja kopiowania projektu pozwala na duplikację istniejącego projektu w tej samej firmie lub w innej firmie. Jest to przydatne do tworzenia szablonów projektów, konfigurowania podobnych projektów lub przenoszenia projektów między firmami. Operacja kopiowania działa asynchronicznie, aby efektywnie obsługiwać duże projekty.
Podstawowy przykład
mutation CopyProject {
copyProject(
input: {
projectId: "proj_123abc"
name: "New Project Copy"
options: {
todos: true
todoLists: true
people: true
}
}
)
}
Zaawansowany przykład
mutation CopyProject {
copyProject(
input: {
projectId: "proj_123abc"
name: "Q2 Marketing Campaign"
description: "Copy of Q1 campaign with updated timeline"
imageURL: "https://example.com/campaign-logo.png"
companyId: "comp_789xyz"
options: {
assignees: true
automations: true
checklists: true
customFields: true
discussions: false
discussionComments: false
dueDates: true
files: true
forms: true
people: true
projectUserRoles: true
statusUpdates: false
statusUpdateComments: false
tags: true
todoActions: true
todoComments: false
todoLists: true
todos: true
}
}
)
}
Parametry wejściowe
CopyProjectInput
Parametr | Typ | Wymagany | Opis |
---|---|---|---|
projectId |
String! | ✅ Tak | ID projektu do skopiowania |
name |
String! | ✅ Tak | Nazwa nowego projektu (maks. 50 znaków) |
description |
String | Nie | Opis nowego projektu (maks. 500 znaków) |
imageURL |
String | Nie | URL obrazu dla nowego projektu |
companyId |
String | Nie | ID firmy, w której powinien zostać utworzony nowy projekt. Jeśli nie podano, używa firmy projektu źródłowego |
options |
CopyProjectOptionsInput! | ✅ Tak | Konfiguracja dotycząca tego, jakie elementy mają być kopiowane |
CopyProjectOptionsInput
Parametr | Typ | Wymagany | Opis |
---|---|---|---|
assignees |
Boolean | Nie | Kopiuj przypisania zadań (wymaga people: true ) |
automations |
Boolean | Nie | Kopiuj automatyzacje i przepływy pracy projektu |
checklists |
Boolean | Nie | Kopiuj listy kontrolne zadań |
customFields |
Boolean | Nie | Kopiuj definicje i wartości pól niestandardowych |
discussions |
Boolean | Nie | Kopiuj dyskusje projektu |
discussionComments |
Boolean | Nie | Kopiuj komentarze do dyskusji (wymaga discussions: true ) |
dueDates |
Boolean | Nie | Kopiuj terminy zadań |
files |
Boolean | Nie | Kopiuj załączniki plików |
forms |
Boolean | Nie | Kopiuj formularze projektu |
people |
Boolean | Nie | Kopiuj członków projektu |
projectUserRoles |
Boolean | Nie | Kopiuj role i uprawnienia użytkowników (wymaga people: true ) |
statusUpdates |
Boolean | Nie | Kopiuj aktualizacje statusu projektu |
statusUpdateComments |
Boolean | Nie | Kopiuj komentarze do aktualizacji statusu (wymaga statusUpdates: true ) |
tags |
Boolean | Nie | Kopiuj tagi projektu |
todoActions |
Boolean | Nie | Kopiuj działania/subzadania zadań |
todoComments |
Boolean | Nie | Kopiuj komentarze do zadań |
todoLists |
Boolean | Nie | Kopiuj listy/sekcje zadań |
todos |
Boolean | Nie | Kopiuj zadania |
coverConfig |
Boolean | Nie | Kopiuj konfigurację okładki zadania |
Odpowiedź
Mutacja zwraca wartość Boolean
:
true
- Zadanie kopiowania zostało pomyślnie dodane do kolejkifalse
- Nie udało się rozpocząć zadania kopiowania
Sprawdzanie statusu kopiowania
Ponieważ kopiowanie jest asynchroniczne, użyj zapytania copyProjectStatus
, aby sprawdzić postęp:
Pola statusu kopiowania
Pole | Typ | Opis |
---|---|---|
queuePosition |
Int | Pozycja w kolejce kopiowania |
totalQueues |
Int | Łączna liczba elementów w kolejce |
isActive |
Boolean | Czy operacja kopiowania jest obecnie aktywna |
oldProject |
Project | Projekt źródłowy, który jest kopiowany |
newProjectName |
String | Nazwa nowego projektu, który jest tworzony |
isTemplate |
Boolean | Czy to kopiowanie jako szablon |
oldCompany |
Company | Firma źródłowa |
newCompany |
Company | Firma docelowa |
query CheckCopyStatus {
copyProjectStatus {
queuePosition
totalQueues
isActive
oldProject {
id
name
}
newProjectName
isTemplate
oldCompany {
id
name
}
newCompany {
id
name
}
}
}
Wymagane uprawnienia
Aby skopiować projekt, potrzebujesz odpowiednich uprawnień w obu lokalizacjach źródłowej i docelowej:
Scenariusz | Wymagane uprawnienia |
---|---|
Copy within same company | OWNER , ADMIN , or MEMBER role in the source project |
Copy to different company | • OWNER , ADMIN , or MEMBER role in the source project• Must be a member of the target company |
Projekt źródłowy musi być aktywny (niearchiwalny), aby mógł zostać skopiowany.
Odpowiedzi błędów
Projekt nie znaleziony
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "PROJECT_NOT_FOUND"
}
}]
}
Występuje, gdy projekt źródłowy nie istnieje lub brakuje dostępu.
Firma nie znaleziona
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "COMPANY_NOT_FOUND"
}
}]
}
Występuje, gdy firma docelowa nie istnieje lub brakuje dostępu.
Projekt zbyt duży
{
"errors": [{
"message": "Project is too large to copy",
"extensions": {
"code": "CREATE_PROJECT_LIMIT"
}
}]
}
Występuje, gdy projekt ma więcej niż 250 000 zadań.
Kopiowanie już w toku
{
"errors": [{
"message": "Oops!"
}]
}
Występuje, gdy masz już w toku operację kopiowania.
Ważne uwagi
- Operacja asynchroniczna: Mutacja dodaje zadanie w tle do kolejki i natychmiast zwraca wynik. Użyj
copyProjectStatus
, aby śledzić postęp. - Jedna kopia na raz: Tylko jedna operacja kopiowania na użytkownika może być aktywna w danym czasie.
- Ograniczenia rozmiaru: Projekty z więcej niż 250 000 zadań nie mogą być kopiowane.
- Zależności logiczne: Niektóre opcje najlepiej działają razem:
assignees
działa zpeople: true
(przypisania nie będą kopiowane bez osób)discussionComments
działa zdiscussions: true
statusUpdateComments
działa zstatusUpdates: true
projectUserRoles
działa zpeople: true
- Przetwarzanie nazw: Nazwy projektów są przycinane, a wszelkie adresy URL są automatycznie usuwane.
- Priorytet kolejki: Klienci korporacyjni otrzymują wyższy priorytet w kolejce kopiowania.
- Buforowanie statusu: Status kopiowania jest buforowany przez 6 godzin po zakończeniu.