Eventos do AEM Assets para integração do PIM
Saiba como integrar o AEM Assets a um sistema de terceiros, como um sistema de Gerenciamento de Informações de Produto (PIM) ou de Gerenciamento de Linha de Produto (PLM), para atualizar metadados de ativos usando eventos nativos de AEM IO. Ao receber um evento do AEM Assets, os metadados do ativo podem ser atualizados no AEM, no PIM ou em ambos os sistemas, com base nos requisitos comerciais. No entanto, este exemplo demonstra a atualização dos metadados do ativo no AEM.
Para executar a atualização de metadados de ativos código fora do AEM, o Adobe I/O Runtime, é usada uma plataforma sem servidor.
O fluxo de processamento de eventos é o seguinte:
- O serviço de Autor do AEM aciona um evento Processamento de ativos concluído quando o carregamento de um ativo é concluído e todas as atividades de processamento de ativos são concluídas. Aguardar a conclusão do processamento garante que qualquer processamento pronto para uso, como extração de metadados, tenha sido concluído.
- O evento é enviado para o serviço Adobe I/O Events.
- O serviço de Eventos Adobe I/O passa o evento para a Ação do Adobe I/O Runtime para processamento.
- A Ação do Adobe I/O Runtime chama a API do sistema PIM para recuperar metadados adicionais, como SKU, informações do fornecedor ou outros detalhes.
- Os metadados adicionais recuperados do PIM são atualizados no AEM Assets usando a API do Assets Author.
Pré-requisitos
Para concluir este tutorial, você precisa:
-
Ambiente AEM as a Cloud Service com evento AEM habilitado. Além disso, o projeto WKND Sites de amostra deve ser implantado nele.
-
Acesso ao Adobe Developer Console.
-
Adobe Developer CLI instalada no computador local.
Etapas de desenvolvimento
As etapas de desenvolvimento de alto nível são:
- Criar um projeto no Adobe Developer Console (ADC)
- Inicializar o projeto para desenvolvimento local
- Configurar o projeto no ADC
- Configurar o serviço do autor do AEM para habilitar a comunicação do projeto ADC
- Desenvolver uma ação de tempo de execução que orquestre a recuperação e a atualização de metadados
- Faça upload de um ativo para o serviço de Autor do AEM e verifique se os metadados foram atualizados
Para obter detalhes sobre as etapas 1 a 2, consulte o exemplo Ação do Adobe I/O Runtime e Eventos AEM, e para as etapas 3 a 6, consulte as seguintes seções.
Configurar o projeto no Adobe Developer Console (ADC)
Para receber Eventos do AEM Assets e executar a Ação do Adobe I/O Runtime criada na etapa anterior, configure o projeto no ADC.
-
No ADC, navegue até o projeto. Selecione o espaço de trabalho
Stage
. Foi aqui que a ação de tempo de execução foi implantada. -
Clique no botão Adicionar Serviço e selecione a opção Evento. Na caixa de diálogo Adicionar eventos, selecione Experience Cloud > AEM Assets e clique em Avançar. Siga as etapas de configuração adicionais, selecione a instância do AEM, o evento Processamento de ativos concluído, o tipo de autenticação de servidor para servidor OAuth e outros detalhes.
-
Finalmente, na etapa Como receber eventos, expanda a opção Ação em tempo de execução e selecione a ação genérica criada na etapa anterior. Clique em Salvar eventos configurados.
-
Da mesma forma, clique no botão Adicionar serviço e selecione a opção API. No modal Adicionar uma API, selecione Experience Cloud > API do AEM as a Cloud Service e clique em Avançar.
-
Em seguida, selecione OAuth Server-to-Server para o tipo de autenticação e clique em Próximo.
-
Em seguida, selecione o perfil de produto Administradores do AEM-XXX e clique em Salvar API configurada. Para atualizar o ativo em questão, o perfil de produto selecionado deve estar associado ao ambiente do AEM Assets do qual o evento está sendo produzido e ter acesso suficiente para atualizar os ativos lá.
Configurar o serviço do autor no AEM para habilitar a comunicação do projeto ADC
Para atualizar os metadados do ativo no AEM do projeto ADC acima, configure o serviço do autor do AEM com a ID do cliente do projeto ADC. A ID do cliente é adicionada como variável de ambiente usando a interface do usuário do Adobe Cloud Manager.
-
Faça logon no Adobe Cloud Manager, selecione a guia Programa > Ambiente > Reticências > Exibir Detalhes > Configuração.
-
Em seguida, Adicione o botão Configuração e insira os detalhes da variável como
table 0-row-4 1-row-4 Nome Valor Serviço de AEM Tipo ADOBE_PROVIDED_CLIENT_ID <COPY_FROM_ADC_PROJECT_CREDENTIALS> Autor Variável -
Clique em Adicionar e Salvar a configuração.
Desenvolver ação em tempo de execução
Para executar a recuperação e atualização de metadados, comece atualizando o código de ação genérico criado automaticamente na pasta src/dx-excshell-1/actions/generic
.
Consulte o arquivo WKND-Assets-PIM-Integration.zip anexado para obter o código completo, e a seção abaixo destaca os arquivos principais.
-
O arquivo
src/dx-excshell-1/actions/generic/mockPIMCommunicator.js
faz o mascaramento da chamada da API do PIM para recuperar metadados adicionais como SKU e nome do fornecedor. Este arquivo é usado para fins de demonstração. Depois que o fluxo de ponta a ponta estiver funcionando, substitua essa função por uma chamada para o sistema PIM real para recuperar metadados do ativo.code language-javascript /** * Mock PIM API to get the product data such as SKU, Supplier, etc. * * In a real-world scenario, this function would call the PIM API to get the product data. * For this example, we are returning mock data. * * @param {string} assetId - The assetId to get the product data. */ module.exports = { async getPIMData(assetId) { if (!assetId) { throw new Error('Invalid assetId'); } // Mock response data for demo purposes const data = { SKUID: 'MockSKU 123', SupplierName: 'mock-supplier', // ... other product data }; return data; }, };
-
O arquivo
src/dx-excshell-1/actions/generic/aemCommunicator.js
atualiza os metadados do ativo no AEM usando a API do Assets Author.code language-javascript const fetch = require('node-fetch'); ... /** * Get IMS Access Token using Client Credentials Flow * * @param {*} clientId - IMS Client ID from ADC project's OAuth Server-to-Server Integration * @param {*} clientSecret - IMS Client Secret from ADC project's OAuth Server-to-Server Integration * @param {*} scopes - IMS Meta Scopes from ADC project's OAuth Server-to-Server Integration as comma separated strings * @returns {string} - Returns the IMS Access Token */ async function getIMSAccessToken(clientId, clientSecret, scopes) { const adobeIMSV3TokenEndpointURL = 'https://ims-na1.adobelogin.com/ims/token/v3'; const options = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: `grant_type=client_credentials&client_id=${clientId}&client_secret=${clientSecret}&scope=${scopes}`, }; const response = await fetch(adobeIMSV3TokenEndpointURL, options); const responseJSON = await response.json(); return responseJSON.access_token; } async function updateAEMAssetMetadata(metadataDetails, aemAssetEvent, params) { ... // Transform the metadata details to JSON Patch format, // see https://developer.adobe.com/experience-cloud/experience-manager-apis/api/experimental/assets/author/#operation/patchAssetMetadata const transformedMetadata = Object.keys(metadataDetails).map((key) => ({ op: 'add', path: `wknd-${key.toLowerCase()}`, value: metadataDetails[key], })); ... // Get ADC project's OAuth Server-to-Server Integration credentials const clientId = params.ADC_CECREDENTIALS_CLIENTID; const clientSecret = params.ADC_CECREDENTIALS_CLIENTSECRET; const scopes = params.ADC_CECREDENTIALS_METASCOPES; // Get IMS Access Token using Client Credentials Flow const access_token = await getIMSAccessToken(clientId, clientSecret, scopes); // Call AEM Author service to update the metadata using Assets Author API // See https://developer.adobe.com/experience-cloud/experience-manager-apis/api/experimental/assets/author/ const res = await fetch(`${aemAuthorHost}/adobe/assets/${assetId}/metadata`, { method: 'PATCH', headers: { 'Content-Type': 'application/json-patch+json', 'If-Match': '*', 'X-Adobe-Accept-Experimental': '1', 'X-Api-Key': 'aem-assets-management-api', // temporary value Authorization: `Bearer ${access_token}`, }, body: JSON.stringify(transformedMetadata), }); ... } module.exports = { updateAEMAssetMetadata };
O arquivo
.env
armazena os detalhes das credenciais de Servidor para Servidor OAuth do projeto ADC, e eles são passados como parâmetros para a ação usando o arquivoext.config.yaml
. Consulte os Arquivos de Configuração do App Builder para gerenciar segredos e parâmetros de ação. -
A pasta
src/dx-excshell-1/actions/model
contém arquivosaemAssetEvent.js
eerrors.js
, que são usados pela ação para analisar o evento recebido e manipular erros, respectivamente. -
O arquivo
src/dx-excshell-1/actions/generic/index.js
usa os módulos mencionados anteriormente para orquestrar a recuperação e atualização de metadados.code language-javascript ... let responseMsg; // handle the challenge probe request, they are sent by I/O to verify the action is valid if (params.challenge) { logger.info('Challenge probe request detected'); responseMsg = JSON.stringify({ challenge: params.challenge }); } else { logger.info('AEM Asset Event request received'); // create AEM Asset Event object from request parameters const aemAssetEvent = new AEMAssetEvent(params); // Call mock PIM API to get the product data such as SKU, Supplier, etc. const mockPIMData = await mockPIMAPI.getPIMData( aemAssetEvent.getAssetName(), ); logger.info('Mock PIM API response', mockPIMData); // Update PIM received data in AEM as Asset metadata const aemUpdateStatus = await updateAEMAssetMetadata( mockPIMData, aemAssetEvent, params, ); logger.info('AEM Asset metadata update status', aemUpdateStatus); if (aemUpdateStatus) { // create response message responseMsg = JSON.stringify({ message: 'AEM Asset Event processed successfully, updated the asset metadata with PIM data.', assetdata: { assetName: aemAssetEvent.getAssetName(), assetPath: aemAssetEvent.getAssetPath(), assetId: aemAssetEvent.getAssetId(), aemHost: aemAssetEvent.getAEMHost(), pimdata: mockPIMData, }, }); } // response object const response = { statusCode: 200, body: responseMsg, }; // Return the response to the caller return response; ... }
Implante a ação atualizada no Adobe I/O Runtime usando o seguinte comando:
$ aio app deploy
Upload de ativos e verificação de metadados
Para verificar a integração do AEM Assets e do PIM, siga estas etapas:
-
Para exibir os metadados fornecidos pelo PIM modelo, como SKU e Nome do Fornecedor, crie o esquema de metadados no AEM Assets. Consulte Esquema de metadados que exibe as propriedades de metadados do SKU e do nome do fornecedor.
-
Carregue um ativo no serviço do autor do AEM e verifique a atualização dos metadados.
Conceito e principais pontos
A sincronização de metadados de ativos entre o AEM e outros sistemas, como o PIM, geralmente é necessária na empresa. O uso do evento AEM desses requisitos pode ser obtido.
- O código de recuperação de metadados de ativos é executado fora do AEM, evitando a carga no serviço de Autor AEM, portanto, uma arquitetura orientada por eventos que é dimensionada de forma independente.
- A recém-introduzida API do autor do Assets é usada para atualizar os metadados de ativos no AEM.
- A autenticação de API usa OAuth de servidor para servidor (também conhecido como fluxo de credenciais de cliente). Consulte o guia de implementação de credenciais de servidor para servidor do OAuth.
- Em vez de Ações do Adobe I/O Runtime, outros webhooks ou o Amazon EventBridge podem ser usados para receber o evento do AEM Assets e processar a atualização de metadados.
- Os eventos de ativos por meio do evento AEM capacitam as empresas a automatizar e simplificar processos críticos, promovendo a eficiência e a coerência em todo o ecossistema de conteúdo.