Skip to main content

OroCommerce Add/Update Simple Product FROM iPaaS

Map a product from iPaaS.com to the OroCommerce Simple Product

Updated yesterday

Overview

When a product is created or updated in iPaaS.com with TrackingMethod = Product and there areno associated kit or kit components, the corresponding product record is created or updated in OroCommerce as a Simple product. This mapping ensures accurate and consistent synchronization of product data between iPaaS.com and OroCommerce.

Before You Begin

Ensure the following prerequisites are in place before configuring this integration.

iPaaS.com Requirements

  • Product records must have valid SKU, Name, Default Price, and Status.

  • TrackingMethod must be set to "Product".

  • Product must not be a kit or have kit components.

  • Type field must be populated.

OroCommerce Requirements

  • The following entities must exist before product creation if referenced:

    • Organization

    • Business Unit (Owner)

    • Attribute Family

    • Inventory Status

    • Tax Code

    • Brand

    • Category

    • Price List (for default pricing)

    • Product Units

  • API credentials must have permission to create/update products.

  • Custom fields must be created in OroCommerce before mapping (schema update may be required).

Custom Fields Support

This flow supports the use of custom fields. To map and add data from iPaaS.com into a custom field in OroCommerce, follow the steps outlined below.

Steps in OroCommerce

  1. Log in to OroCommerce and click System > Entities > Entity Management.

  2. Locate and select the module (entity) where you want to add the custom field (e.g., Product).

  3. Click Create Field and configure all of the following required fields:

    • Field Name Provide a unique name. This value should start with a letter and contain only alphabetic symbols, underscores, and numbers.

    • Storage Type Select "Serialized field" or "Table Column".

      • For Table Column fields, a schema update is required before the custom field becomes available.

      • Serialized Field custom fields are added automatically and do not require a manual schema update.

    • Type Set field type as "string", "datetime", "integer", "float", "decimal", "boolean", or "enum" as they are all supported when using compatible mappings.

  4. After creating the field with the Table Column storage type, a red Update Schema button will appear on the page. Click Update Schema to apply the changes.
    NOTE: Contact your OroCommerce administrator before updating an entity schema to prevent unexpected service downtime.

  5. Once the schema update is completed (if required), the custom field will be available in OroCommerce and can be populated with data coming from iPaaS.com through the mapping as follows:

  6. Log in to the iPaaS.com portal and go to your OroCommerce subscription.

  7. Click the Custom Fields icon.

  8. On the Custom Fields page, click +Add Custom Field.

  9. Create the custom field with the exact Field Name and Type used in OroCommerce for the Name and Data Type of the iPaaS.com subscription custom field.

  10. Under Module, select Product and then click Save.

To send data from iPaaS.com to OroCommerce in custom fields:

  • In iPaaS.com, open the relevant mapping collection and add a new mapping by selecting the desired destination custom field. The source can be configured based on the custom field requirements or specifications.

Default Pricing Handling

This mapping collection also supports automatic creation and update of Default Product Pricing in OroCommerceas part of the product Add and Update flows.

When a product is successfully created or updated, the system conditionally processes its default pricing only if default pricing mappings are provided. To support this, a dedicated boolean custom (entity) field on the OroCommerce Product Price entity must be configured in the subscription preset called Default Pricing Custom Field Name. This field is required to identify which Product Price record represents the active default price for a product.

Processing Validation

During processing, the system:

  1. Validates that the configured default pricing custom field exists on the OroCommerce Product Price entity and that it is of type boolean.

  2. Verifies that all mandatory pricing attributes (price value, quantity, currency) and required relationships (price list and unit) are present before proceeding.

If any of these validations fail, the integration raises a descriptive expected exception that clearly identifies the missing or invalid configuration. Since default pricing is handled after the product is successfully created or updated, the product's external ID is still persisted in iPaaS.com. This ensures product creation/update remains intact while surfacing precise feedback for correcting default pricing mappings.

Update Behavior

During updates, the same validations apply. After that:

  1. The system first attempts to locate an existing Product Price record matching the same Product+ Price List + Unit combination.

  2. If a match is found, that record is updated.

  3. If no exact match exists, the system retrieves all Product Price records associated with the product across all available price lists and removes any entries previously marked as default pricing.

  4. A new default pricing record is then created.

This process ensures that only one default price exists per product at any given time.

ID Format

When manually transferring a Product from iPaaS.com, you need to enter the valid iPaaS.com Product (internal ID) into the input field on the iPaaS.com manual sync page.

  • Example: 197689

External ID Format

The OroCommerce Product ID will be saved as the external ID.

  • Example: 288

Mapping Collection Status

  • Status: Enabled

  • Trigger Events: Create, Update

Duplicate or Conflicting Mappings

This mapping applies only to add or update Simple Products in OroCommerce. The following mapping collections are available to add/update Configurable and Kit Products:

  1. OroCommerce Add Kit Product From iPaaS.com

  2. OroCommerce Update Kit Product From iPaaS.com

  3. OroCommerce Add Configurable Product From iPaaS.com

  4. OroCommerce Update Configurable Product From iPaaS.com

Supported Child Collections

This integration does not support child collections. Product-related entities (Names, Descriptions, Shipping Options, Unit Precisions, etc.) are created dynamically through the OroCommerce Product API using the included object.

Data Requirements

The following fields are required to be mapped in this flow for successful product creation:

Mandatory Fields

Type

  • Type

Attributes

  • Attributes_Sku

  • Attributes_Status

  • Attributes_ProductType

Relationships

  • Relationships_AttributeFamily_Id

  • Relationships_AttributeFamily_Type

  • Relationships_InventoryStatus_Id

  • Relationships_InventoryStatus_Type

  • Relationships_Names_Ids

  • Relationships_Names_Type

  • Relationships_PrimaryUnitPrecision_Id

  • Relationships_PrimaryUnitPrecision_Type

  • Relationships_PrimaryUnitPrecision_Precision

Custom Fields Support

This flow supports the use of custom fields. To map and add data from iPaaS.com into a custom field in OroCommerce, follow the steps outlined below.

  1. Navigate to Entity Management: Go to System > Entities > Entity Management.

  2. Select the Target Module: Locate and select the module (entity) where you want to add the custom field (e.g., Product).

  3. Create a Custom Field: Click Create Field and configure the following required fields:

    • Field Name: Provide a unique name. This value should start with a letter and contain only alphabetic symbols, underscores, and numbers.

    • Storage Type: Select Serialized field or Table Column. For Table Column fields, a schema update is required before the custom field becomes available. Serialized Field custom fields are added automatically.

    • Type: Set field type as "string", "datetime", "integer", "float", "decimal", "boolean", or "enum".

  4. Update the Schema: After creating the field with Table Column storage type, click Update Schema to apply the changes.

    Note: Contact your OroCommerce administrator before updating an entity schema to prevent unexpected service downtime.

  5. iPaaS.com Subscription Custom Fields Configuration: Once the schema update is completed (if required), configure the custom field in iPaaS.com:

    • Go to the OroCommerce subscription > Custom Fields.

    • Create the custom field with the exact Field Name and Type from OroCommerce.

    • Select the "Product" Module and click Save.

    • Open the relevant mapping collection and add a new mapping by selecting the desired destination custom field.

Default Pricing Handling

This mapping collection also supports automatic creation and update of Default Product Pricing in OroCommerce as part of the product Create and Update flows.

When a product is successfully created or updated, the system conditionally processes its default pricing only if default pricing mappings are provided. To support this, a dedicated boolean custom (entity) field on the OroCommerce Product Price entity must be configured in the subscription preset called Default Pricing Custom Field Name. This field is required to identify which Product Price record represents the active default price for a product.

During processing, the system:

  1. Validates that the configured default pricing custom field exists on the OroCommerce Product Price entity and is of type boolean.

  2. Verifies that all mandatory pricing attributes (price value, quantity, currency) and required relationships (price list and unit) are present.

  3. If any validations fail, raises a descriptive expected exception that clearly identifies the missing or invalid configuration.

Since default pricing is handled after the product is successfully created or updated, the product's external ID is still persisted in iPaaS.com. This ensures product creation/update remains intact while surfacing precise feedback for correcting default pricing mappings.

During updates:

  1. The same validations apply.

  2. The system attempts to locate an existing Product Price record matching the same Product + Price List + Unit combination.

  3. If a match is found, that record is updated.

  4. If no exact match exists, the system retrieves all Product Price records associated with the product across all available price lists and removes any entries previously marked as default pricing.

  5. A new default pricing record is then created.

This process ensures that only one default price exists per product at any given time.

Default Pricing Custom Fields Support

Default Pricing supports the use of custom fields. Follow the same steps as Custom Fields Support above, with these differences:

  1. Select the Product Price entity (not Product)

  2. When setting the Name of the iPaaS.com subscription custom field, prepend the prefix "DefaultPricing_" to it

  3. Select the Product module and click Save

Authentication and Security

OroCommerce uses OAuth 2.0 authentication to generate an access token, which is then used to authorize all OroCommerce API requests in transfer operations. Ensure credentials are stored securely within the iPaaS.com subscription settings.

Integration Flow

The integration processes iPaaS.com Product records as follows:

  1. Product is created or updated in iPaaS.com with TrackingMethod = "Product" and no kit components.

  2. Mapping filter validates product qualifies as a Simple product.

  3. iPaaS.com authenticates with OroCommerce using OAuth 2.0.

  4. Required relationship entities (Organization, Owner, Attribute Family, etc.) are resolved via dynamic lookups.

  5. Product attributes are mapped (SKU, Status, ProductType, Featured, NewArrival).

  6. Related entities (Names, Descriptions, Shipping Options, etc.) are prepared for the included object.

  7. Product is created or updated via OroCommerce Product API.

  8. If default pricing mappings are provided, pricing validation occurs.

  9. Default pricing record is created or updated (one per product).

  10. OroCommerce Product ID is saved as External ID in iPaaS.com.

  11. Transfer status and any errors are logged in iPaaS.com.

Mappings

Parent: OroCommerce Add Simple Product FROM iPaaS

This mapping collection handles the creation of standalone OroCommerce products from iPaaS.com data. It applies only to products where TrackingMethod = Product and excludes kits or kit components. The mapping ensures that organizational structure, product units, tax code, related financial attributes, and other data are correctly associated, maintaining consistent updates within OroCommerce.

Mapping Filter

TrackingMethod == "Product" && (Kit == null || Kit.Components == null || Kit.Components.Count == 0)

Description

This filter ensures that only simple products are considered for the mapping. It checks that the product's TrackingMethod is set to "Product" and confirms that it does not have any kit components—that is, either the Kit object is null, its Components list is null, or the list is empty. This condition excludes any bundled or composite products, so the mapping applies exclusively to individual products without sub-items.

Mapping Type

Source (iPaaS.com)

Destination (OroCommerce)

Description

Field

SalePrice

DefaultPricing_SalePrice
(custom field)

Maps the SalePrive from iPaaS.com to the custom field DefaultPricing_SalePrice in OroCommerce.

Static

products

Type

(Required) Sets the product type in OroCommerce.

Field

Sku

Attributes_Sku

(Required) Maps the product SKU from iPaaS.com to OroCommerce.

Dynamic Formula

if(Status == "Active" || Status == "Preorder") return "enabled"; else return "disabled";

Attributes_Status

(Required) Maps product status. OroCommerce only supports "enabled" or "disabled". Active and Preorder are mapped to enabled; all others to disabled.

Static

simple

Attributes_ProductType

(Required) Sets the product type to "simple" for non-kit, non-configurable products.

Static

true

Attributes_Featured

Static

true

Attributes_NewArrival

(Recommended) Sets whether the product is a new arrival. Set to "true" or "false".

Dynamic Formula

return await GetBusinessUnitIdByNameAsync("Acme, General");

Relationships_Owner_Id

(Recommended) Retrieves the business unit ID by name for product ownership.

Static

businessunits

Relationships_Owner_Type

(Required when Owner_Id is mapped) Specifies the owner relationship type.

Dynamic Formula

return await GetOrganizationIdByNameAsync("iPaaS.com");

Relationships_Organization_Id

(Recommended) Retrieves the organization ID by name.

Static

organizations

Relationships_Organization_Type

(Required when Organization_Id is mapped) Specifies the organization relationship type.

Dynamic Formula

return await GetAttributeFamilyIdByCodeAsync("default_family_custom");

Relationships_AttributeFamily_Id

(Required) Retrieves the attribute family ID by code.

Static

attributefamilies

Relationships_AttributeFamily_Type

(Required) Specifies the attribute family relationship type.

Static

prodinventorystatuses

Relationships_InventoryStatus_Type

(Required) Specifies the inventory status relationship type.

Dynamic Formula

return new List<string> { Name };

Relationships_Names_Ids

(Required) Returns product name as a list to support OroCommerce's multi-name localized structure.

Static

productnames

Relationships_Names_Type

(Required) Specifies the names relationship type.

Dynamic Formula

if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each";

Relationships_PrimaryUnitPrecision_Id

(Required) Resolves product unit by label; defaults to "each" if not found.

Static

productunitprecisions

Relationships_PrimaryUnitPrecision_Type

(Required) Specifies the primary unit precision relationship type.

Static

0

Relationships_PrimaryUnitPrecision_Precision

(Required) Sets the decimal precision for the primary unit.

Static

true

Relationships_PrimaryUnitPrecision_Sell

(Recommended) Sets whether the product is sellable. Set to "true" or "false".

Dynamic Formula

return new List<string> { Description };

Relationships_ShortDescriptions_Ids

(Recommended) Maps short description as a list for localization support.

Static

productshortdescriptions

Relationships_ShortDescriptions_Type

(Required when ShortDescriptions_Ids is mapped) Specifies the short descriptions relationship type.

Dynamic Formula

return new List<string> { Description };

Relationships_Descriptions_Ids

(Recommended) Maps description as a list for localization support.

Static

productdescriptions

Relationships_Descriptions_Type

(Required when Descriptions_Ids is mapped) Specifies the descriptions relationship type.

Static

productshippingoptions

Relationships_ProductShippingOptions_Type

(Required when any shipping options are mapped) Specifies the shipping options relationship type.

Dynamic Formula

return await GetWeightUnitIdByShortCodeAsync("kg");

Relationships_ProductShippingOptions_WeightUnit

(Required when WeightValue is mapped) Retrieves weight unit ID by short code.

Field

Weight

Relationships_ProductShippingOptions_WeightValue

(Recommended) Maps product weight for shipping options.

Dynamic Formula

return await GetLengthUnitIdByShortCodeAsync("m");

Relationships_ProductShippingOptions_DimensionUnit

(Required when any dimension is mapped) Retrieves dimension unit ID by short code.

Field

Depth

Relationships_ProductShippingOptions_DimensionLength

(Recommended) Maps product depth to length for shipping options.

Field

Width

Relationships_ProductShippingOptions_DimensionWidth

(Recommended) Maps product width for shipping options.

Field

Height

Relationships_ProductShippingOptions_DimensionHeight

(Recommended) Maps product height for shipping options.

Dynamic Formula

return await GetProductTaxCodeIdByTaxCodeAsync("TAXABLE_ITEMS");

Relationships_TaxCode_Id

(Recommended) Retrieves tax code ID by code.

Static

producttaxcodes

Relationships_TaxCode_Type

(Required when TaxCode_Id is mapped) Specifies the tax code relationship type.

Dynamic Formula

return await GetProductBrandIdByNameAsync("Default ltd.");

Relationships_Brand_Id

(Recommended) Retrieves brand ID by name.

Static

brands

Relationships_Brand_Type

(Required when Brand_Id is mapped) Specifies the brand relationship type.

Dynamic Formula

if(Categories?.Count > 0) return await GetCatalogCategoryIdByTitleAsync(Categories.LastOrDefault().CategoryName);

Relationships_Category_Id

(Recommended) Retrieves category ID using the last category in the collection.

Static

categories

Relationships_Category_Type

(Required when Category_Id is mapped) Specifies the category relationship type.

Static

systemConfig

Relationships_PageTemplate_Id

(Recommended) Sets the fallback value for page template.

Static

entityfieldfallbackvalues

Relationships_PageTemplate_Type

(Required when PageTemplate_Id is mapped) Specifies the page template relationship type.

Static

entityfieldfallbackvalues

Relationships_ManageInventory_Type

(Required when ManageInventory is mapped) Specifies the manage inventory relationship type.

Static

1

Relationships_ManageInventory_ScalarValue

(Recommended) Sets manage inventory option. "1" = On order submission; "0" = No (custom).

Static

entityfieldfallbackvalues

Relationships_DecrementQuantity_Type

(Required when DecrementQuantity is mapped) Specifies the decrement quantity relationship type.

Static

1

Relationships_DecrementQuantity_ScalarValue

(Recommended) Sets decrement quantity option. "1" = Yes; "0" = No.

Static

entityfieldfallbackvalues

Relationships_BackOrder_Type

(Required when BackOrder is mapped) Specifies the backorder relationship type.

Static

0

Relationships_BackOrder_ScalarValue

(Recommended) Sets backorder option. "1" = Yes; "0" = No.

Dynamic Formula

// Normalize iPaaS product's name to meet Oro Commerce URL-safe requirements string normalizedSlug = Regex.Replace(Name, @"[^a-zA-Z0-9\-._~]", "_"); return new List<string> { normalizedSlug };

Relationships_SlugPrototypes_Ids

(Recommended) Generates URL-safe slug from product name.

Static

localizedfallbackvalues

Relationships_SlugPrototypes_Type

(Required when SlugPrototypes_Ids is mapped) Specifies the slug prototypes relationship type.

Dynamic Formula

return new List<string> { "Meta Title: " + Name };

Relationships_MetaTitles_Ids

(Recommended) Maps meta title for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaTitles_Type

(Required when MetaTitles_Ids is mapped) Specifies the meta titles relationship type.

Dynamic Formula

return new List<string> { "Meta Desc: " + Description };

Relationships_MetaDescriptions_Ids

(Recommended) Maps meta description for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaDescriptions_Type

(Required when MetaDescriptions_Ids is mapped) Specifies the meta descriptions relationship type.

Dynamic Formula

return new List<string> { "Meta Keyword: " + TrackingMethod + " " + Name.Split()[0] };

Relationships_MetaKeywords_Ids

(Recommended) Maps meta keywords for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaKeywords_Type

(Required when MetaKeywords_Ids is mapped) Specifies the meta keywords relationship type.

Static

productprices

DefaultPricing_Type

(Required for default pricing) Specifies the product prices relationship type.

Static

USD

DefaultPricing_Attributes_Currency

(Required for default pricing) Sets the currency code.

Dynamic Formula

InStockThreshold ?? 1;

DefaultPricing_Attributes_Quantity

(Required for default pricing) Sets quantity; defaults to 1 if InStockThreshold is null.

Field

DefaultPrice

DefaultPricing_Attributes_Value

(Required for default pricing) Maps the default price value.

Dynamic Formula

string priceListId = await GetPriceListIdByNameAsync("Default Price List"); if(!string.IsNullOrWhiteSpace(priceListId)) return priceListId; throw new Exception("Product cannot be updated because incorrect price list name is provided");

DefaultPricing_Relationships_PriceList_Id

(Required for default pricing) Retrieves price list ID by name; throws exception if not found.

Static

pricelists

DefaultPricing_Relationships_PriceList_Type

(Required for default pricing) Specifies the price list relationship type.

Dynamic Formula

if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each";

DefaultPricing_Relationships_Unit_Id

(Required for default pricing) Resolves product unit; defaults to "each".

Static

productunits

DefaultPricing_Relationships_Unit_Type

(Required for default pricing) Specifies the product units relationship type.

Parent: OroCommerce Update Simple Product FROM iPaaS.com

This mapping collection handles the update of standalone OroCommerce products from iPaaS.com data. It applies only to products where TrackingMethod = Product and excludes kits or kit components.

Mapping Filter

TrackingMethod == "Product" && (Kit == null || Kit.Components == null || Kit.Components.Count == 0)

Description

This filter ensures that only simple products are considered for the mapping. It checks that the product's TrackingMethod is set to "Product" and confirms that it does not have any kit components. This condition excludes any bundled or composite products, so the mapping applies exclusively to individual products without sub-items.

The Update mapping uses the same field mappings as the Add mapping. All required, recommended, and conditional field mappings apply identically for product updates.

Mapping Type

Source (iPaaS.com)

Destination (OroCommerce)

Description

Field

SalePrice

DefaultPricing_SalePrice
(custom field)

Maps the SalePrive from iPaaS.com to the custom field DefaultPricing_SalePrice in OroCommerce.

Static

productsProduct

Type

(Required) Sets the product type in OroCommerce.

Field

Sku

Attributes_Sku

(Required) Maps the product SKU from iPaaS.com to OroCommerce.

Dynamic Formula

if(Status == "Active" || Status == "Preorder") return "enabled"; else return "disabled";

Attributes_Status

(Required) Maps product status. OroCommerce only supports "enabled" or "disabled". Active and Preorder are mapped to enabled; all others to disabled.

Static

simple

Attributes_ProductType

(Required) Sets the product type to "simple" for non-kit, non-configurable products.

Static

true

Attributes_Featured

Static

true

Attributes_NewArrival

(Recommended) Sets whether the product is a new arrival. Set to "true" or "false".

Dynamic Formula

return await GetBusinessUnitIdByNameAsync("Acme, General");

Relationships_Owner_Id

(Recommended) Retrieves the business unit ID by name for product ownership.

Static

businessunits

Relationships_Owner_Type

(Required when Owner_Id is mapped) Specifies the owner relationship type.

Dynamic Formula

return await GetOrganizationIdByNameAsync("iPaaS.com");

Relationships_Organization_Id

(Recommended) Retrieves the organization ID by name.

Static

organizations

Relationships_Organization_Type

(Required when Organization_Id is mapped) Specifies the organization relationship type.

Dynamic Formula

return await GetAttributeFamilyIdByCodeAsync("default_family_custom");

Relationships_AttributeFamily_Id

(Required) Retrieves the attribute family ID by code.

Static

attributefamilies

Relationships_AttributeFamily_Type

(Required) Specifies the attribute family relationship type.

Static

prodinventorystatuses

Relationships_InventoryStatus_Type

(Required) Specifies the inventory status relationship type.

Dynamic Formula

return new List<string> { Name };

Relationships_Names_Ids

(Required) Returns product name as a list to support OroCommerce's multi-name localized structure.

Static

productnames

Relationships_Names_Type

(Required) Specifies the names relationship type.

Dynamic Formula

if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each";

Relationships_PrimaryUnitPrecision_Id

(Required) Resolves product unit by label; defaults to "each" if not found.

Static

productunitprecisions

Relationships_PrimaryUnitPrecision_Type

(Required) Specifies the primary unit precision relationship type.

Static

0

Relationships_PrimaryUnitPrecision_Precision

(Required) Sets the decimal precision for the primary unit.

Static

true

Relationships_PrimaryUnitPrecision_Sell

(Recommended) Sets whether the product is sellable. Set to "true" or "false".

Dynamic Formula

return new List<string> { Description };

Relationships_ShortDescriptions_Ids

(Recommended) Maps short description as a list for localization support.

Static

productshortdescriptions

Relationships_ShortDescriptions_Type

(Required when ShortDescriptions_Ids is mapped) Specifies the short descriptions relationship type.

Dynamic Formula

return new List<string> { Description };

Relationships_Descriptions_Ids

(Recommended) Maps description as a list for localization support.

Static

productdescriptions

Relationships_Descriptions_Type

(Required when Descriptions_Ids is mapped) Specifies the descriptions relationship type.

Static

productshippingoptions

Relationships_ProductShippingOptions_Type

(Required when any shipping options are mapped) Specifies the shipping options relationship type.

Dynamic Formula

return await GetWeightUnitIdByShortCodeAsync("kg");

Relationships_ProductShippingOptions_WeightUnit

(Required when WeightValue is mapped) Retrieves weight unit ID by short code.

Field

Weight

Relationships_ProductShippingOptions_WeightValue

(Recommended) Maps product weight for shipping options.

Dynamic Formula

return await GetLengthUnitIdByShortCodeAsync("m");

Relationships_ProductShippingOptions_DimensionUnit

(Required when any dimension is mapped) Retrieves dimension unit ID by short code.

Field

Depth

Relationships_ProductShippingOptions_DimensionLength

(Recommended) Maps product depth to length for shipping options.

Field

Width

Relationships_ProductShippingOptions_DimensionWidth

(Recommended) Maps product width for shipping options.

Field

Height

Relationships_ProductShippingOptions_DimensionHeight

(Recommended) Maps product height for shipping options.

Dynamic Formula

return await GetProductTaxCodeIdByTaxCodeAsync("TAXABLE_ITEMS");

Relationships_TaxCode_Id

(Recommended) Retrieves tax code ID by code.

Static

producttaxcodes

Relationships_TaxCode_Type

(Required when TaxCode_Id is mapped) Specifies the tax code relationship type.

Dynamic Formula

return await GetProductBrandIdByNameAsync("Default ltd.");

Relationships_Brand_Id

(Recommended) Retrieves brand ID by name.

Static

brands

Relationships_Brand_Type

(Required when Brand_Id is mapped) Specifies the brand relationship type.

Dynamic Formula

if(Categories?.Count > 0) return await GetCatalogCategoryIdByTitleAsync(Categories.LastOrDefault().CategoryName);

Relationships_Category_Id

(Recommended) Retrieves category ID using the last category in the collection.

Static

categories

Relationships_Category_Type

(Required when Category_Id is mapped) Specifies the category relationship type.

Static

systemConfig

Relationships_PageTemplate_Id

(Recommended) Sets the fallback value for page template.

Static

entityfieldfallbackvalues

Relationships_PageTemplate_Type

(Required when PageTemplate_Id is mapped) Specifies the page template relationship type.

Static

entityfieldfallbackvalues

Relationships_ManageInventory_Type

(Required when ManageInventory is mapped) Specifies the manage inventory relationship type.

Static

1

Relationships_ManageInventory_ScalarValue

(Recommended) Sets manage inventory option. "1" = On order submission; "0" = No (custom).

Static

entityfieldfallbackvalues

Relationships_DecrementQuantity_Type

(Required when DecrementQuantity is mapped) Specifies the decrement quantity relationship type.

Static

1

Relationships_DecrementQuantity_ScalarValue

(Recommended) Sets decrement quantity option. "1" = Yes; "0" = No.

Static

entityfieldfallbackvalues

Relationships_BackOrder_Type

(Required when BackOrder is mapped) Specifies the backorder relationship type.

Static

0

Relationships_BackOrder_ScalarValue

(Recommended) Sets backorder option. "1" = Yes; "0" = No.

Dynamic Formula

// Normalize iPaaS product's name to meet Oro Commerce URL-safe requirements string normalizedSlug = Regex.Replace(Name, @"[^a-zA-Z0-9\-._~]", "_"); return new List<string> { normalizedSlug };string normalizedSlug = Regex.Replace(Name, @"[^a-zA-Z0-9\-._~]", "_"); return new List<string> { normalizedSlug };

Relationships_SlugPrototypes_Ids

(Recommended) Generates URL-safe slug from product name.

Static

localizedfallbackvalues

Relationships_SlugPrototypes_Type

(Required when SlugPrototypes_Ids is mapped) Specifies the slug prototypes relationship type.

Dynamic Formula

return new List<string> { "Meta Title: " + Name };

Relationships_MetaTitles_Ids

(Recommended) Maps meta title for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaTitles_Type

(Required when MetaTitles_Ids is mapped) Specifies the meta titles relationship type.

Dynamic Formula

return new List<string> { "Meta Desc: " + Description };

Relationships_MetaDescriptions_Ids

(Recommended) Maps meta description for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaDescriptions_Type

(Required when MetaDescriptions_Ids is mapped) Specifies the meta descriptions relationship type.

Dynamic Formula

return new List<string> { "Meta Keyword: " + TrackingMethod + " " + Name.Split()[0] };

Relationships_MetaKeywords_Ids

(Recommended) Maps meta keywords for SEO optimization.

Static

localizedfallbackvalues

Relationships_MetaKeywords_Type

(Required when MetaKeywords_Ids is mapped) Specifies the meta keywords relationship type.

Static

productprices

DefaultPricing_Type

(Required for default pricing) Specifies the product prices relationship type.

Static

USD

DefaultPricing_Attributes_Currency

(Required for default pricing) Sets the currency code.

Dynamic Formula

InStockThreshold ?? 1;

DefaultPricing_Attributes_Quantity

(Required for default pricing) Sets quantity; defaults to 1 if InStockThreshold is null.

Field

DefaultPrice

DefaultPricing_Attributes_Value

(Required for default pricing) Maps the default price value.

Dynamic Formula

string priceListId = await GetPriceListIdByNameAsync("Default Price List"); if(!string.IsNullOrWhiteSpace(priceListId)) return priceListId; throw new Exception("Product cannot be updated because incorrect price list name is provided");

DefaultPricing_Relationships_PriceList_Id

(Required for default pricing) Retrieves price list ID by name; throws exception if not found.

Static

pricelists

DefaultPricing_Relationships_PriceList_Type

(Required for default pricing) Specifies the price list relationship type.

Dynamic Formula

if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each";

DefaultPricing_Relationships_Unit_Id

(Required for default pricing) Resolves product unit; defaults to "each".

Static

productunits

DefaultPricing_Relationships_Unit_Type

(Required for default pricing) Specifies the product units relationship type.

Error Handling

Duplicate SKU

  • Description: This error occurs when trying to create a product in OroCommerce with an existing SKU.

  • Resolution: Enable collision handling in the mapping collection by configuring the Collision Handling Method to Update and Link in the Subscription Settings.

Validation and Testing

Validation Rules

Relationship Type Validation
Some fields are validated internally and only become relevant if their dependent fields are also mapped. For instance:

  • If a Relationships_Owner_Id field is mapped, the corresponding Relationships_Owner_Type must also be mapped to include that relationship in the payload.

  • If the type field is not provided, the ID field will not be used in the request.

This pattern applies to all similar relationship fields.

Validation Checklist

  1. All mandatory fields are mapped (Type, Attributes_Sku, Attributes_Status, Attributes_ProductType).

  2. All required relationship fields have both ID and Type mapped.

  3. Referenced entities exist in OroCommerce (Organization, Owner, Attribute Family, etc.).

  4. Custom fields exist in OroCommerce with matching names and types.

  5. Price List exists for default pricing operations.

  6. Default pricing custom field (boolean) is configured on the Product Price entity.

  7. Product unit exists or defaults to "each".

  8. Collision handling is configured if SKU conflicts are possible.

Test Scenarios

Scenario 1: Create Simple Product

Sync a new product from iPaaS.com with TrackingMethod = "Product" and no kit components. Product should be created in OroCommerce. OroCommerce Product ID should be saved as External ID in iPaaS.com.

Scenario 2: Update Existing Product

Update an existing product in iPaaS.com. Changes should be reflected in OroCommerce without creating duplicates.

Scenario 3: Create Product with Default Pricing

Sync a product with default pricing mappings configured. Product should be created with an associated Product Price record marked as default.

Scenario 4: Duplicate SKU (Failure Case)

Attempt to create a product with an existing SKU without collision handling. Transfer should fail with a duplicate SKU error.

Scenario 5: Missing Relationship Type (Failure Case)

Map a relationship ID without its corresponding Type field. Transfer should fail, or the relationship should not be assigned.

Additional Notes

  • Ensure dynamic formulas return valid output.

Did this answer your question?