Pipeline d'index Magasin Ingest

Les mappages de données complets à partir de la spécification, de la base de données et du schéma sont affichés pour la catégorie Magasin.

Mise en œuvre d'un pipeline de zone d'index Magasin

Le diagramme suivant illustre comment le pipeline d'indexation Magasin est implémenté dans Apache NiFi. Le flux se compose principalement de huit étapes, chacune d'elles est illustrée à l'aide d'exemples de l'interface utilisateur NiFi. Pour plus d'informations sur l'interface, consultez le Guide de l'utilisateur Apache NiFi.

Des exemples étendus sont disponibles pour chaque étape. Ils sont fournis dans les sections inférieures de cette rubrique. Les exemples incluent le code SQL, les informations de tableau de schéma et les exemples d'entrées et de sorties.

Etape 1 : Création d'un document Magasin

Cette étape décrit comment transformer les données Magasin en index Magasin. Pour un exemple de code, voir Exemples de l'étape 1.

La transformation des données Magasin commence par l'exécution de l'instruction SQL suivante pour récupérer les données Catalogue depuis la base de données Commerce.
         SELECT F.STORE_ID, F.STORETYPE, F.LANGUAGE_ID AS DEF_LANGUAGE_ID, F.FFMCENTER_ID, F.CONTRACT_ID, G.DIRECTORY,
		E.SETCCURR, E.IDENTIFIER AS STORE_IDENTIFIER, E.MEMBER_ID, N.LANGUAGE_ID, D.DISPLAYNAME, D.DESCRIPTION,
		L.LOCALENAME, F.INVENTORYSYSTEM, F.CRTDBYCNTR_ID
	   FROM STOREENT E, STOREENTDS D, STORELANG N, LANGUAGE L,
	        (SELECT F.CONTRACT_ID, S.STORE_ID, S.LANGUAGE_ID, S.STORETYPE, S.FFMCENTER_ID, S.INVENTORYSYSTEM, S.CRTDBYCNTR_ID, S.DIRECTORY 
	           FROM STORE S
	                LEFT OUTER JOIN STOREDEF F ON (S.STORE_ID = F.STORE_ID)
	          WHERE S.STORE_ID IN (SELECT R.RELATEDSTORE_ID FROM STOREREL R WHERE R.STATE = 1 AND R.STRELTYP_ID = -4 AND R.STORE_ID = ${param.storeId})
	            AND S.STATUS = 1) F,
	​        (SELECT S.DIRECTORY 
	           FROM STORE S, STOREREL R
	          WHERE S.STORE_ID = R.RELATEDSTORE_ID AND R.STATE = 1 AND R.STRELTYP_ID = -4 AND R.RELATEDSTORE_ID <> R.STORE_ID
	            AND R.STORE_ID = ${param.storeId}) G
	  WHERE F.STORE_ID = E.STOREENT_ID AND E.MARKFORDELETE = 0 AND E.TYPE = 'S' AND N.STOREENT_ID = E.STOREENT_ID
		AND D.STOREENT_ID = E.STOREENT_ID AND D.LANGUAGE_ID = F.LANGUAGE_ID AND N.LANGUAGE_ID = L.LANGUAGE_ID
	  ORDER BY N.LANGUAGE_ID
Ensuite, le jeu de résultats est transmis au processeur CreateStoreDocumentFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :
Nom de zone d'index ​Type de zone d'index​​​​ ​​Description
Identificateur du document.
​id/store id_​string ID interne du magasin propriétaire (ouvert et opérationnel) ; mappé à STORE.STORE_ID
​id/member id_string​ Le numéro de référence interne qui identifie le propriétaire du magasin ; mappé à STOREENT.MEMBER_ID
​id/language id_string​ Le numéro de référence interne de la langue actuelle de ce document ; mappé à STORELANG.LANGUAGE_ID
​id/contract id_​string Le numéro de référence interne du contrat d'hébergement entre le prestataire de services d'hébergement et l'exploitant du magasin ; mappé à STORE.CRTDBYCNTR_ID
​id/​default/language id_​string La langue par défaut des informations affichées à destination des clients qui font leurs achats dans le magasin ; mappé à STORE.LANGUAGE_ID
id/​default/fulfillment id_​string Le centre de distribution par défaut du magasin en cours ; mappé à STORE.FFMCENTER_ID
id/​default/contract id_​string Le contrat par défaut du magasin actuel ; mappé à STOREDEF.CONTRACT_ID
​​​id/​supported/language id_​string La liste des langues prises en charge du magasin actuel ; mappé à STORE​ENTDSC.LANGUAGE_ID
​identifier/language id_string​ La langue actuelle de ce document
​identifier/specification id_​string Défini sur "magasin"
identificateur/magasin id_​string Une chaîne qui identifie de façon unique le magasin propriétaire ; mappé à STOREENT.IDENTIFIER
identifier/​default/language id_​string La chaîne linguistique de cette langue prise en charge ; mappé à STOREENT​​.IDENTIFIER
​​identifier/default/currency id_​string Devise par défaut pour le magasin actuel qui sera utilisé par un client qui n'a pas spécifié de devise préférée ; mappé à STOREENT.SETCCURR
identifier/​supported/language id_​string La liste des chaînes de langue prises en charge ; mappé à ​.LANGUAGE_ID et LANGUAGE.LANGUAGE
​​Données sensibles à la langue​​​
​name/raw ​​raw Le nom dépendant de la langue de ce groupe de catalogues ; mappé à TOREENTDSC.NAME
​​name/normalized normalized Identique à ci-dessus
​​description/raw ​​raw Une courte description de ce groupe de catalogue ; mappé à STOREENTDSC.SHORTDESCRIPTION
Propriétés
type raw Le type de magasin actuel
properties/name ​​raw Le nom de la propriété du magasin prédéfinie
properties/value ​​raw La valeur de la propriété spécifique au magasin
Données de navigation
relationship/parent id_​string La référence à son magasin de ressources de catalogue s'il est utilisé ; mappé à STOREREL.RELATEDSTORE_ID
relationship/directory ​​raw Le nom de base du répertoire dans lequel se trouvent les actifs Web propres au magasin, comme les fichiers JSP et les fichiers de propriétés ; mappé à STORE.DIRECTORY

Étape 2 : Association des emplacements Magasin

Cette étape décrit comment les données liées à l'emplacement Magasin peuvent être transformées et chargées dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 2.

La transformation et le chargement des données liées à l'emplacement Magasin commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :
 SELECT D.NAME, D.DESCRIPTION, D.STLOC_ID, D.LANGUAGE_ID, S.IDENTIFIER, S.STOREENT_ID,
			  S.PHONE, S.ADDRESS1, S.ADDRESS2, S.ADDRESS3, S.ACTIVE, S.CITY, S.STATE, S.COUNTRY, S.ZIPCODE,
			  A.NAME ATTR_NAME, A.DISPLAYNAME ATTR_DISPLAYNAME, A.VALUE ATTR_VALUE, A.DISPLAYVALUE ATTR_DISPLAYVALUE,
			  B.NAME FFMC_NAME, B.FFMCENTER_ID
	   FROM STLOC S, STLOCDS D
			  LEFT OUTER JOIN (
				SELECT LISTAGG(NAME, '###') WITHIN GROUP (ORDER BY SEQUENCE) NAME,
					   LISTAGG(COALESCE(DISPLAYNAME, ' '), '###') DISPLAYNAME,
					   LISTAGG(VALUE, '###') VALUE,
					   LISTAGG(COALESCE(DISPLAYVALUE, ' '), '###') DISPLAYVALUE,
					   LANGUAGE_ID, STLOC_ID
				  FROM STLOCATTR
				 GROUP BY STLOC_ID, LANGUAGE_ID) A ON (A.LANGUAGE_ID IN (${ingest.languages}) AND A.STLOC_ID = D.STLOC_ID)
			  LEFT OUTER JOIN (
				SELECT LISTAGG(COALESCE(F.NAME, ' ')​, '###') NAME,
					   LISTAGG(R.FFMCENTER_ID, '###') FFMCENTER_ID,
					   STLOC_ID
				  FROM STLFFMREL R, FFMCENTER F
				 WHERE R.FFMCENTER_ID = F.FFMCENTER_ID
				 GROUP BY STLOC_ID) B ON (B.STLOC_ID = D.STLOC_ID)
	  WHERE S.STLOC_ID = D.STLOC_ID AND D.LANGUAGE_ID IN (${ingest.languages}) AND S.STOREENT_ID = ${param.storeId}	

Ensuite, le jeu de résultats est transmis au processeur FindStoreLocationsFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​

Emplacement physique du magasin
locations/<id>/id id_​string ID d'emplacement du magasin interne
locations/<id>/​identifier id_​string L'identificateur externe de cet emplacement de magasin
locations/<id>/name ​​raw Le nom de cet emplacement de magasin
locations/<id>/description ​​raw La description de cet emplacement de magasin
locations/<id>/phone ​​raw Le numéro de téléphone de cet emplacement de magasin
locations/<id>/address ​​raw La liste des adresses de cet emplacement de magasin
locations/<id>/attributes/name ​​raw Une liste des noms d'attributs associés à cet emplacement de magasin
locations/<id>/attributes/value ​​raw La valeur d'attribut correspondante de cet attribut de magasin
locations/<id>/​filfillment id_string Une liste d'ID du centre de distribution pour cet emplacement de magasin

Etape 3 : Association des noms Magasin

Cette étape décrit comment les données liées au nom Magasin peuvent être transformées et chargées dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 3.

La transformation et le chargement des données liées au nom Magasin commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :

SELECT SL.STOREENT_ID, SL.LANGUAGE_ID, DA.DESCRIPTION A_DESCRIPTION, DE.DESCRIPTION E_DESCRIPTION,
		       DA.DISPLAYNAME A_DISPLAYNAME, Start of deleted contentDE.DISPLAYNAME End of deleted contentStart of added contentDE.DI​SPLAYNAME End of added contentE_DISPLAYNAME
		  FROM STORELANG SL
		       LEFT JOIN 
		       (SELECT S.STORE_ID, R.RELATEDSTORE_ID, D.LANGUAGE_ID, D.DISPLAYNAME, D.DESCRIPTION
				  FROM STORE S, STOREENT E, STOREREL R, STOREENTDS D, STORELANG L
				 WHERE S.STATUS = 1 AND S.STORE_ID = E.STOREENT_ID AND E.MARKFORDELETE = 0 AND E.TYPE = 'S'
				   AND S.STORETYPE NOT IN ('BMP', 'MPS', 'HCP', 'PBS', 'SCP', 'CHS', 'RPS', 'BRP', 'DPS', 'DPX')
				   AND R.STATE = 1 AND R.STRELTYP_ID = -4 AND R.STORE_ID = S.STORE_ID AND R.RELATEDSTORE_ID = D.STOREENT_ID
				   AND L.STOREENT_ID = S.STORE_ID AND L.LANGUAGE_ID = D.LANGUAGE_ID AND R.STORE_ID <> R.RELATEDSTORE_ID) DA
				    ON DA.STORE_ID = SL.STOREENT_ID AND SL.LANGUAGE_ID = DA.LANGUAGE_ID
		       LEFT JOIN 
		       (SELECT S.STORE_ID, R.RELATEDSTORE_ID, D.LANGUAGE_ID, D.DISPLAYNAME, D.DESCRIPTION
				  FROM STORE S, STOREENT E, STOREREL R, STOREENTDS D, STORELANG L
				 WHERE S.STATUS = 1 AND S.STORE_ID = E.STOREENT_ID AND E.MARKFORDELETE = 0 AND E.TYPE = 'S'
				   AND S.STORETYPE NOT IN ('BMP', 'MPS', 'HCP', 'PBS', 'SCP', 'CHS', 'RPS', 'BRP', 'DPS', 'DPX')
				   AND R.STATE = 1 AND R.STRELTYP_ID = -4 AND R.STORE_ID = S.STORE_ID AND R.RELATEDSTORE_ID = D.STOREENT_ID
				   AND L.STOREENT_ID = S.STORE_ID AND L.LANGUAGE_ID = D.LANGUAGE_ID AND R.STORE_ID = R.RELATEDSTORE_ID) DE
				    ON DE.STORE_ID = SL.STOREENT_ID AND SL.LANGUAGE_ID = DE.LANGUAGE_ID
		 WHERE SL.STOREENT_ID = ${param.storeId} AND SL.LANGUAGE_ID IN (${ingest.languages})		

Ensuite, le jeu de résultats est transmis au processeur FindStoreNamesFromDatabase pour transformation, à l'aide de la table suivante pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​

​​Données sensibles à la langue​​​
​name/raw ​​raw Le nom dépendant de la langue de ce groupe de catalogues ; mappé à TOREENTDSC.NAME
​​name/normalized normalized Identique à ci-dessus
​name/text text Identique à ci-dessus
​​description/raw ​​raw Une courte description de ce groupe de catalogue ; mappé à STOREENTDSC.SHORTDESCRIPTION
description/normalized normalized Identique à ci-dessus
​description/text text Identique à ci-dessus

Etape 4 : Association des configurations de niveau Magasin

Cette étape décrit comment les données de configuration de niveau Magasin peuvent être transformées et chargées dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 4.

La transformation et le chargement des données de configuration commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :
SELECT LISTAGG(NAME, '@@@') NAME,
           LISTAGG(STOREENT_ID, '@@@') STOREENT_ID,
           LISTAGG(VALUE, '@@@') VALUE
      FROM (SELECT F.NAME,
	           LISTAGG(F.STOREENT_ID, ', ') WITHIN GROUP (ORDER BY F.SEQUENCE) STOREENT_ID,
		   LISTAGG(COALESCE(F.VALUE, ' '), '###') VALUE
	      FROM (SELECT C.NAME, C.STOREENT_ID , C.VALUE, R.SEQUENCE
		      FROM STORECONF C, STOREREL R
		     WHERE R.RELATEDSTORE_ID = C.STOREENT_ID
		       AND R.STATE = 1 AND R.STRELTYP_ID = -11 AND R.STORE_ID = ${param.storeId}
		       AND C.NAME NOT LIKE ('wc.externalContent.%')
		     UNION
		    SELECT C.NAME, C.STOREENT_ID , C.VALUE, 9999999
		      FROM STORECONF C
		     WHERE C.STOREENT_ID = 0
		       AND C.NAME NOT LIKE ('wc.externalContent.%')) F
	     ​GROUP BY F.NAME)     

Ensuite, le jeu de résultats est transmis au processeur FindConfigurationsFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​

Propriétés
configurations/name ​​raw Le nom de l'attribut de magasin prédéfini
configurations/value ​​raw La valeur d'attribut spécifique au magasin

Etape 5 : Association des fonctions de niveau Magasin

Cette étape décrit comment ​transformer les données de fonction de niveau Magasin et les charger dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 5.

Le processus commence par exécuter l'instruction SQL suivante pour récupérer les données relatives à l'emplacement depuis la base de données Commerce :
SELECT LISTAGG(NAME, '@@@') NAME,
             LISTAGG(STOREENT_ID, '@@@') STOREENT_ID,
	     LISTAGG(VALUE, '@@@') VALUE
	FROM (SELECT F.NAME,
	             LISTAGG(F.STOREENT_ID, ', ') WITHIN GROUP (ORDER BY F.SEQUENCE) STOREENT_ID,
	             LISTAGG(COALESCE(F.CONTENT, ' '), '###') VALUE
		FROM (SELECT E.NAME, D.CONTENT, E.STOREENT_ID , R.SEQUENCE
		        FROM EMSPOT E, DMEMSPOTDEF D, STOREREL R
		       WHERE R.RELATEDSTORE_ID = E.STOREENT_ID
			 AND R.STATE = 1 AND R.STRELTYP_ID = -11 AND R.STORE_ID = ${param.storeId}
			 AND E.USAGETYPE = 'STOREFEATURE'
			 AND E.EMSPOT_ID = D.EMSPOT_ID
			 AND D.CONTENTTYPE = 'FeatureEnabled'
		       UNION
		      SELECT E.NAME, D.CONTENT, E.STOREENT_ID , 9999999
			FROM EMSPOT E, DMEMSPOTDEF D
		       WHERE E.STOREENT_ID = 0
			 AND E.USAGETYPE = 'STOREFEATURE'
			 AND E.EMSPOT_ID = D.EMSPOT_ID
			 AND D.CONTENTTYPE = 'FeatureEnabled') F
	       GROUP BY F.NAME)​     ​
Ensuite, le jeu de résultats est transmis au processeur FindFeaturesFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​
Propriétés
features/name ​​raw Nom de la fonction spécifique au magasin
features/value ​​raw Statut activé de cette fonction spécifique au magasin

Etape 6 : Détermination des langues prises en charge

Cette étape décrit comment déterminer les langues prises en charge par Magasin et les charger dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 6.

La détermination des langues prises en charge par Magasin et leur chargement commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :
SELECT N.STOREENT_ID, LISTAGG(N.LANGUAGE_ID, ', ') WITHIN GROUP (ORDER BY N.LANGUAGE_ID) LANGUAGE_ID,
		       LISTAGG(TRIM(L.LOCALENAME), '###') LOCALENAME
		  FROM STORELANG N, LANGUAGE L
		 WHERE N.STOREENT_ID = ${param.storeId} AND N.LANGUAGE_ID = L.LANGUAGE_ID
		 GROUP BY N.STOREENT_ID​		​

Ensuite, le jeu de résultats est transmis au processeur FindSupportedLanguagesFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​

identifier/​supported/language id_​string La liste des chaînes de langues prises en charge​.
​id/​supported/language string ​La liste des ID de langues pris en charge.

Etape 7 : Détermination des catalogues pris en charge

Cette étape décrit comment déterminer les catalogues par défaut et pris en charge par Magasin et les charger dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 7.

La détermination des catalogues par défaut et pris en charge par Magasin et leur chargement commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :
 SELECT LISTAGG(S.STOREENT_ID, ', ') STOREENT_ID,
            LISTAGG(COALESCE(CHAR(D.CATALOG_ID), ' '), '###') DEFAULT_CATALOG_ID,
            LISTAGG(S.CATALOG_ID, ', ') CATALOG_ID,
            LISTAGG(S.IDENTIFIER, '###') IDENTIFIER,
            LISTAGG(S.MASTERCATALOG, '###') MASTERCATALOG
      FROM  ​(SELECT S.STOREENT_ID, C.CATALOG_ID, C.IDENTIFIER, S.MASTERCATALOG 
               FROM STORECAT S, CATALOG C
	      WHERE S.STOREENT_ID IN
	            (SELECT RELATEDSTORE_ID FROM STOREREL
	              WHERE STATE = 1 AND STRELTYP_ID = -4 AND STORE_ID = ${param.storeId})
	                AND S.CATALOG_ID = C.CATALOG_ID) S
            LEFT JOIN STOREDEFCAT D ON (D.STOREENT_ID = ${param.storeId} AND S.CATALOG_ID = D.CATALOG_ID)	 

Ensuite, le jeu de résultats est transmis au processeur FindSupportedCatalogsFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​​​​

​​identifier/supported/catalog id_​string La liste des catalogues de vente pris en charge
​​identifier/default/catalog id_​string L'identificateur externe du catalogue de vente par défaut ; mappé à CATALOG.IDENTIFIER
identifier/​master/catalog id_​string ​​Le catalogue principal​ du magasin de ressources actuel ; déterminé à partir de STORECAT.MASTERCATALOG
id/​supported/catalog id_​string ​La liste des catalogues de vente pris en charge.
​id/​default/catalog id_​string Le catalogue de vente par défaut du magasin actuel ; mappé à STOREDEFCAT.CATALOG_ID
id/​master/catalog id_​string Le catalogue principal de son magasin de ressources actuel ; déterminé à partir de STORECAT.MASTERCATALOG

Etape 8 : Détermination des devises prises en charge

Cette étape décrit comment déterminer les devises prises en charge par Magasin et les charger dans l'index Magasin. Pour un exemple de code, voir Exemples de l'étape 8.

La détermination des devises prises en charge par Magasin et leur chargement commencent par l'exécution de l'instruction SQL suivante pour récupérer les données de l'emplacement​ depuis la base de données Commerce :
		 SELECT C.STOREENT_ID, LISTAGG(C.CURRSTR, '###') CURRENCY
	       FROM CURLIST C
	 	  WHERE C.STOREENT_ID = ${param.storeId}
	 	  GROUP BY C.STOREENT_ID

Ensuite, le jeu de résultats est transmis au script FindSupportedCurrenciesFromDatabase pour transformation, à l'aide du tableau suivant pour ​mapper la zone de base de données renvoyée depuis l'instruction SQL ci-dessus vers une zone d'index dans l'index Magasin :​​​

​identifier/supported/currency id_​string La liste des devises prises en charge pour le magasin actuel

Exemples de l'étape 1

Le code suivant est un exemple des données d'entrée pour le processeur CreateStoreDocumentFromDatabase :


                    {
                    "STORE_ID": 1,
                    "STORETYPE": "MHS",
                    "DEF_LANGUAGE_ID": -1,
                    "FFMCENTER_ID": 10501,
                    "CONTRACT_ID": 10005,
                    "DIRECTORY": "ExtendedSitesCatalogAssetStore",
                    "RELATEDSTORE_ID": 10501,
                    "SETCCURR": "USD",
                    "STORE_IDENTIFIER": "AuroraESite",
                    "MEMBER_ID": -5000,
                    "LANGUAGE_ID": -1,
                    "DISPLAYNAME": "AuroraESite",
                    "DESCRIPTION": "Commerce Model Store entity",
                    "LOCALENAME": "en_US           ",
                    "INVENTORYSYSTEM": -2,
                    "CRTDBYCNTR_ID": 10004
                    }
                

Le processeur CreateStoreDocumentFromDatabase transforme les données d'entrée en données de sortie suivantes :


                    { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                    {
                    "doc": {
                    "identifier": {
                    "default": {
                    "currency": "USD"
                    },
                    "specification": "store",
                    "language": "en_US",
                    "store": "AuroraESite",
                    "supported": {
                    "language": "en_US"
                    }
                    },
                    "name": {
                    "normalized": "AuroraESite",
                    "raw": "AuroraESite"
                    },
                    "description": {
                    "raw": "Commerce Model Store entity"
                    },
                    "id": {
                    "default": {
                    "contract": "10005",
                    "language": "-1",
                    "fulfillment": "10501"
                    },
                    "contract": "10004",
                    "member": "-5000",
                    "language": "-1",
                    "store": "1",
                    "supported": {
                    "language": -1
                    }
                    },
                    "type": "MHS",
                    "relationship": {
                    "parent": "10501",
                    "directory": "ExtendedSitesCatalogAssetStore"
                    },
                    "properties": [
                    {
                    "name": "inventory",
                    "value": "-2"
                    }
                    ],
                    "__meta": {
                    "created": "2020-07-31T17:36:57.059Z",
                    "modified": "2020-07-31T17:36:57.079Z",
                    "version": {
                    "min": 0,
                    "max": 0
                    }
                    }
                    },
                    "doc_as_upsert": true
                    }

Exemples de l'étape 2

Le code suivant est un exemple des données d'entrée pour le processeur FindStoreLocationsFromDatabase :


                    {
                    "NAME": "Warden Plaza",
                    "DESCRIPTION": "Warden Plaza",
                    "STLOC_ID": 10039,
                    "LANGUAGE_ID": -1,
                    "IDENTIFIER": "Warden Plaza",
                    "STOREENT_ID": 1,
                    "PHONE": "905.326.8647                    ",
                    "ADDRESS1": "8250 Warden Ave",
                    "ADDRESS2": null,
                    "ADDRESS3": null,
                    "ACTIVE": 1,
                    "CITY": "Markham",
                    "STATE": "Ontario",
                    "COUNTRY": "Canada",
                    "ZIPCODE": "L6G 1C7                                 ",
                    "ATTR_NAME": "BeautyCenter###CappuccinoBar###SushiRestaurant###Type###StoreHours",
                    "ATTR_DISPLAYNAME": "Beauty center###Cappuccino bar###Sushi restaurant###Type###Store hours",
                    "ATTR_VALUE": "true###true###true###Regular Store###Mon-Fri: 10am - 9pm<br />Sat: 9am - 7pm<br />Sun: 11am - 6pm<br />",
                    "ATTR_DISPLAYVALUE": "true###true###true###Regular Store###Mon-Fri: 10am - 9pm<br />Sat: 9am - 7pm<br />Sun: 11am - 6pm<br />",
                    "FFMC_NAME": "Warden Plaza",
                    "FFMCENTER_ID": "11539"
                    }

Le processeur FindStoreLocationsFromDatabase transfère les données d'entrée avec le store id transmis dans la classe depuis la classe NiFi FlowFile en tant qu'attribut dans les données de sortie suivantes :


                    { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                    {
                    "doc": {
                    "locations": {
                    "10039": {
                    "identifier": "Warden Plaza",
                    "address": [
                    "8250 Warden Ave",
                    "Markham",
                    "Ontario",
                    "Canada",
                    "L6G 1C7"
                    ],
                    "phone": "905.326.8647",
                    "name": "Warden Plaza",
                    "description": "Warden Plaza",
                    "attributes": [
                    {
                    "name": "Beauty center",
                    "value": "true"
                    },
                    {
                    "name": "Cappuccino bar",
                    "value": "true"
                    },
                    {
                    "name": "Sushi restaurant",
                    "value": "true"
                    },
                    {
                    "name": "Type",
                    "value": "Regular Store"
                    },
                    {
                    "name": "Store hours",
                    "value": "Mon-Fri: 10am - 9pm<br />Sat: 9am - 7pm<br />Sun: 11am - 6pm<br />"
                    }
                    ],
                    "id": "10039",
                    "fulfillment": [
                    {
                    "name": "Warden Plaza",
                    "id": "11539"
                    }
                    ]
                    }
                    },
                    "__meta": {
                    "modified": "2020-07-31T17:55:37.124Z"
                    }
                    }
                    }

Exemples de l'étape 3

Le code suivant est un exemple des données d'entrée de l'instruction SQL pour le processeur FindStoreNamesFromDatabase :


                    {
                    "STOREENT_ID": 1,
                    "LANGUAGE_ID": -1,
                    "A_DESCRIPTION": "Extended Sites Catalog Asset Store",
                    "E_DESCRIPTION": "Commerce Model Store entity",
                    "A_DISPLAYNAME": "Extended Sites Catalog Asset Store",
                    "E_DISPLAYNAME": "AuroraESite"
                    }

Le processeur transforme les données d'entrée avec store id transmis depuis la classe NiFi FlowFile en tant qu'attribut dans les données de sortie suivantes :


                    { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                    {
                    "doc": {
                    "name": {
                    "normalized": "AuroraESite",
                    "raw": "AuroraESite",
                    "text": "AuroraESite"
                    },
                    "description": {
                    "normalized": "Commerce Model Store entity",
                    "raw": "Commerce Model Store entity",
                    "text": "Commerce Model Store entity"
                    },
                    "__meta": {
                    "modified": "2020-07-31T18:44:35.288Z"
                    }
                    }
                    }

Exemples de l'étape 4

Le code suivant est un exemple des données d'entrée pour le processeur FindConfigurationsFromDatabase :


                                {
                                "NAME": "CK_imagePath@@@is_ext_order_system@@@wc.cmc.storefunctions.hide@@@wc.price.variant@@@wc.search.entitlement@@@wc.search.priceMode@@@wc.search.priceMode.compatiblePriceIndex@@@wc.seo.defaultURLLangId",
                                "STOREENT_ID": "11001@@@0@@@11001@@@1@@@11001, 0@@@11001, 0@@@1@@@11001",
                                "VALUE": "/wcsstore/AuroraStorefrontAssetStore/@@@N@@@RequisitionList,allowOrgRegistration,accountParticipantRole,MobilePhone@@@enabled@@@0###0@@@1###1@@@1.0@@@-1"
                                }​

Le processeur FindConfigurationsFromDatabase transforme les données d'entrée en données de sortie suivantes :


                                        { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                                        {
                                        "doc": {
                                        "configurations": [
                                        {
                                        "name": "wc.search.priceMode.compatiblePriceIndex",
                                        "value": "1.0"
                                        }
                                        ],
                                        "__meta": {
                                        "modified": "2020-07-31T18:56:04.119Z"
                                        }
                                        }
                                        }

Exemples de l'étape 5

Exemple de données d'entrée pour FindFeaturesFromDatabase comme suit :
{
  "NAME": "AccountActivation@@@AdvancedSearch@@@Age@@@AgeOptions@@@AllowReOrder@@@Analytics@@@ApplePay@@@BOPIS@@@BrowsingHistory@@@CDNCaching@@@CategoryProductBlogs@@@CategorySubscriptions@@@ConsentOptions@@@CouponWallet@@@CustomLogo@@@DateOfBirth@@@EmailOption@@@EnableQuotes@@@ExpandedCategoryNavigation@@@ExpeditedOrders@@@FacebookIntegration@@@FutureOrders@@@Gender@@@InventoryAvailability@@@KeywordSuggestions@@@MarketingConsent@@@MobilePhone@@@MultipleActiveOrders@@@MultipleShipments@@@PaymentPromotion@@@Permanent@@@PhotoGallery@@@ProductRankings@@@ProductRatingsReview@@@ProductSuggestions@@@ProductionServer@@@PunchoutPayment@@@QuickOrder@@@RatingReviewIntegration@@@RecurringOrders@@@RemoteWidget@@@SOAWishlist@@@SearchBasedNavigation@@@Session@@@SharedShippingBillingPage@@@ShipAsComplete@@@ShippingChargeType@@@ShippingInstructions@@@ShowHideOrderItems@@@SideBySideIntegration@@@StoreLocator@@@Subscription@@@Tealeaf@@@TrackingStatus@@@UseCommerceComposer@@@UseSynonyms@@@WCHIntegration@@@accountParticipantRole@@@allowOrgRegistration@@@contractSelection@@@on-behalf-of@@@on-behalf-of-csr@@@preferredCurrency@@@preferredLanguage@@@promotionCode@@@quickCheckout@@@search@@@sterlingConfigurator",
  "STOREENT_ID": "11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001, 11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001@@@11001, 11001@@@11001@@@11001@@@11001@@@11001",
  "VALUE": "false@@@true@@@false@@@true@@@true@@@false@@@false@@@true@@@false@@@false@@@false@@@false@@@false@@@true@@@false@@@true@@@true@@@false@@@false@@@false@@@false@@@true@@@true@@@true@@@true@@@false@@@false###true@@@false@@@true@@@false@@@false@@@false@@@false@@@false@@@false@@@false@@@false@@@false@@@false@@@true@@@true@@@true@@@true@@@false@@@true@@@true@@@false@@@true@@@false@@@false@@@true@@@true@@@false@@@true@@@true@@@true@@@false@@@false@@@false@@@false@@@false@@@true@@@true@@@false###true@@@true@@@true@@@true@@@false"
}
​
The FindFeaturesFromDatabase processor transforms the input data into the following output data:

{ "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
{
  "doc": {
    "features": [
      {
        "name": "AccountActivation",
        "value": "false"
      },
      {
        "name": "AdvancedSearch",
        "value": "true"
      },
      {
        "name": "Age",
        "value": "false"
      },
      {
        "name": "AgeOptions",
        "value": "true"
      },
      {
        "name": "AllowReOrder",
        "value": "true"
      },
      {
        "name": "Analytics",
        "value": "false"
      },
      {
        "name": "ApplePay",
        "value": "false"
      },
      {
        "name": "BOPIS",
        "value": "true"
      },
      {
        "name": "BrowsingHistory",
        "value": "false"
      },
      {
        "name": "CDNCaching",
        "value": "false"
      },
      {
        "name": "CategoryProductBlogs",
        "value": "false"
      },
      {
        "name": "CategorySubscriptions",
        "value": "false"
      },
      {
        "name": "ConsentOptions",
        "value": "false"
      },
      {
        "name": "CouponWallet",
        "value": "true"
      },
      {
        "name": "CustomLogo",
        "value": "false"
      },
      {
        "name": "DateOfBirth",
        "value": "true"
      },
      {
        "name": "EmailOption",
        "value": "true"
      },
      {
        "name": "EnableQuotes",
        "value": "false"
      },
      {
        "name": "ExpandedCategoryNavigation",
        "value": "false"
      },
      {
        "name": "ExpeditedOrders",
        "value": "false"
      },
      {
        "name": "FacebookIntegration",
        "value": "false"
      },
      {
        "name": "FutureOrders",
        "value": "true"
      },
      {
        "name": "Gender",
        "value": "true"
      },
      {
        "name": "InventoryAvailability",
        "value": "true"
      },
      {
        "name": "KeywordSuggestions",
        "value": "true"
      },
      {
        "name": "MarketingConsent",
        "value": "false"
      },
      {
        "name": "MobilePhone",
        "value": "false"
      },
      {
        "name": "MultipleActiveOrders",
        "value": "false"
      },
      {
        "name": "MultipleShipments",
        "value": "true"
      },
      {
        "name": "PaymentPromotion",
        "value": "false"
      },
      {
        "name": "Permanent",
        "value": "false"
      },
      {
        "name": "PhotoGallery",
        "value": "false"
      },
      {
        "name": "ProductRankings",
        "value": "false"
      },
      {
        "name": "ProductRatingsReview",
        "value": "false"
      },
      {
        "name": "ProductSuggestions",
        "value": "false"
      },
      {
        "name": "ProductionServer",
        "value": "false"
      },
      {
        "name": "PunchoutPayment",
        "value": "false"
      },
      {
        "name": "QuickOrder",
        "value": "false"
      },
      {
        "name": "RatingReviewIntegration",
        "value": "false"
      },
      {
        "name": "RecurringOrders",
        "value": "true"
      },
      {
        "name": "RemoteWidget",
        "value": "true"
      },
      {
        "name": "SOAWishlist",
        "value": "true"
      },
      {
        "name": "SearchBasedNavigation",
        "value": "true"
      },
      {
        "name": "Session",
        "value": "false"
      },
      {
        "name": "SharedShippingBillingPage",
        "value": "true"
      },
      {
        "name": "ShipAsComplete",
        "value": "true"
      },
      {
        "name": "ShippingChargeType",
        "value": "false"
      },
      {
        "name": "ShippingInstructions",
        "value": "true"
      },
      {
        "name": "ShowHideOrderItems",
        "value": "false"
      },
      {
        "name": "SideBySideIntegration",
        "value": "false"
      },
      {
        "name": "StoreLocator",
        "value": "true"
      },
      {
        "name": "Subscription",
        "value": "true"
      },
      {
        "name": "Tealeaf",
        "value": "false"
      },
      {
        "name": "TrackingStatus",
        "value": "true"
      },
      {
        "name": "UseCommerceComposer",
        "value": "true"
      },
      {
        "name": "UseSynonyms",
        "value": "true"
      },
      {
        "name": "WCHIntegration",
        "value": "false"
      },
      {
        "name": "accountParticipantRole",
        "value": "false"
      },
      {
        "name": "allowOrgRegistration",
        "value": "false"
      },
      {
        "name": "contractSelection",
        "value": "false"
      },
      {
        "name": "on-behalf-of",
        "value": "false"
      },
      {
        "name": "on-behalf-of-csr",
        "value": "true"
      },
      {
        "name": "preferredCurrency",
        "value": "true"
      },
      {
        "name": "preferredLanguage",
        "value": "false"
      },
      {
        "name": "promotionCode",
        "value": "true"
      },
      {
        "name": "quickCheckout",
        "value": "true"
      },
      {
        "name": "search",
        "value": "true"
      },
      {
        "name": "sterlingConfigurator",
        "value": "false"
      }
    ],
    "__meta": {
      "modified": "2020-09-11T06:13:00.050Z"
    }
  }
}​​

Exemples de l'étape 6

Le code suivant est un exemple des données d'entrée pour le processeur FindSupportedLanguagesFromDatabase.


                                {
                                "STOREENT_ID": 1,
                                "LANGUAGE_ID": "-1",
                                "LOCALENAME": "en_US"
                                }

Le processeur FindSupportedLanguagesFromDatabase transforme les données d'entrée en données de sortie suivantes :


                                        { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                                        {
                                        "doc": {
                                        "identifier": {
                                        "supported": {
                                        "language": [
                                        "en_US"
                                        ]
                                        }
                                        },
                                        "id": {
                                        "supported": {
                                        "language": [
                                        "-1"
                                        ]
                                        }
                                        },
                                        "__meta": {
                                        "modified": "2020-08-03T13:19:38.979Z"
                                        }
                                        }
                                        }

Exemples de l'étape 7

Le code suivant est un exemple des données d'entrée pour le processeur FindSupportedCatalogsFromDatabase.


            {
            "STOREENT_ID" : "10501, 10501, 10501",
            "DEFAULT_CATALOG_ID" : "######10502               ",
            "CATALOG_ID" : "10001, 10501, 10502",
            "IDENTIFIER" : "Extended Sites Catalog Asset Store###Extended Sites Catalog Asset Store B2B Direct###Extended Sites Catalog Asset Store Consumer Direct",
            "MASTERCATALOG" : "1###0###0"
            }

Le processeur FindSupportedCatalogsFromDatabase transforme les données d'entrée avec store id et language id transmis depuis la classe NiFi FlowFile en tant qu'attributs dans les données de sortie suivantes :


                { "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
                {
                "doc": {
                "identifier": {
                "default": {
                "catalog": "Extended Sites Catalog Asset Store Consumer Direct"
                },
                "master": {
                "catalog": "Extended Sites Catalog Asset Store"
                },
                "supported": {
                "catalog": [
                "Extended Sites Catalog Asset Store",
                "Extended Sites Catalog Asset Store Consumer Direct"
                ]
                }
                },
                "id": {
                "default": {
                "catalog": "10502"
                },
                "master": {
                "catalog": "10001"
                },
                "supported": {
                "catalog": [
                "10001",
                "10502"
                ]
                }
                },
                "__meta": {
                "modified": "2020-08-08T03:37:21.743Z"
                }
                }
                }​

Exemples de l'étape 8

Le code suivant est un exemple des données d'entrée pour le processeur FindSupportedCurrenciesFromDatabase :


{
  "STOREENT_ID": 1,
  "CURRENCY": "USD###EUR"
}

Le processeur FindSupportedCurrenciesFromDatabase transforme les données d'entrée avec store id et languages id transmis depuis la classe NiFi FlowFile en tant qu'attributs dans les données de sortie suivantes :


{ "update": { "_id": "1--1", "_index": "auth.store", "retry_on_conflict": 5, "_source": false } }
{
  "doc": {
    "identifier": {
      "supported": {
        "currency": [
          "USD",
          "EUR"
        ]
      }
    },
    "__meta": {
      "modified": "2020-08-03T16:05:32.234Z"
    }
  }
}