---
title: "Product sync pipelines"
slug: "product-sync-pipelines"
abstract: ""
---
# Product sync pipelines

<details>
<summary><h2>SynchronizeProducts pipeline</h2></summary>

SynchronizeProducts is used to synchronize products between the external commerce system and Sitecore.

| **Name:** | SynchronizeProducts |
| --- | --- |
| **Description:** | This pipeline is responsible for obtaining the lists of product Ids to be synchronized and iterate over them |
| **Usage:** | Called from Sitecore or the external commerce system |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization, which would be the Ids of the products that failed during synchronization Is read after the pipeline is called. |
| **Processors:** |  |
|  | **RunSynchronizeArtifacts –**Calls individual pipeline to synchronize all the related repositories: Manufacturers, Types, Classifications, Divisions, Resources, Specifications |
|  | **RunGetSCProductList –**Obtain the list of product ids to synchronize from Sitecore. This processor can be left out if product data is only pushed from the external system |
|  | **RunGetECSProductList -**Obtain the list of product ids to synchronize from ECS |
|  | **EvaluateProductListUnionToSynchronize –**Creates the union of product Ids to be synchronized based on the two lists obtained from ECS and SC |
|  | **RunSynchronizeProductList –**Calls individual pipeline with the evaluated list of product IDs to synchronize |

</details>

<details>
<summary><h2>SynchronizeProductList pipeline</h2></summary>

SynchronizeProductlist is used to synchronize a given list of products between the external commerce system and Sitecore.

| **Name:** | SynchronizeProductList |
| --- | --- |
| **Description:** | This pipeline is responsible for iterating over the given list of product IDs and synchronize. |
| **Usage:** | Called from Sitecore or the external commerce system. |
| **Args:** |  |
|  | **Request –**List of product Ids to synchronize. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization, which are the IDs of the products that failed during synchronization Is read after the pipeline is called. |
| **Processors:** |  |
|  | **SynchronizeProductList** - Iterates over the given list of product IDs and runs the `SynchronizeProduct` pipeline for each product. |

</details>

<details>
<summary><h2>GetExternalCommerceSystemProductList pipeline</h2></summary>

| **Name:** | GetExternalCommerceSystemProductList |
| --- | --- |
| **Description:** | This pipeline is responsible for obtaining the list of product IDs to be synchronized from the external commerce system (ECS) |
| **Usage:** | Called internally from SynchronizeProducts but can also be called explicitly from both the ECS or Sitecore |
| **Args:** |  |
|  | **Request –**No default data. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of product IDs to be synchronized and SystemMessages. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **GetExternalCommerceSystemProductList** – Get list of IDs from the ECS |

</details>

<details>
<summary><h2>GetSitecoreProductList pipeline</h2></summary>

| **Name:** | GetSitecoreProductList |
| --- | --- |
| **Description:** | This pipeline is responsible for obtaining the list of product IDs to be synchronized from Sitecore |
| **Usage:** | Called internally from SynchronizeProducts but can also be called explicitly from both the ECS or Sitecore |
| **Args:** |  |
|  | **Request –**No default data. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of product Ids to be synchronized and SystemMessages. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **GetSitecoreProductList** – Get list of IDs from Sitecore |

</details>

<details>
<summary><h2>SynchronizeArtifacts pipeline</h2></summary>

| **Name:** | SynchronizeArtifacts |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all the related repositories: Manufacturers, Types, Classifications, Divisions, Resources, and Specifications |
| **Usage:** | Called from Sitecore or the external commerce system |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **RunSynchronizeManufacturers –**Calls individual pipeline to synchronize manufacturers repository |
|  | **RunSynchronizeTypes -**Calls individual pipeline to synchronize types repository |
|  | **RunSynchronizeClassifications -**Calls individual pipeline to synchronize classifications repository |
|  | **RunSynchronizeDivisions -**Calls individual pipeline to synchronize divisions repository |
|  | **RunSynchronizeTypes -**Calls individual pipeline to synchronize type repository |
|  | **RunSynchronizeResources -**Calls individual pipeline to synchronize resources repository |
|  | **RunSynchronizeSpecifications -**Calls individual pipeline to synchronize global, category, and type specifications |

</details>

<details>
<summary><h2>SynchronizeManufacturers pipeline</h2></summary>

| **Name:** | SynchronizeManufacturers |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all manufacturers in the separate Manufacturers repository |
| **Usage:** | Called from the `SynchronizeArtifacts` pipeline as initialization of separate repositories before synchronizing products and their references to these repositories. |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **ReadManufacturersFromSC – Optional**<br><br>Reads the manufacturers to synchronize from SC. This processor can be skipped if changes only are pushed from the ECS to Sitecore. |
|  | **ReadManufacturersFromECS – Mandatory**<br><br>Reads the manufacturers to synchronize from the ECS |
|  | **ResolveManufacturersChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes only are pushed from the ECS to Sitecore. |
|  | **SaveManufacturersToECS – Optional**<br><br>Saves synchronized manufacturers to the ECS. This processor can be skipped if changes only are pushed from the ECS to Sitecore. |
|  | **SaveManufacturersToSC – Mandatory**<br><br>Saves synchronized manufacturers to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeClassifications pipeline</h2></summary>

| **Name:** | SynchronizeClassifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all classifications in the separate Classifications repository<br><br>Since multiple different classification schemes are supported, this pipeline is responsible for synchronizing all schemes |
| **Usage:** | Called from pipeline SynchronizeArtifacts as initialization of separate repositories before synchronizing products and their references to these repositories. |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **ReadClassificationsFromSC – Optional**<br><br>Reads the classifications to synchronize from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadClassificationsFromECS – Mandatory**<br><br>Reads the classifications to synchronize from the ECS. |
|  | **ResolveClassificationsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveClassificationsToECS – Optional**<br><br>Saves synchronized classifications to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveClassificationsToSC – Mandatory**<br><br>Saves synchronized classifications to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeTypes pipeline</h2></summary>

| **Name:** | SynchronizeTypes |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all Types in the separate Product Types repository |
| **Usage:** | Called from the `SynchronizeArtifacts` pipeline as initialization of separate repositories before synchronizing products and their references to these repositories. |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **ReadTypesFromSC – Optional**<br><br>Reads the types to synchronize from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadTypesFromECS – Mandatory**<br><br>Reads the types to synchronize from the ECS |
|  | **ResolveTypesChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveTypesToECS – Optional**<br><br>Saves synchronized types to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveTypesToSC – Mandatory**<br><br>Saves synchronized types to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeDivisions pipeline</h2></summary>

| **Name:** | SynchronizeDivisions |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all divisions in the separate Divisions repository |
| **Usage:** | Called from the `SynchronizeArtifacts` pipeline as initialization of separate repositories before synchronizing products and their references to these repositories. |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **ReadDivisionsFromSC – Optional**<br><br>Reads the divisions to synchronize from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadDivisionsFromECS – Mandatory**<br><br>Reads the divisions to synchronize from the ECS |
|  | **ResolveDivisionsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveDivisionsToECS – Optional**<br><br>Saves synchronized divisions to  the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveDivisionsToSC – Mandatory**<br><br>Saves synchronized divisions to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProducts pipeline</h2></summary>

| **Name:** | SynchronizeResources |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing all resources in Sitecore Media Library |
| **Usage:** | Called from the `SynchronizeArtifacts` pipeline as initialization of separate repositories before synchronizing products and their references to these repositories.<br><br>> [!note]<br>> If resources are only kept only in the ECS, then this pipeline can be skipped or configured empty. |
| **Args:** |  |
|  | **Request –**Is empty by default. Is set prior to calling the pipeline. |
|  | **Response -**Contains the list of messages generated during synchronization |
| **Processors:** |  |
|  | **ReadResourcesFromSC – Optional**<br><br>Reads the resources to synchronize from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadResourcesFromECS – Mandatory**<br><br>Reads the resources to synchronize from the ECS |
|  | **ResolveResourcesChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveResourcesToECS – Optional**<br><br>Saves synchronized resources to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveResourcesToSC – Mandatory**<br><br>Saves synchronized resources to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeSpecifications pipeline</h2></summary>

| **Name:** | SynchronizeSpecifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing specifications on type, category, and globally by running separate pipelines for each |
| **Usage:** | Called from the `SynchronizeArtifacts` pipeline as initialization of separate repositories before synchronizing products and their references to these repositories |
| **Args:** |  |
|  | **Request -** Is set prior to calling the pipeline. |
|  | **Response -** Is read after the pipeline is called. |
| **Processors:** |  |
|  | **RunSynchronizeGlobalSpecifications –**Runs a separate pipeline to synchronize global specifications |
|  | **RunSynchronizeTypeSpecifications -**Runs a separate pipeline to synchronize type specifications |
|  | **RunSynchronizeClassificationSpecifications -**Runs a separate pipeline to synchronize category specifications |

</details>

<details>
<summary><h2>SynchronizeGlobalSpecifications pipeline</h2></summary>

| **Name:** | SynchronizeGlobalSpecifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing global specifications<br><br>The specifications and the tables for fixed key-value pairs are stored under `/sitecore/content/Product Artifacts/Lookups/Global Product Specification Lookups` |
| **Usage:** | Called internally from the `SynchronizeSpecifications` pipeline |
| **Args:** |  |
|  | **Request -**Is set prior to calling the pipeline. |
|  | **Response -**Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadGlobalSpecificationsFromSC – Optional**<br><br>Reads the product specifications data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadGlobalSpecificationsFromECS – Mandatory**<br><br>Reads the product specifications data from the ECS |
|  | **ResolveGlobalSpecificationsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveGlobalSpecificationsToECS – Optional**<br><br>Saves synchronized product specifications data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveGlobalSpecificationsToSC – Mandatory**<br><br>Saves synchronized product specifications data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeTypeSpecifications pipeline</h2></summary>

| **Name:** | SynchronizeTypeSpecifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing type specifications.<br><br>The specifications and the tables for fixed key-value pairs are stored under `/sitecore/content/Product Artifacts/Product Types`.<br><br>> [!note]<br>> For types, specification options and default values are also synchronized as part of this pipeline. |
| **Usage:** | Called internally from the `SynchronizeSpecifications` pipeline. |
| **Args:** |  |
|  | **Request -**Is set prior to calling the pipeline. |
|  | **Response -**Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadTypeSpecificationsFromSC – Optional**<br><br>Reads the product specifications data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadTypeSpecificationsFromECS – Mandatory**<br><br>Reads the product specifications data from the ECS. |
|  | **ResolveTypeSpecificationsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes  are only pushed from the ECS to Sitecore. |
|  | **SaveTypeSpecificationsToECS – Optional**<br><br>Saves synchronized product specifications data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveTypeSpecificationsToSC – Mandatory**<br><br>Saves synchronized product specifications data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeClassificationSpecifications pipeline</h2></summary>

| **Name:** | SynchronizeClassificationSpecifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing Category specifications.<br><br>The specifications and the tables for fixed key-value pairs are stored under `/sitecore/content/Product Artifacts/Classifications`.<br><br>> [!note]<br>> Because multiple different classification schemes are supported, this pipeline is responsible for synchronizing specifications for all schemes. |
| **Usage:** | Called internally from the `SynchronizeSpecifications` pipeline. |
| **Args:** |  |
|  | **Request -**Is set prior to calling the pipeline. |
|  | **Response -**Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadClassificationSpecificationsFromSC – Optional**<br><br>Reads the classifications specifications data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadClassificationSpecificationsFromECS – Mandatory**<br><br>Reads the classifications specifications data from the ECS. |
|  | **ResolveClassificationSpecificationsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveClassificationSpecificationsToECS – Optional**<br><br>Saves synchronized classifications specifications data to the ECS. This processor can be skipped if changes are only pushed from  the ECS to Sitecore. |
|  | **SaveClassificationSpecificationsToSC – Mandatory**<br><br>Saves synchronized classifications specifications data to Sitecore. |

After the pipeline runs, the categories have a folder called *Specifications* containing all the specifications for the category, including tables with fixed set key-value pairs for reference from products.

</details>

<details>
<summary><h2>SynchronizeProductClassifications pipeline</h2></summary>

| **Name:** | SynchronizeProductClassifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the references between a given product and associated classifications and categories within.<br><br>It is assumed that classifications are already synchronized and present in the CMS.<br><br>The references to categories are stored directly on the main product item. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductClassificationsFromSC – Optional**<br><br>Reads the product classification reference data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductClassificationsFromECS – Mandatory**<br><br>Reads the product classification reference data from the ECS. |
|  | **ResolveProductClassificationsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductClassificationsToECS – Optional**<br><br>Saves synchronized product classification reference data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductClassificationsToSC – Mandatory**<br><br>Saves synchronized product classification reference data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProduct pipeline</h2></summary>

The `SynchronizeProduct` pipeline is used to synchronize a single product between the external commerce system and Sitecore. The product to synchronize is given by ID.

| **Name:** | SynchronizeProduct |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing a single product by calling a number of individual pipelines. Each pipeline updates the references between the product and the related separate repositories except for the `SynchronizeProductItem` pipeline, which operates on the main product data on the product item itself. |
| **Usage:** | Called directly from the `SynchronizeProduct`  service method and indirectly from the `SynchronizeProductList` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the SystemMessages. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **RunSynchronizeProductManufacturers** – Synchronizes relations to manufacturers |
|  | **RunSynchronizeProductType** – Synchronizes relation to product type |
|  | **RunSynchronizeProductClassifications** – Synchronizes relations to classifications |
|  | **RunSynchronizeProductResources** – Synchronizes resources and relations to resources |
|  | **RunSynchronizeProductRelations** – Synchronizes relations to other products through cross-sell, variants, and so on |
|  | **RunSynchronizeProductDivisions**– Synchronizes relations to divisions |
|  | **RunSynchronizeProductItem** – Synchronizes main product data on the product item itself |
|  | **RunSynchronizeProductSpecifications –**Calls individual pipeline to synchronize product specifications |

</details>

<details>
<summary><h2>SynchronizeProductManufacturers pipeline</h2></summary>

The `SynchronizeProductManufacturers` pipeline is used to synchronize references between a single product and a separate Manufacturers repository between the external commerce system (ECS) and Sitecore. The product to synchronize is given by external product ID.

| **Name:** | SynchronizeProductManufacturers |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the relationship between a given product and a manufacturer.<br><br>It is assumed that manufacturers are already synchronized and present in the CMS.<br><br>The references to manufacturers are stored directly on the main product item. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductManafacturersFromSC – Optional**<br><br>Reads the product manufacturers' reference data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductManafacturersFromECS – Mandatory**<br><br>Reads the product manufacturers' reference data from the ECS. |
|  | **ResolveProductManafacturersChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductManafacturersToECS – Optional**<br><br>Saves synchronized product manufacturers' reference data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductManafacturersToSC – Mandatory**<br><br>Saves synchronized product manufacturers reference data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductType pipeline</h2></summary>

| **Name:** | SynchronizeProductType |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the references between a given product and its product type.<br><br>It is assumed that types are already synchronized and present in the CMS.<br><br>The references to product type are stored directly on the main product item. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductTypeFromSC – Optional**<br><br>Reads the product type reference data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductTypeFromECS – Mandatory**<br><br>Reads the product type reference data from the ECS |
|  | **ResolveProductTypeChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductTypeToECS – Optional**<br><br>Saves synchronized product type reference data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductTypeToSC – Mandatory**<br><br>Saves synchronized product type reference data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductEntity pipeline</h2></summary>

| **Name:** | SynchronizeProductEntity |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the main product entity data (for the product with the given external product ID). |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductFromSC – Optional**<br><br>Reads the product data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductFromECS – Mandatory**<br><br>Reads the product data from the ECS. |
|  | **ResolveProductChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductToECS – Optional**<br><br>Saves synchronized product data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductToSC – Mandatory**<br><br>Saves synchronized product data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductDivisions pipeline</h2></summary>

| **Name:** | SynchronizeProductDivisions |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the references between a given product and associated divisions.<br><br>It’ is assumed that divisions are already synchronized and present in the CMS.<br><br>The references to divisions are stored directly on the main product item. |
| **Usage:** | Called internally from `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductDivisionsFromSC – Optional**<br><br>Reads the product divisions reference data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductDivisionsFromECS – Mandatory**<br><br>Reads the product divisions reference data from the ECS. |
|  | **ResolveProductDivisionsChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductDivisionsToECS – Optional**<br><br>Saves synchronized product divisions reference data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductDivisionsToSC – Mandatory**<br><br>Saves synchronized product divisions reference data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductResources pipeline</h2></summary>

| **Name:** | SynchronizeProductDivisions |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing and updating the references between a given product and associated resources.<br><br>It is assumed that resources are already synchronized and present in the CMS or that the references are external using an URI to point to the location.<br><br>The references to resources are stored under the main product item on the path `[Product Item]/Resources/[Resource]`. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Manufacturer. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductResourcesFromSC – Optional**<br><br>Reads the product resources reference data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductResourcesFromECS – Mandatory**<br><br>Reads the product resources reference data from the ECS. |
|  | **ResolveProductResourcesChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductResourcesToECS – Optional**<br><br>Saves synchronized product resources reference data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductResourcesToSC – Mandatory**<br><br>Saves synchronized product resources reference data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductRelations pipeline</h2></summary>

| **Name:** | SynchronizeProductRelations |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing product relations for a single product. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Product relations. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductRelationsFromSC -**Reads the product relations data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductRelationsFromECS –**Reads the product relations data from the ECS. |
|  | **ResolveProductRelationsChanges –**Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductRelationsToECS –**Saves synchronized product relations data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductRelationsToSC -**Saves synchronized product relations data to Sitecore. |

</details>

<details>
<summary><h2>SynchronizeProductSpecifications pipeline</h2></summary>

| **Name:** | SynchronizeProductSpecifications |
| --- | --- |
| **Description:** | This pipeline is responsible for synchronizing product specifications for a single product.<br><br>It is assumed that specification tables of fixed key-value pairs (lookups) are already synchronized and present in the CMS when this pipeline is run.<br><br>The references to specifications are stored under the main product item on the path `[Product Item]/Specifications/[Specification]`.<br><br>Specifications that reference lookup tables can point to specification tables located under global, classification, or type. |
| **Usage:** | Called internally from the `SynchronizeProduct` pipeline. |
| **Args:** |  |
|  | **Request -**Contains the external product ID. Is set prior to calling the pipeline. |
|  | **Response -**Contains the Product relations. Is read after the pipeline is called. |
| **Processors:** |  |
|  | **ReadProductSpecificationsFromSC - Optional**<br><br>Reads the product specification data from Sitecore. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **ReadProductSpecificationsFromECS – Mandatory**<br><br>Reads the product specification data from the ECS. |
|  | **ResolveProductSpecificationChanges – Optional**<br><br>Resolves differences between the ECS and Sitecore. This processor can be skipped if changes are only pushed from the ECS to the Sitecore. |
|  | **SaveProductSpecificationsToECS – Optional**<br><br>Saves synchronized product specification data to the ECS. This processor can be skipped if changes are only pushed from the ECS to Sitecore. |
|  | **SaveProductSpecificationsToSC – Mandatory**<br><br>Saves synchronized product specification data to Sitecore. |

</details>