AEM Procesamiento de eventos de mediante la acción de Adobe I/O Runtime

AEM Obtenga información sobre cómo procesar eventos de recibidos mediante la acción Adobe I/O Runtime. Este ejemplo mejora el ejemplo anterior Adobe I/O Runtime AEM Action y Eventos de; asegúrese de que lo ha completado antes de continuar con este.

En este ejemplo, el procesamiento de eventos almacena los datos de evento originales y el evento recibido como un mensaje de actividad en el almacenamiento de Adobe I/O Runtime. AEM Sin embargo, si el evento es del tipo Fragmento de contenido modificado, también llama al servicio de autor de llamadas para encontrar los detalles de la modificación. SPA Finalmente, muestra los detalles del evento en una aplicación de una sola página ().

Requisitos previos

Para completar este tutorial, necesita lo siguiente:

IMPORTANT
Los eventos de AEM as a Cloud Service solo están disponibles para los usuarios registrados en el modo previo al lanzamiento. AEM Para habilitar la celebración de eventos en su entorno de AEM as a Cloud Service AEM, póngase en contacto con el equipo de eventos-eventos.

AEM Acción del procesador de eventos

En este ejemplo, el procesador de eventos action realiza las siguientes tareas:

  • Analiza el evento recibido en un mensaje de actividad.
  • AEM Si el evento recibido es del tipo Fragmento de contenido modificado, llame de nuevo al servicio de autor de la llamada para encontrar los detalles de la modificación.
  • Conserva los datos de evento, el mensaje de actividad y los detalles de modificación originales (si los hay) en Adobe I/O Runtime Storage.

Para realizar las tareas anteriores, empecemos agregando una acción al proyecto, desarrollemos módulos JavaScript para realizar las tareas anteriores y, finalmente, actualicemos el código de acción para utilizar los módulos desarrollados.

AEM Consulte el archivo adjunto WKND–Eventing-Runtime-Action.zip para obtener el código completo; a continuación, se resaltan los archivos clave.

Añadir acción

  • Para agregar una acción, ejecute el siguiente comando:

    code language-bash
    aio app add action
    
  • Seleccione @adobe/generator-add-action-generic como plantilla de acción y asigne a la acción el nombre aem-event-processor.

    Agregar acción

Desarrollar módulos de JavaScript

Para realizar las tareas mencionadas anteriormente, vamos a desarrollar los siguientes módulos de JavaScript.

  • El módulo src/dx-excshell-1/actions/aem-event-processor/eventValidator.js determina si el evento recibido es del tipo Fragmento de contenido modificado.

    code language-javascript
    async function needsAEMCallback(aemEvent) {
    // create a Logger
    const logger = Core.Logger('eventValidator', {
        level: 'info',
    });
    
    let isValid = false;
    
    // verify the event is a Content Fragment Modified event
    if (
        aemEvent
        && aemEvent.ContentType === 'contentFragment'
        && aemEvent.EventName === 'modified'
    ) {
        logger.info('Processing Content Fragment Modified Event');
        isValid = true;
    }
    
    return isValid;
    }
    
    module.exports = needsAEMCallback;
    
  • AEM El módulo src/dx-excshell-1/actions/aem-event-processor/loadEventDetailsFromAEM.js llama al servicio de autor de para encontrar los detalles de la modificación.

    code language-javascript
    ...
    const auth = require('@adobe/jwt-auth');
    ...
    // Get AEM Service Credentials aka Technical Account details.
    // These are passed to the action as params and added in .env file.
    const clientId = params.AEM_SERVICECREDENTIALS_TECHNICALACCOUNT_CLIENTID;
    const technicalAccountId = params.AEM_SERVICECREDENTIALS_ID;
    const orgId = params.AEM_SERVICECREDENTIALS_ORG;
    const clientSecret = params.AEM_SERVICECREDENTIALS_TECHNICALACCOUNT_CLIENTSECRET;
    // Private key is passed as a string with \n and \r characters escaped.
    const privateKey = params.AEM_SERVICECREDENTIALS_PRIVATEKEY.replace(
        /\\n/g,
        '\n',
    ).replace(/\\r/g, '\r');
    const metaScopes = params.AEM_SERVICECREDENTIALS_METASCOPES.split(',');
    const ims = `https://${params.AEM_SERVICECREDENTIALS_IMSENDPOINT}`;
    
    // Get the access token from IMS using Adobe I/O SDK
    const { access_token } = await auth({
        clientId,
        technicalAccountId,
        orgId,
        clientSecret,
        privateKey,
        metaScopes,
        ims,
    });
    ...
    // Call AEM Author service to get the CF details using AEM Assets API
    const res = await fetch(
        `${aemAuthorHost}${cfPath.replace('/content/dam/', '/api/assets/')}.json`,
    {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        Authorization: `Bearer ${access_token}`,
      },
    },
    );
    
    let newValuesOfCFPropertiesAddedOrModified = {};
    // If the response is OK, get the values of the CF properties that were added or modified
    if (res.ok) {
        logger.info('AEM Event Details loaded from AEM Author instance');
        const responseJSON = await res.json();
    
        // Get the values of the CF properties that were added or modified
        if (
        responseJSON
        && responseJSON.properties
        && responseJSON.properties.elements
        ) {
        const allCurrentCFProperties = responseJSON.properties.elements;
    
        newValuesOfCFPropertiesAddedOrModified = cfPropertiesAddedOrModified.map(
            (key) => ({
            key,
            value: allCurrentCFProperties[key],
            }),
        );
        }
    }
    ...
    

    AEM Consulte el tutorial de credenciales de servicio para obtener más información al respecto. Además, los archivos de configuración de App Builder para administrar secretos y parámetros de acción.

  • El módulo src/dx-excshell-1/actions/aem-event-processor/storeEventData.js almacena los datos de evento, el mensaje de actividad y los detalles de modificación originales (si los hay) en el almacenamiento de Adobe I/O Runtime.

    code language-javascript
    ...
    const filesLib = require('@adobe/aio-lib-files');
    ...
    
    const files = await filesLib.init();
    
    const eventDataAsJSON = JSON.stringify({
        activity: activityMessage,
        aemEvent,
        aemEventDetails,
    });
    
    // store details in a folder named YYYY-MM-DD and a file named <eventID>.json
    const bytesWritten = await files.write(
        `${formattedDate}/${aemEvent.getEventID()}.json`,
        eventDataAsJSON,
    );
    ...
    

Actualizar código de acción

Por último, actualice el código de acción en src/dx-excshell-1/actions/aem-event-processor/index.js para que utilice los módulos desarrollados.

...
// 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 Event request received');

    // create AEM Event object from request parameters
    const aemEvent = new AEMEvent(params);

    // get AEM Event as activity message using the helper method
    const activityMessage = aemEvent.getEventAsActivityMessage();

    // determine if AEM Event requires callback to AEM Author service
    const callbackAEMForEventDetails = await needsAEMCallback(aemEvent);

    let eventDetails = {};
    if (callbackAEMForEventDetails) {
    // call AEM Author service to get specifics about the event
    eventDetails = await loadEventDetailsFromAEMAuthorService(
        aemEvent,
        params,
    );
    }

    // store AEM Event and Event details in the file system
    const storageDetails = await storeEventData(
    activityMessage,
    aemEvent,
    eventDetails || {},
    );
    logger.info(`Storage details: ${JSON.stringify(storageDetails)}`);

    // create response message
    responseMsg = JSON.stringify({
    message: 'AEM Event processed',
    activityMessage,
    });

    // response object
    const response = {
    statusCode: 200,
    body: responseMsg,
    };
    logger.info('Adobe I/O Runtime action response', response);

    // Return the response to the caller
    return response;
}
...

Recursos adicionales

  • La carpeta src/dx-excshell-1/actions/model contiene aemEvent.js y errors.js archivos, que la acción utiliza para analizar el evento recibido y controlar los errores respectivamente.
  • SPA AEM La carpeta src/dx-excshell-1/actions/load-processed-aem-events contiene código de acción. El usuario utiliza esta acción para cargar los eventos procesados desde el almacenamiento de Adobe I/O Runtime. El usuario utiliza esta acción para cargar los eventos procesados desde el almacenamiento de.
  • SPA AEM La carpeta src/dx-excshell-1/web-src contiene el código de la, que muestra los eventos de procesados.
  • El archivo src/dx-excshell-1/ext.config.yaml contiene parámetros y configuración de acción.

Concepto y elementos clave

Los requisitos de procesamiento de eventos difieren de un proyecto a otro, pero las principales conclusiones de este ejemplo son:

  • El procesamiento de eventos se puede realizar mediante la acción de Adobe I/O Runtime.
  • La acción de tiempo de ejecución puede comunicarse con sistemas como las aplicaciones internas, las soluciones de terceros y las soluciones de Adobe.
  • La acción de tiempo de ejecución sirve como punto de entrada a un proceso empresarial diseñado en torno a un cambio de contenido.
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69