AEM Assets event for PIM integration

IMPORTANT
I den här självstudien används experimentella AEM as a Cloud Service API:er. För att få tillgång till dessa API:er måste du godkänna ett förhandsavtal för programvara och ha dessa API:er manuellt aktiverade för din miljö av Adobe-tekniker. Kontakta supporten för att få åtkomst till Adobe.

Lär dig hur du integrerar AEM Assets med ett tredjepartssystem, t.ex. ett PIM-system (Product Information Management) eller PLM-system (Product Line Management), för att uppdatera metadata för resurser med hjälp av AEM-I/O-händelser. När du får en AEM Assets-händelse kan metadata för resursen uppdateras i AEM, PIM eller båda systemen, baserat på företagets behov. I det här exemplet visas dock hur metadata för resursen uppdateras i AEM.

Om du vill köra metadatauppdateringen av resursen utanför AEM, Adobe I/O Runtime, används en serverlös plattform.

Händelsebearbetningsflödet är följande:

AEM Assets-händelser för PIM-integrering

  1. Tjänsten AEM Author utlöser en händelse om att resursbearbetningen har slutförts när en resursöverföring har slutförts och alla resursbearbetningsaktiviteter har slutförts. Om du väntar på att bearbetningen ska slutföras ser du till att all körklar bearbetning, till exempel metadataextrahering, har slutförts.
  2. Händelsen skickas till tjänsten Adobe I/O Events.
  3. Händelsetjänsten Adobe I/O skickar händelsen till Adobe I/O Runtime-åtgärden för bearbetning.
  4. Adobe I/O Runtime Action anropar PIM-systemets API för att hämta ytterligare metadata som SKU, leverantörsinformation eller annan information.
  5. De ytterligare metadata som hämtas från PIM uppdateras sedan i AEM Assets med Assets Author API.

Förutsättningar

För att kunna genomföra den här självstudiekursen behöver du:

Utvecklingssteg

Utvecklingsstegen på hög nivå är följande:

  1. Skapa ett projekt i Adobe Developer Console (ADC)
  2. Initiera projektet för lokal utveckling
  3. Konfigurera projektet i ADC
  4. Konfigurera AEM Author-tjänsten för att aktivera ADC-projektkommunikation
  5. Utveckla en körningsåtgärd som hanterar hämtning och uppdatering av metadata
  6. Överför en resurs till AEM Author och verifiera att metadata har uppdaterats

Mer information om steg 1-2 finns i exemplet Adobe I/O Runtime Action och AEM Events och för steg 3-6 finns i följande avsnitt.

Konfigurera projektet i Adobe Developer Console (ADC)

Om du vill ta emot AEM Assets Events och köra Adobe I/O Runtime Action som skapades i föregående steg konfigurerar du projektet i ADC.

  • Gå till projektet i ADC. Välj arbetsytan Stage. Det är här körningsåtgärden distribuerades.

  • Klicka på knappen Lägg till tjänst och välj alternativet Händelse . I dialogrutan Lägg till händelser väljer du Experience Cloud > AEM Assets och klickar på Nästa. Följ ytterligare konfigurationssteg, välj AEMCS-instans, Resursbearbetning slutförd -händelse, OAuth Server-till-server-autentiseringstyp och annan information.

    AEM Assets Event - lägg till händelse

  • I steget Så här tar du emot händelser expanderar du alternativet Körningsåtgärd och väljer den generiska åtgärden som skapades i föregående steg. Klicka på Spara konfigurerade händelser.

    AEM Assets Event - ta emot händelse

  • Klicka på knappen Lägg till tjänst och välj alternativet API . I Lägg till ett API modal väljer du Experience Cloud > AEM as a Cloud Service API och klickar på Nästa.

    Lägg till AEM as a Cloud Service API - Konfigurera projekt

  • Välj sedan OAuth Server-to-Server som autentiseringstyp och klicka på Nästa.

  • Välj sedan produktprofilen AEM Administratörer-XXX och klicka på Spara konfigurerad API. Om du vill uppdatera resursen i fråga måste den valda produktprofilen associeras med den AEM Assets-miljö som händelsen skapas från och ha tillräcklig tillgång till för att uppdatera resurserna där.

    Lägg till AEM as a Cloud Service API - Konfigurera projekt

Konfigurera AEM Author Service för att aktivera ADC-projektkommunikation

Om du vill uppdatera metadata för resursen i AEM från ovanstående ADC-projekt konfigurerar du AEM Author-tjänsten med ADC-projektets klient-ID. Klient-ID:t läggs till som miljövariabel med användargränssnittet Adobe Cloud Manager .

  • Logga in på Adobe Cloud Manager, välj Program > Miljö > Ellips > Visa detaljer > fliken Konfiguration.

    Adobe Cloud Manager - miljökonfiguration

  • Lägg till konfiguration och ange variabelinformationen som

    table 0-row-4 1-row-4
    Namn Värde AEM Typ
    ADOBE_PROVIDED_CLIENT_ID <COPY_FROM_ADC_PROJECT_CREDENTIALS> Författare Variabel

    Adobe Cloud Manager - miljökonfiguration

  • Klicka på Lägg till och Spara konfigurationen.

Åtgärd vid utveckling av körning

Om du vill hämta och uppdatera metadata börjar du med att uppdatera den automatiskt skapade generiska åtgärdskoden i mappen src/dx-excshell-1/actions/generic.

Se den bifogade filen WKND-Assets-PIM-Integration.zip för den fullständiga koden och i avsnittet nedan markeras de viktigaste filerna.

  • Filen src/dx-excshell-1/actions/generic/mockPIMCommunicator.js kopplar PIM API-anropet för att hämta ytterligare metadata som SKU och leverantörsnamn. Den här filen används för demoändamål. När du har arbetsflödet från början till slut ersätter du den här funktionen med ett anrop till ditt riktiga PIM-system för att hämta metadata för resursen.

    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;
        },
    };
    
  • Filen src/dx-excshell-1/actions/generic/aemCommunicator.js uppdaterar metadata för resursen i AEM med Assets Author API.

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

    Filen .env lagrar ADC-projektets autentiseringsuppgifter för OAuth Server-till-Server, och de skickas som parametrar till åtgärden med hjälp av filen ext.config.yaml. Mer information om hur du hanterar hemligheter och åtgärdsparametrar finns i App Builder konfigurationsfiler.

  • Mappen src/dx-excshell-1/actions/model innehåller aemAssetEvent.js- och errors.js-filer, som används av åtgärden för att tolka den mottagna händelsen och hantera fel.

  • Filen src/dx-excshell-1/actions/generic/index.js använder de tidigare nämnda modulerna för att ordna hämtning och uppdatering av metadata.

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

Distribuera den uppdaterade åtgärden till Adobe I/O Runtime med följande kommando:

$ aio app deploy

Tillgångsuppladdning och metadataverifiering

Följ de här stegen för att verifiera integreringen mellan AEM Assets och PIM:

  • Om du vill visa PIM-modellens metadata, som SKU och leverantörsnamn, skapar du metadataram i AEM Assets i Metadataschemat som visar metadataegenskaperna för SKU och leverantörsnamn.

  • Överför en resurs i AEM Author-tjänsten och verifiera metadatauppdateringen.

    AEM Assets metadatauppdatering

Koncept och viktiga arbetsmoment

Synkronisering av metadata för tillgångar mellan AEM och andra system som PIM krävs ofta i företaget. AEM Eventing kan man uppnå sådana krav.

  • Koden för hämtning av metadata om mediematerial körs utanför AEM, vilket undviker belastningen på AEM Author-tjänsten och därmed händelsestyrd arkitektur som skalas oberoende av varandra.
  • Det nya API:t för Assets Author används för att uppdatera metadata för resurser i AEM.
  • API-autentiseringen använder OAuth server-till-server (kallas klientinloggningsflöde), se Implementeringsguiden för OAuth Server-till-server-autentiseringsuppgifter.
  • I stället för Adobe I/O Runtime Actions kan andra webhooks eller Amazon EventBridge användas för att ta emot händelsen AEM Assets och bearbeta metadatauppdateringen.
  • Tillgångshändelser via AEM Eventing ger företag möjlighet att automatisera och effektivisera kritiska processer, vilket främjar effektivitet och enhetlighet i innehållets ekosystem.
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69