Mover objetos entre Workfront ambientes usando a API de promoção de ambiente Workfront
O recurso de Promoção do ambiente permite mover objetos relacionados à configuração de um ambiente para outro. Você pode mover esses objetos usando a API do Workfront, conforme descrito neste artigo.
Para obter instruções sobre como mover objetos entre ambientes usando o aplicativo Workfront, consulte:
Requisitos de acesso
Você deve ter o seguinte:
Para obter mais detalhes sobre as informações nesta tabela, consulte Requisitos de acesso na documentação do Workfront.
Pré-requisitos
O ponto de extremidade Criar pacote de promoção presume que você já configurou o ambiente de origem. Esta chamada de API requer a criação manual de um mapa de objetos de Workfront objCodes e GUIDs de objeto. A estrutura específica deste mapa é descrita abaixo.
Objetos compatíveis com a promoção do ambiente
O recurso de Promoção do ambiente tem como objetivo fornecer a capacidade de mover objetos relacionados à configuração de um ambiente para outro. Ela não oferece suporte à capacidade de mover objetos transacionais (com exceções limitadas).
Para obter uma lista de objetos promovíveis e seus sub-objetos promovíveis incluídos, consulte Objetos com suporte para promoção de ambiente no artigo Visão geral da movimentação de objetos entre ambientes do Workfront.
Autenticação
A API autentica cada solicitação para garantir que o cliente tenha acesso para visualizar ou modificar um objeto solicitado.
A autenticação é realizada transmitindo uma ID de sessão ou chave de API, que pode ser fornecida usando o seguinte método:
Solicitar autenticação de cabeçalho
O método preferido de autenticação é passar um cabeçalho de solicitação chamado SessionID contendo o token de sessão. Isso tem a vantagem de estar seguro contra ataques de falsificação de solicitação entre sites (CSRF) e não interferir no URI para fins de armazenamento em cache.
Veja a seguir um exemplo de um cabeçalho de solicitação:
GET /attask/api/v15.0/project/search
SessionID: abc1234
Endpoints de API
Criar um pacote
Essa chamada executa um processo de várias etapas.
A primeira etapa resulta na criação de um pacote de promoção vazio no status "MONTANDO".
A segunda etapa usa a matriz objectCollections
fornecida no corpo do POST para reunir os registros solicitados do Workfront. Essa etapa pode levar vários minutos para ser concluída, dependendo do número de registros solicitados e da configuração do Workfront. No final deste processo, o pacote de promoção vazio é atualizado com o packageEntities
e o status é automaticamente definido como "RASCUNHO".
objectCollections
.objCode
que corresponde ao código de objeto documentado no Workfront API Explorer.entities
. Isso espera o campo ID
. Ele também pode aceitar um atributo name
opcional para facilitar a identificação do que ID
representa.objectCollections
, consulte a seção Objetos com suporte para promoção de ambiente neste artigo.URL
POST https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages
Cabeçalhos
{
"apikey": "**********",
"Content-Type": "application/json"
}
Ou
{
"sessionID": "*****************",
"Content-Type": "application/json"
}
Corpo
{
"name": "Agency Onboarding - 2023-06-06",
"description": "This promotion package contains configuration to support the agency onboarding processes...",
"source": "https://{domain}.{environment}.workfront.com",
"objectCollections": [
{
"objCode": "PROJ",
"entities": [
{
"ID": "6419b8b9001151ee258921a4f7597ba1",
"name": "Agency Request"
}
]
},
{
"objCode": "TMPL",
"entities": [
{
"ID": "6419b8b9001151ee258921a4f7597bb2",
"name": "New Agency Onboarding"
},
{
"ID": "6419b8b9001151ee258921a4f7597bc3",
"name": "New Agency Offboarding"
}
]
},
{
"objCode": "PTLTAB",
"entities": [
{
"ID": "645e6435000b4aaebe4776f4a42ed5ad",
"name": "Agency Performance and Readiness"
}
]
}
]
}
Resposta
200
{
"data": {
"id": "1d5693b9-b7b5-492d-8219-c21f34bcaca6",
"name": "Agency Onboarding - 2023-06-06",
"description": "This promotion package contains configuration to support the agency onboarding processes...",
"source": "https://{domain}.{environment}.workfront.com",
"status": "ASSEMBLING",
"version": 1,
"createdAt": "2023-06-06T17:29:21.600Z",
"createdById": "61aa9d0e0005fcee8f212835bdaa2619",
"publishedAt": null,
"customerId": "61aa9d090005fa42152c1cb66659f38d"
}
}
Obter uma lista de pacotes
Esta chamada retorna uma lista não filtrada de pacotes promocionais pertencentes ao cliente.
A resposta incluirá todos os pacotes criados de qualquer uma das instâncias de sandbox, pré-visualização ou produção do Workfront.
URL
GET https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages
Cabeçalhos
{
"apikey": "**********"
}
Ou
{
"sessionID": "*****************"
}
Corpo
Vazio
Resposta
200
{
"data": [
{
"id": "1d5693b9-b7b5-492d-8219-c21f34bcaca6",
"name": "Agency Onboarding - 2023-06-06",
"description": "This promotion package contains configuration to support the agency onboarding processes...",
"status": "ASSEMBLING",
"createdAt": "2023-06-06T17:29:21.600Z",
"deletedAt": null
},
{...}
]
}
<!—Verifique o "status" acima—ele foi adicionado?—>
Obter um pacote por ID
Esta chamada retorna os detalhes de um pacote promocional solicitado.
A solicitação pode ser feita por meio de qualquer ambiente, independentemente da origem do pacote de promoção.
URL
GET https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/{id}
Cabeçalhos
{
"apikey": "**********"
}
Ou
{
"sessionID": "*****************"
}
Corpo
Vazio
Resposta
200
{
"data": {
"id": "1d5693b9-b7b5-492d-8219-c21f34bcaca6",
"name": "Agency Onboarding - 2023-06-06",
"description": "This promotion package contains configuration to support the agency onboarding processes...",
"source": "https://{domain}.{environment}.workfront.com",
"status": "DRAFT",
"version": 1,
"createdAt": "2023-06-06T17:29:21.600Z",
"publishedAt": null,
"customerId": "61aa9d090005fa42152c1cb66659f38d",
"packageEntities": {
"GROUP": [
{
"id": "52aa9d0e0005fcee8f212835bdaa2691",
"name": "Default Group",
"description": "null"
- or -
"description": "..."
}
],
"ROLE": [
{...}
],
...
}
}
}
Atualizar propriedades específicas de um pacote
Essa chamada atualiza qualquer conteúdo do pacote de promoção fornecido no corpo do PATCH.
Os atributos editáveis são:
- nome (sequência de caracteres)
- descrição (sequência de caracteres)
- status (string com validação de valor)
Para obter uma descrição detalhada dos status disponíveis, consulte Status de promoção do ambiente no artigo Visão geral da movimentação de objetos entre ambientes do Workfront.
URL
PATCH https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/{id}
Cabeçalhos
{
"apikey": "**********",
"Content-Type": "application/json"
}
Ou
{
"sessionID": "*****************",
"Content-Type": "application/json"
}
Corpo
{
"status": "ACTIVE"
}
Resposta
200
{
"data": {
"id": "1d5693b9-b7b5-492d-8219-c21f34bcaca6",
"name": "Agency Onboarding - 2023-06-06",
"description": "This promotion package contains configuration to support the agency onboarding processes...",
"source": "https://{domain}.{environment}.workfront.com",
"status": "ACTIVE",
"version": 1,
"createdAt": "2023-06-06T17:29:21.600Z",
"publishedAt": "2023-06-06T19:39:01.600Z",
"customerId": "61aa9d090005fa42152c1cb66659f38d",
"packageEntities": {
"GROUP": [
{
"id": "52aa9d0e0005fcee8f212835bdaa2691",
"name": "Default Group",
"description": "..."
}
],
"ROLE": [
{...}
],
...
}
}
}
Excluir um pacote
Essa chamada exclui o registro do pacote promocional. Esta ação é irreversível.
URL
DELETE https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/{id}
Cabeçalhos
{
"apikey": "**********"
}
Ou
{
"sessionID": "*****************"
}
Corpo
Vazio
Resposta
200
Deleted
Executar uma pré-execução
Esta chamada realiza uma comparação entre a definição do pacote e o ambiente de destino identificado no URL.
O resultado é um corpo JSON que identifica se um objeto de promoção é encontrado ou não no ambiente de destino.
Para cada objeto de promoção, um dos actions
a seguir será definido:
No momento, não há suporte para UPDATE action
nos recursos alfa deste serviço. A opção para permitir uma ATUALIZAÇÃO action
é algo que estamos pesquisando.
URL
POST https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/:id/prepare-installation
Cabeçalhos
{
"apikey": "**********",
"Content-Type": "application/json"
}
Ou
{
"sessionID": "*****************",
"Content-Type": "application/json"
}
Corpo
{}
Resposta
200
{
"environmentPromotionPackageId": "45f2ae94-76c0-4b13-8f3b-f688de83043d",
"environmentPromotionPackageVersion": 1,
"id": "c0bc79bd-c9c1-4b5b-b118-b1241392de0e",
"userId": "5ba38da500b752fd66439d4f6a9999a1",
"customerId": "5ba38d9d00b74f0c7a38b1b487fc9710",
"status": "PREPARING",
"environment": "mmi.my.workfront.com",
"registeredAt": "2023-10-19T20:00:16.697Z",
"updatedAt": "2023-10-19T20:00:16.701Z",
"translationMap": {
"CTGY": {
"62d9c9a0000013aeeefe7242a0a5fdb2": {
"name": "Example Document Form",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d9c9a0000013aeeefe7242a0a5fdb2"
}
},
"PGRP": {
"62d1eee4001c6618e6b9f9a588ba1598": {
"name": "Asset Detail",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee4001c6618e6b9f9a588ba1598"
}
},
"GROUP": {
"5ba38da500b752b0f46d13186030b7ad": {
"name": "Default Group",
"action": "USEEXISTING",
"isValid": true,
"targetId": "5ba38da500b752b0f46d13186030b7ad"
}
},
"PARAM": {
"62d1eee400f8578895166ee91a83f97a": {
"name": "Asset Type",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee400f8578895166ee91a83f97a"
},
"62d1eee50001407c713514a8970b58e4": {
"name": "Keywords",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee50001407c713514a8970b58e4"
},
"62d1eee5000333ac3981ea4f3df6d88e": {
"name": "Permitted Uses",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee5000333ac3981ea4f3df6d88e"
},
"62d1eee5000b188e9ec8039a097fc7ab": {
"name": "File Format",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee5000b188e9ec8039a097fc7ab"
},
"62d1eee500100c159fd5f838ce560507": {
"name": "CTA",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d1eee500100c159fd5f838ce560507"
},
"62d9c988001c1f23954dbb9d646335b5": {
"name": "Other CTA",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d9c988001c1f23954dbb9d646335b5"
},
"62d9c9880070f546cf4c798ea6c3eaa4": {
"name": "Other Audience",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d9c9880070f546cf4c798ea6c3eaa4"
},
"62d9c990006258baf1b40f2569c3eab7": {
"name": "Target Audience",
"action": "USEEXISTING",
"isValid": true,
"targetId": "62d9c990006258baf1b40f2569c3eab7"
}
}
}
}
id
. Neste exemplo, o campo id
é o terceiro da parte superior e tem um valor começando com c0bc79bd
.Executar uma instalação
Esta chamada inicia uma tentativa de instalação de um pacote de promoção no ambiente de destino identificado no URL do POST.
URL
POST https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/installations/{id}/install
Cabeçalhos
{
"apikey": "**********",
"Content-Type": "application/json"
}
Ou
{
"sessionID": "*****************",
"Content-Type": "application/json"
}
Corpo
{
}
Resposta
202
{}
Obter uma lista de instalações para um pacote específico
Os resultados incluem eventos de instalação de todos os ambientes nos quais o pacote foi implantado. Elas não se limitam às instalações para o ambiente pelo qual a solicitação está sendo feita. Isso permite identificar quais ambientes receberam esse pacote.
URL
GET https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/installations?environmentPromotionPackageId={environmentPromotionPackageId}
Cabeçalhos
{
"apikey": "**********"
}
Ou
{
"sessionID": "*****************"
}
Corpo
Vazio
Resposta
200
[
{
"id": "2892b936-e09e-455a-935f-e1462ab9753c",
"environmentPromotionPackageId": "4fae2b9d-d315-45f4-909f-a0c0d79fc65d",
"environmentPromotionPackageVersion": 1,
"userId": "8fbbc5bcf4f94a5b862483ee05573e73",
"customerId": "54286d78b064451096752b99bf968481",
"status": "INSTALLED",
"environment": "https://{domain}.{environment}.workfront.com",
"registeredAt": "2021-03-16T02:21:31.908Z",
"updatedAt": null,
"translationMap": {
"ROLE": {
"5f6d114f006883209828ddd9088e63b3": {
"name": "DAM Curator",
"action": "USEEXISTING",
"isValid": true,
"targetId": "600f4bed00028a718599f29575840053"
},
"ad535a9ebe647361e053a7656a0a1575": {
"name": "Copywriter",
"action": "USEEXISTING",
"isValid": true,
"targetId": "600f162700001ca051081c06667b14a4"
},
...
},
"TMPL": {
"5f9b317c00b3db5af69abcd1ed5f82aa": {
"name": "Digital Asset Production (Integrated)",
"action": "CREATE",
"isValid": true,
"targetId": "6054cda40000d5af63dc811d9c2b3a07"
},
...
},
...
}
},
{...}
]
Obter os detalhes de uma instalação
Esta chamada retornará o translationMap
final produzido pelo serviço de instalação para uma instalação específica.
Cada registro indicará qual foi o action
prescrito e se essa ação foi bem-sucedida ou não.
Para registros com um CREATE action
, o campo targetId
será definido com o valor do registro recém-criado no sistema de destino. Além disso, o campo installationStatus
será definido como INSTALADO.
Para registros com USEEXISTING action
, o campo targetId
também será definido, e o campo installationStatus
será definido como REGISTERED. Isso significa que o processo de mapeamento foi concluído e o serviço de instalação reconhece que avaliou o registro e não há nada para ser feito.
Se o registro tiver um CREATE action
, mas ele não conseguir criar o registro com êxito, o installationStatus
será definido como FAILED e o motivo da falha também será fornecido.
URL
GET https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/installations/{id}
Cabeçalhos
{
"apikey": "**********"
}
Ou
{
"sessionID": "*****************"
}
Corpo
Vazio
Resposta
200
{
"id": "2892b936-e09e-455a-935f-e1462ab9753c",
"environmentPromotionPackageId": "4fae2b9d-d315-45f4-909f-a0c0d79fc65d",
"environmentPromotionPackageVersion": 1,
"userId": "8fbbc5bcf4f94a5b862483ee05573e73",
"customerId": "54286d78b064451096752b99bf968481",
"status": "INSTALLED",
"environment": "https://{domain}.{environment}.workfront.com",
"registeredAt": "2021-03-16T02:21:31.908Z",
"updatedAt": null,
"translationMap": {
"ROLE": {
"5f6d114f006883209828ddd9088e63b3": {
"name": "DAM Curator",
"action": "USEEXISTING",
"isValid": true,
"targetId": "600f4bed00028a718599f29575840053"
},
...
},
"TMPL": {
"5f9b317c00b3db5af69abcd1ed5f82aa": {
"name": "Digital Asset Production (Integrated)",
"action": "CREATE",
"isValid": true,
"targetId": "6054cda40000d5af63dc811d9c2b3a07"
},
...
},
...
}
}
Substituição
Este é um processo de três etapas.
- Criar um mapa de tradução (análogo à fase "preparar instalação")
- Edite o mapa de tradução gerado, definindo os campos
action
etargetId
para qualquer objeto que eles desejem substituir. A ação deve serOVERWRITING
etargetId
deve ser a uuid do objeto que deve ser substituído - Execute a instalação.
Etapa 1 - Criar um Mapa de Tradução
URL
POST https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/{id}/translation-map
Corpo
Nenhum(a)
Resposta
Um mapa de tradução, com status 202 - OK
{
{objcode}: {
{object uuid}: {
"targetId": {uuid of object in destination},
"action": {installation action},
"name": {name of the object},
"isValid": true
},
{...more objects}
},
{...more objcodes}
}
Exemplo
{
"UIVW": {
"109f611680bb3a2b0c0a8c1f5ec63f6d": {
"targetId": "6643a26b0001401ff797ccb318f97aa6",
"action": "CREATE",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"UIGB": {
"edb4c6c127d38910e4860eb25569a5cc": {
"targetId": "6643a26b000178fb5cc27b74cc1e87ec",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"UIFT": {
"f97b662e229fd09ee595d8d359ec88bd": {
"targetId": "6643a26b00015cdd6727b76d6fda1d1d",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"PTLSEC": {
"4bb80aa88a96420296a7f47bf866f162": {
"targetId": "4bb80aa88a96420296a7f47bf866f162",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"EXTSEC": {
"65f8637900015e4dceb6fe079bd5409d": {
"targetId": "65f8637900015e4dceb6fe079bd5409d",
"action": "USEEXISTING",
"name": "Asnyc List",
"isValid": true
}
},
"PTLTAB": {
"65f8638a00016422a83ddc3508852d0f": {
"targetId": "65f8638a00016422a83ddc3508852d0f",
"action": "CREATEWITHALTNAME",
"name": "Cool 2.0 The Best",
"isValid": true
}
}
}
Etapa 2 - Modificar o mapa de tradução
Não há um terminal para esta etapa.
-
No mapa de tradução retornado em Etapa 1 - Criar um Mapa de Tradução, inspecione a lista de objetos que serão instalados.
-
Atualize o campo de ação em cada objeto para a ação de instalação desejada.
-
Valide o
targetId
em cada objeto. Se a ação definida forUSEEXISTING
ouOVERWRITING
,targetId
deverá ser definido como a UUID do objeto de destino no ambiente de destino. Para qualquer outra ação, o targetId deve ser uma cadeia de caracteres vazia.note note NOTE O targetId
já está preenchido se uma colisão foi detectada.
Etapa 3 - Instalar
URL
POST https://{domain}.{environment}.workfront.com/environment-promotion/api/v1/packages/{id}/install
Corpo
Este é um objeto com um único campo translationMap
, que deve ser igual ao mapa de tradução modificado de Etapa 2 - Modificar o Mapa de Tradução.
{
"translationMap": {
{objcode}: {
{object uuid}: {
"targetId": {uuid of object in destination},
"action": {installation action},
"name": {name of the object},
"isValid": true
},
{...more objects}
},
{...more objcodes}
}
}
Exemplo
{
"translationMap": {
"UIVW": {
"109f611680bb3a2b0c0a8c1f5ec63f6d": {
"targetId": "6643a26b0001401ff797ccb318f97aa6",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"UIGB": {
"edb4c6c127d38910e4860eb25569a5cc": {
"targetId": "6643a26b000178fb5cc27b74cc1e87ec",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"UIFT": {
"f97b662e229fd09ee595d8d359ec88bd": {
"targetId": "6643a26b00015cdd6727b76d6fda1d1d",
"action": "OVERWRITING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"PTLSEC": {
"4bb80aa88a96420296a7f47bf866f162": {
"targetId": "4bb80aa88a96420296a7f47bf866f162",
"action": "USEEXISTING",
"name": "Actual Portfolio Cost by Program",
"isValid": true
}
},
"EXTSEC": {
"65f8637900015e4dceb6fe079bd5409d": {
"targetId": "65f8637900015e4dceb6fe079bd5409d",
"action": "USEEXISTING",
"name": "Asnyc List",
"isValid": true
}
},
"PTLTAB": {
"65f8638a00016422a83ddc3508852d0f": {
"targetId": "65f8638a00016422a83ddc3508852d0f",
"action": "CREATEWITHALTNAME",
"name": "Cool 2.0 The Best",
"isValid": true
}
}
}
}
Resposta
A resposta inclui o {uuid of the created installation}
e um status 202 - ACCEPTED
.
Exemplo: b6aa0af8-3520-4b25-aca3-86793dff44a6