Eventos de AEM Assets para la integración con PIM

IMPORTANT
Este tutorial utiliza las API experimentales de AEM as a Cloud Service. Para obtener acceso a estas API, debe aceptar un acuerdo de software previo al lanzamiento y que el personal de ingeniería de Adobes habilite manualmente estas API para su entorno. Para solicitar acceso, póngase en contacto con el soporte de Adobe.

Aprenda a integrar AEM Assets AEM con un sistema de terceros, como un sistema de administración de información de producto (PIM) o de administración de línea de producto (PLM), para actualizar los metadatos de recursos mediante eventos de E/S nativos de la. Al recibir un evento de AEM Assets AEM, los metadatos de los recursos se pueden actualizar en los sistemas de gestión de recursos, PIM o en ambos, según los requisitos comerciales. AEM Sin embargo, en este ejemplo se muestra la actualización de los metadatos de los recursos en el caso de los recursos de.

AEM Para ejecutar el código de actualización de metadatos del recurso fuera de la plataforma sin servidor Adobe I/O Runtime, se utiliza la plataforma sin servidor de.

El flujo de procesamiento de eventos es el siguiente:

Eventos de AEM Assets para la integración de PIM

  1. AEM El servicio de creación de recursos de déclencheur un evento Procesamiento de recursos completado cuando se completa la carga de un recurso y se han completado todas las actividades de procesamiento de recursos. Esperar a que se complete el procesamiento garantiza que se haya completado cualquier procesamiento predeterminado, como la extracción de metadatos.
  2. El evento se enviará al servicio Eventos de Adobe I/O.
  3. El servicio Eventos de Adobe I/O pasa el evento a Adobe I/O Runtime Action para su procesamiento.
  4. La acción de Adobe I/O Runtime llama a la API del sistema PIM para recuperar metadatos adicionales, como el SKU, la información del proveedor u otros detalles.
  5. Los metadatos adicionales recuperados del PIM se actualizan en AEM Assets mediante la API de autor de Assets.

Requisitos previos

Para completar este tutorial, necesita lo siguiente:

Pasos de desarrollo

Los pasos de desarrollo de alto nivel son los siguientes:

  1. Creación de un proyecto en Adobe Developer Console (ADC)
  2. Inicializar el proyecto para el desarrollo local
  3. Configurar el proyecto en ADC
  4. AEM Configurar el servicio de autor de la para habilitar la comunicación del proyecto de ADC
  5. Desarrollar una acción de tiempo de ejecución que organice la recuperación y actualización de metadatos
  6. AEM Cargue un recurso al servicio de creación de recursos y verifique que se hayan actualizado los metadatos.

Para obtener más información sobre los pasos 1-2, consulte el ejemplo de Acción y eventos de Adobe I/O Runtime AEM y, para ver los pasos 3-6, consulte las secciones siguientes.

Configuración del proyecto en Adobe Developer Console (ADC)

Para recibir eventos de AEM Assets y ejecutar la acción de Adobe I/O Runtime creada en el paso anterior, configure el proyecto en ADC.

  • En ADC, vaya al proyecto. Seleccione el área de trabajo Stage, donde se implementó la acción de tiempo de ejecución.

  • Haga clic en el botón Agregar servicio y seleccione la opción Evento. En el diálogo Agregar eventos, seleccione Experience Cloud > AEM Assets y haga clic en Siguiente. Siga los pasos de configuración adicionales, seleccione la instancia de AEM CS, el evento Procesamiento de recursos completado, el tipo de autenticación de servidor a servidor OAuth y otros detalles.

    Evento de AEM Assets - agregar evento

  • Finalmente, en el paso Cómo recibir eventos, expanda la opción Acción en tiempo de ejecución y seleccione la acción genérica creada en el paso anterior. Haga clic en Guardar eventos configurados.

    Evento de AEM Assets - recibir evento

  • Del mismo modo, haga clic en el botón Agregar servicio y seleccione la opción API. En el modal Add an API, seleccione Experience Cloud > API de AEM as a Cloud Service y haga clic en Siguiente.

    Agregar API de AEM as a Cloud Service - Configurar proyecto

  • A continuación, seleccione Servidor a servidor OAuth para el tipo de autenticación y haga clic en Siguiente.

  • AEM A continuación, seleccione el perfil de producto Administradores de la-XXX y haga clic en Guardar la API configurada. Para actualizar el recurso en cuestión, el perfil de producto seleccionado debe estar asociado al entorno de AEM Assets desde el que se produce el evento y tener acceso suficiente para actualizar los recursos allí.

    Agregar API de AEM as a Cloud Service - Configurar proyecto

AEM Configurar el servicio de autor de la para habilitar la comunicación del proyecto ADC

AEM AEM Para actualizar los metadatos de los recursos en la desde el proyecto ADC anterior, configure el servicio de autor de la configuración con el ID de cliente del proyecto ADC. El id de cliente se agrega como variable de entorno usando la interfaz de usuario de Cloud Manager de Adobe.

  • Inicie sesión en Adobe Cloud Manager, seleccione la pestaña Programa > Entorno > Puntos suspensivos > Ver detalles > Configuración.

    Adobe Cloud Manager - Configuración del entorno

  • A continuación, haga clic en el botón Agregar configuración e introduzca los detalles de la variable como

    table 0-row-4 1-row-4
    Nombre Value AEM servicio de Tipo
    ADOBE_PROVIDED_CLIENT_ID <COPY_FROM_ADC_PROJECT_CREDENTIALS> Autor Variable

    Adobe Cloud Manager - Configuración del entorno

  • Haga clic en Agregar y Guardar la configuración.

Desarrollar acción de tiempo de ejecución

Para recuperar y actualizar los metadatos, comience actualizando el código de acción generic creado automáticamente en la carpeta src/dx-excshell-1/actions/generic.

Consulte el archivo adjunto WKND-Assets-PIM-Integration.zip para obtener el código completo; a continuación, se resaltan los archivos clave.

  • El archivo src/dx-excshell-1/actions/generic/mockPIMCommunicator.js se burla de la llamada API de PIM para recuperar metadatos adicionales, como el SKU y el nombre del proveedor. Este archivo se utiliza con fines de demostración. Una vez que tenga el flujo de extremo a extremo en funcionamiento, reemplace esta función con una llamada a su sistema PIM real para recuperar metadatos del recurso.

    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;
        },
    };
    
  • AEM El archivo de src/dx-excshell-1/actions/generic/aemCommunicator.js actualiza los metadatos de recursos en la mediante la API de autor de Assets.

    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 };
    

    El archivo .env almacena los detalles de credenciales de servidor a servidor OAuth del proyecto ADC y se pasan como parámetros a la acción mediante el archivo ext.config.yaml. Consulte Archivos de configuración de App Builder para administrar secretos y parámetros de acción.

  • La carpeta src/dx-excshell-1/actions/model contiene aemAssetEvent.js y errors.js archivos, que la acción utiliza para analizar el evento recibido y controlar los errores respectivamente.

  • El archivo src/dx-excshell-1/actions/generic/index.js utiliza los módulos mencionados anteriormente para organizar la recuperación y actualización de metadatos.

    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;
    
      ...
    }
    

Implemente la acción actualizada en Adobe I/O Runtime con el siguiente comando:

$ aio app deploy

Verificación de metadatos y carga de recursos

Para comprobar la integración de AEM Assets y PIM, siga estos pasos:

  • Para ver los metadatos falsos proporcionados por el PIM, como el SKU y el nombre del proveedor, cree un esquema de metadatos en AEM Assets. Consulte Esquema de metadatos que muestre las propiedades de metadatos del SKU y el nombre del proveedor.

  • AEM Cargue un recurso en el servicio de creación de y compruebe la actualización de los metadatos.

    Actualización de metadatos de AEM Assets

Concepto y elementos clave

AEM La sincronización de metadatos de recursos entre los sistemas de administración de recursos y otros sistemas, como PIM, suele ser necesaria en la empresa. AEM Se puede lograr el uso de ventilación por parte de los EASYVENTING.

  • AEM AEM El código de recuperación de metadatos del recurso se ejecuta fuera de la, lo que evita la carga en el servicio de creación de recursos, por lo que la arquitectura orientada a eventos se adapta de forma independiente.
  • La recién introducida API de autor de Assets AEM se utiliza para actualizar los metadatos de los recursos en la creación de recursos de la.
  • La autenticación de la API usa OAuth servidor a servidor (también conocido como flujo de credenciales de cliente). Consulte Guía de implementación de credenciales de servidor a servidor OAuth.
  • En lugar de Acciones de Adobe I/O Runtime, se pueden utilizar otros webhooks o Amazon EventBridge para recibir el evento de AEM Assets y procesar la actualización de metadatos.
  • AEM Los eventos de recursos a través de la ventilación de la permiten a las empresas automatizar y optimizar los procesos críticos, fomentando la eficacia y la coherencia en todo el ecosistema de contenido.
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69