AEM Events processing using Adobe I/O Runtime Action
- Onderwerpen:
- Ontwikkelen
- App Builder
Gemaakt voor:
- Beginner
- Ontwikkelaar
Leer hoe te om ontvangen Gebeurtenissen van AEM te verwerken gebruikend Adobe I/O RuntimeActie. Dit voorbeeld verbetert het vroegere voorbeeld Actie van Adobe I/O Runtime en de Gebeurtenissen van AEM, zorg ervoor u het alvorens met dit hebt voltooid.
In dit voorbeeld worden de oorspronkelijke gebeurtenisgegevens en de ontvangen gebeurtenis opgeslagen als een activiteitenbericht in Adobe I/O Runtime-opslag. Nochtans, als de gebeurtenis van Gewijzigd het Fragment van de Inhoud type is, dan roept het ook de auteursdienst van AEM om de wijzigingsdetails te vinden. Tot slot toont het de gebeurtenisdetails in één enkele paginatoepassing (SPA).
Voorwaarden
U hebt het volgende nodig om deze zelfstudie te voltooien:
-
Het milieu van AEM as a Cloud Service met toegelaten de Gebeurtenis van AEM. Ook, moet het steekproef 🔗 project van de Plaatsen WKND worden opgesteld aan het.
-
Toegang tot Adobe Developer Console.
-
Adobe Developer CLIgeïnstalleerd op uw lokale machine.
-
Lokaal geïnitialiseerd project van het vroegere voorbeeld de Actie van Adobe I/O Runtime en de Gebeurtenissen van AEM.
AEM Events Processor, actie
In dit voorbeeld, voert de actie van de gebeurtenisbewerker 🔗 volgende taken uit:
- Parseert ontvangen gebeurtenis in een activiteitenbericht.
- Als de ontvangen gebeurtenis van Gewijzigd van het Fragment van de Inhoud type is, vraag terug naar de auteursdienst van AEM om de wijzigingsdetails te vinden.
- Hiermee worden de oorspronkelijke gebeurtenisgegevens, het activiteitenbericht en eventuele wijzigingsgegevens in Adobe I/O Runtime-opslag gehandhaafd.
Om bovengenoemde taken uit te voeren, laten wij beginnen door een actie aan het project toe te voegen, JavaScript modules te ontwikkelen om de bovengenoemde taken uit te voeren, en tenslotte de actiecode bij te werken om de ontwikkelde modules te gebruiken.
Verwijs naar het in bijlage WKND-AEM-Event-Runtime-Action.zipdossier voor de volledige code, en onder sectie benadrukt de belangrijkste dossiers.
Handeling toevoegen
-
Voer de volgende opdracht uit om een handeling toe te voegen:
aio app add action
-
Selecteer
@adobe/generator-add-action-generic
als actiesjabloon en geef de handeling de naamaem-event-processor
.
JavaScript-modules ontwikkelen
Om de hierboven vermelde taken uit te voeren, ontwikkelen de volgende modules van JavaScript.
-
De
src/dx-excshell-1/actions/aem-event-processor/eventValidator.js
module bepaalt als de ontvangen gebeurtenis van Gewijzigd het Fragment van de Inhoud type is.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;
-
De module
src/dx-excshell-1/actions/aem-event-processor/loadEventDetailsFromAEM.js
roept de AEM-auteurservice op om de wijzigingsdetails te zoeken.... 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], }), ); } } ...
Verwijs naar zelfstudie van de Referenties van de Dienst van AEMom meer over het te leren. Ook, de Dossiers van de Configuratie van App Buildervoor het beheren van geheimen en actieparameters.
-
In de module
src/dx-excshell-1/actions/aem-event-processor/storeEventData.js
worden de oorspronkelijke gebeurtenisgegevens, het activiteitenbericht en eventuele wijzigingsgegevens opgeslagen in Adobe I/O Runtime.... 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, ); ...
Handelingscode bijwerken
Werk ten slotte de actiecode bij in src/dx-excshell-1/actions/aem-event-processor/index.js
om de ontwikkelde modules te gebruiken.
...
// 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;
}
...
Aanvullende bronnen
- De map
src/dx-excshell-1/actions/model
bevataemEvent.js
- enerrors.js
-bestanden, die door de handeling worden gebruikt om respectievelijk de ontvangen gebeurtenis te parseren en fouten af te handelen. - De map
src/dx-excshell-1/actions/load-processed-aem-events
bevat actiecode. Deze handeling wordt door de SPA gebruikt om de verwerkte AEM-gebeurtenissen te laden vanuit de Adobe I/O Runtime-opslag. - De map
src/dx-excshell-1/web-src
bevat de SPA-code waarmee de verwerkte AEM Events wordt weergegeven. - Het bestand
src/dx-excshell-1/ext.config.yaml
bevat actieconfiguratie en parameters.
Concept en toetsaanslagen
De vereisten voor gebeurtenisverwerking verschillen van project tot project, maar de belangrijkste taken in dit voorbeeld zijn:
- De gebeurtenisverwerking kan worden uitgevoerd met Adobe I/O Runtime Action.
- De Runtime Actie kan met systemen zoals uw interne toepassingen, derdeoplossingen, en de oplossingen van Adobe communiceren.
- De runtimeactie dient als ingangspunt voor een bedrijfsproces dat rond een inhoudsverandering wordt ontworpen.