OroCommerce Simple Product From iPaaS.com Mapping Documentation
This integration creates and updates standalone (simple) products in OroCommerce from iPaaS.com product data. The flow runs From iPaaS.com to OroCommerce and is triggered whenever a product is created or updated in iPaaS.com with a Tracking Method of "Product" that is not a kit (it has no kit components). Two mapping collections cover the entity: one adds new simple products and one updates existing ones. Both also create and maintain the product's default price entry in OroCommerce when default-pricing fields are mapped.
Before You Begin
Confirm the following prerequisites are in place before configuring this integration. These are in addition to the broader Setup Requirements documented later in this article.
iPaaS.com Requirements
Each product record has a valid SKU, Name, Default Price, and Status.
The product's Tracking Method is set to "Product".
The product is not a kit and has no kit components.
The product's Type field is populated.
OroCommerce Requirements
The following entities exist in OroCommerce before products are transferred, when they are referenced: Organization, Business Unit (Owner), Attribute Family, Inventory Status, Tax Code, Brand, Category, Price List (for default pricing), and Product Units.
The API credentials used by the integration have permission to create and update products.
Any custom fields are created in OroCommerce before they are mapped. A schema update may be required for Table Column custom fields.
ID Format
When manually transferring a product from iPaaS.com, 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 is saved as the external ID in iPaaS.com after a successful transfer. This is what links the iPaaS.com product to its OroCommerce counterpart for subsequent updates.
Example: 288
Custom Field Support
Both Simple Product collections support custom fields. A custom field value is read from the iPaaS.com record and written to a matching OroCommerce custom field during the transfer. To map data from iPaaS.com into a custom field in OroCommerce, complete the following steps.
Navigate to Entity Management: In OroCommerce, go to System > Entities > Entity Management.
Select the target module: Locate and select the module (entity) where you want to add the custom field. For products, select Product. For a default-pricing custom field, select Product Price.
Create a custom field: Click Create Field and configure the required fields:
Field Name: Provide a unique name. The value should start with a letter and contain only alphabetic characters, 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 the field type to "string", "datetime", "integer", "float", "decimal", "boolean", or "enum". All of these are supported when used with compatible mappings.
Update the schema: After creating a Table Column field, a red Update Schema button appears. Click Update Schema to apply the changes. Contact your OroCommerce administrator before updating an entity schema to prevent unexpected service downtime.
Configure the custom field in iPaaS.com: Once the schema update is complete (if required), configure the custom field in the iPaaS.com subscription:
Open the OroCommerce subscription and go to Custom Fields. Subscription custom fields are also known as external system custom fields.
Create the custom field using 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. The source can be configured based on the custom field's requirements.
For a default-pricing custom field, create it on the Product Price entity in OroCommerce, then create the matching subscription custom field in iPaaS.com with the prefix "DefaultPricing_" prepended to its name, selecting the Product module.
Default Pricing Behavior
Both collections create and maintain the product's default price as part of the create and update flows. Default pricing is processed only when default-pricing fields are mapped. To support it, a boolean custom field on the OroCommerce Product Price entity must be configured in the subscription preset named "Default Pricing Custom Field Name". This field identifies which Product Price record represents the active default price for a product.
During processing, the integration validates that the configured default-pricing custom field exists on the Product Price entity and is of type boolean, and that the required pricing attributes (price value, quantity, currency) and required relationships (price list and unit) are present. If a validation fails, the integration raises a descriptive exception identifying the missing or invalid configuration. Because default pricing is handled after the product is created or updated, the product's external ID is still saved in iPaaS.com even when default pricing fails, allowing the pricing mappings to be corrected without re-creating the product.
On update, the integration first looks for an existing Product Price record matching the same Product, Price List, and Unit combination and updates it if found. If no exact match exists, it removes any earlier records previously marked as the default price and creates a new default-pricing record, ensuring only one default price exists per product at a time.
Mapping Collection Status
Status: Enabled
Trigger Events: Create, Update
The Add OroCommerce Simple Product collection runs on the Create trigger, and the Update OroCommerce Simple Product collection runs on the Update trigger. Both apply the same mapping filter (see the Mappings section). A product is processed by these collections only when its Tracking Method is "Product" and it has no kit components. Products that include a kit are handled by the Kit Product collections instead.
Duplicate or Conflicting Mappings
The OroCommerce Product entity is served by several mapping collections that share the same destination entity but are separated by their mapping filters and by the Add and Update split. The Simple Product collections documented here apply only to products with Tracking Method "Product" and no kit components. The following sibling collections operate on the same Product entity:
Add OroCommerce Simple Product FROM iPaaS.com (creates simple products)
Update OroCommerce Simple Product FROM iPaaS.com (updates simple products)
Add OroCommerce Configurable Product FROM iPaaS.com (creates configurable products)
Update OroCommerce Configurable Product FROM iPaaS.com (updates configurable products)
Add OroCommerce Kit Product FROM iPaaS.com (creates kit products)
Update OroCommerce Kit Product FROM iPaaS.com (updates kit products)
The Simple, Configurable, and Kit collections are mutually exclusive because each filters on a different product shape (kit components present or absent, configurable attributes present or absent). The Add and Update collections within a product type carry the same field set and are distinguished by their trigger event.
Collision Handling
These collections support collision handling, which controls what happens when a product created from iPaaS.com matches a product that already exists in OroCommerce. A collision is detected when the incoming product's SKU already exists in OroCommerce. The integration finds the existing OroCommerce product by SKU and reuses its ID so the transfer continues as an update of that product instead of failing or creating a duplicate.
You choose how collisions are resolved by setting the collision handling method on the mapping collection in your subscription. The available options are:
Error — reject the transfer and report the duplicate as an error. No record is created or updated.
Remap and Link — link the incoming record to the matching OroCommerce product, then rerun the transfer as an update.
Update and Link — update the matching OroCommerce product and link the incoming record to it. This is the method these collections ship with by default.
Update and No Link — update the matching OroCommerce product but do not link the incoming record to it.
When the method is set to Error, a duplicate SKU produces a conflict error in the iPaaS.com error logs. To change that behavior, select a different collision handling method on the mapping collection. See the OroCommerce Integration Error Messages article for the conflict error and its resolution.
Supported Child Collections
The Simple Product collections have no child collections. All product attributes and relationships, including the default price, are handled within a single flat-to-nested transformation in each collection.
OroCommerce Caveats
Required fields: The following fields must be mapped for a simple product to be created or updated successfully: Type, Attributes_Sku, Attributes_Status, Attributes_ProductType, Relationships_AttributeFamily_Id, Relationships_AttributeFamily_Type, Relationships_InventoryStatus_Id, Relationships_InventoryStatus_Type, Relationships_Names_Ids, Relationships_Names_Type, Relationships_PrimaryUnitPrecision_Id, Relationships_PrimaryUnitPrecision_Type, and Relationships_PrimaryUnitPrecision_Precision.
Status values: The OroCommerce product Status attribute supports only "enabled" or "disabled". The integration maps the source statuses "Active" and "Preorder" to "enabled" and all other statuses to "disabled".
Relationship ID and Type pairing: Many relationships require both an ID field and a paired Type field. If the Type field is not mapped, the relationship is not assigned even when the ID value is provided. This pattern applies to all relationship fields (for example, Owner, Organization, Tax Code, Brand, Category).
Referenced entities must exist: Relationship targets resolved by name or code — Organization, Owner (business unit), Attribute Family, Inventory Status, Tax Code, Brand, and Category — must already exist in OroCommerce. The integration resolves their internal IDs dynamically using lookup translations or helper functions, and an unresolved value returns null.
Dynamically created relationships: Names, descriptions, short descriptions, slug prototypes, meta titles, meta descriptions, meta keywords, primary unit precision, product shipping options, page template, manage inventory, decrement quantity, and backorder are created dynamically through the OroCommerce Product API included object. These fields are included only if they are mapped.
Default pricing custom field: Default pricing requires a boolean custom field on the Product Price entity, configured through the "Default Pricing Custom Field Name" subscription preset. See Default Pricing Behavior.
iPaaS.com Caveats
Tracking Method: The source product's Tracking Method must be "Product" for the record to qualify for these collections. Products that include a kit with at least one component are routed to the Kit Product collections.
Status: The source product should have a usable Status value, because any value other than "Active" or "Preorder" results in a disabled product in OroCommerce.
Unit: When the source Unit is empty or cannot be matched to an OroCommerce product unit, the integration falls back to the unit "each".
Categories: When the source product has one or more categories, the integration uses the last category in the collection to resolve the OroCommerce catalog category.
Setup Requirements
OroCommerce: Ensure that the referenced Organization, Business Unit (Owner), Attribute Family, Inventory Status, Tax Code, Brand, Category, Price List (for default pricing), and Product Units exist before transferring products. API credentials must have permission to create and update products and product prices. Custom fields must be created in OroCommerce before they are mapped.
iPaaS.com: Configure the OroCommerce subscription credentials in the iPaaS.com credential manager, and configure the "Default Pricing Custom Field Name" preset if default pricing is used.
Authentication: OroCommerce uses OAuth 2.0 (Authorization Code) to generate an access token, which is used to authorize all OroCommerce API requests during transfer operations. Store credentials securely within the iPaaS.com credential manager.
Integration Flow
A product is created or updated in iPaaS.com with Tracking Method "Product" and no kit components.
The mapping filter confirms the product qualifies as a simple product.
iPaaS.com authenticates with OroCommerce using OAuth 2.0.
Required relationship entities (Organization, Owner, Attribute Family, Inventory Status, Tax Code, Brand, Category) are resolved to their OroCommerce internal IDs through lookup translations and helper functions.
Product attributes are mapped (SKU, Status, Product Type "simple", Featured, New Arrival).
Related entities (Names, Descriptions, Short Descriptions, Slug Prototypes, Meta fields, Primary Unit Precision, Product Shipping Options, Page Template, inventory flags) are prepared for the included object and added only when mapped.
The product is created (Add collection) or updated (Update collection) through the OroCommerce Product API.
If default-pricing fields are mapped, the integration validates the pricing configuration and creates or updates the product's default price.
The OroCommerce Product ID is saved as the external ID in iPaaS.com.
Transfer status and any errors are logged in iPaaS.com.
Mappings
Both collections carry the same set of 62 mappings. The only difference is the trigger event (Add creates products on Create; Update updates them on Update) and the wording of the price-list validation error (the Add collection reports that the product "cannot be created" and the Update collection reports that it "cannot be updated"). The mapping table below documents the Add OroCommerce Simple Product collection. The Update collection table follows and lists the same fields.
Parent: Add OroCommerce Simple Product FROM iPaaS.com
This mapping collection handles the creation of standalone OroCommerce products from iPaaS.com data. It applies only to products with Tracking Method "Product" that are not kits. The mapping associates organizational structure, product units, tax code, and related financial attributes so that product data stays consistent within OroCommerce. When default-pricing fields are mapped, the collection also creates the product's default price.
Mapping Filter
TrackingMethod == "Product" && (Kit == null || Kit.Components == null || Kit.Components.Count == 0)
Filter Description. This filter selects only simple products. It confirms that the product's Tracking Method is "Product" and that the product has no kit components — that is, the Kit object is null, its Components list is null, or that list is empty. Products that include one or more kit components are skipped by this collection and processed by the Kit Product collections instead.
Mapping Type | Source Field (iPaaS.com) | Destination Field (OroCommerce) | Description |
Dynamic Formula |
| Relationships_Names_Ids | (Required) Provides one or more localized product names with default localization. At least one name must always be provided. |
Dynamic Formula | return await GetAttributeFamilyIdByCodeAsync("default_family_custom"); | Relationships_AttributeFamily_Id | (Required) Resolves the attribute family ID from the attribute family code. Placeholder value — replace during implementation: substitute "default_family_custom" with your own OroCommerce attribute family 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. |
Lookup Translation | Product Inventory Status From iPaaS.com | Relationships_InventoryStatus_Id | (Required) Maps the inventory status using the lookup translation table. |
Dynamic Formula |
| Attributes_Status | (Required) Maps the product status. OroCommerce supports only "enabled" or "disabled". Source statuses "Active" and "Preorder" are mapped to "enabled"; all others are mapped to "disabled". |
Field | Sku | Attributes_Sku | (Required) Maps the product SKU from iPaaS.com to OroCommerce. |
Static | simple | Attributes_ProductType | (Required) Sets the product type to "simple" for simple products. |
Dynamic Formula | if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each"; | Relationships_PrimaryUnitPrecision_Id | (Required) Resolves the product unit by label; defaults to "each" if the unit is missing or cannot be matched. |
Static | 0 | Relationships_PrimaryUnitPrecision_Precision | (Required) Sets the decimal precision for the primary unit. |
Static | true | Relationships_PrimaryUnitPrecision_Sell | (Required) Specifies whether the product is sellable. Set to "true" for sellable products and "false" for non-sellable products. |
Static | productnames | Relationships_Names_Type | (Required) Specifies the names relationship type. |
Static | productunitprecisions | Relationships_PrimaryUnitPrecision_Type | (Required) Specifies the primary unit precision relationship type. |
Dynamic Formula | return await GetOrganizationIdByNameAsync("iPaaS.com"); | Relationships_Organization_Id | Resolves the organization ID from the organization name. Placeholder value — replace during implementation: substitute "iPaaS.com" with your own OroCommerce organization name. |
Static | products | Type | (Required) Specifies the record type. |
Dynamic Formula | return await GetBusinessUnitIdByNameAsync("Acme, General"); | Relationships_Owner_Id | Resolves the business unit (owner) ID from the business unit name. Placeholder value — replace during implementation: substitute "Acme, General" with your own OroCommerce business unit name. |
Static | businessunits | Relationships_Owner_Type | (Required when Relationships_Owner_Id is mapped) Specifies the owner relationship type. The owner is not assigned unless this type is set. |
Static | organizations | Relationships_Organization_Type | (Required when Relationships_Organization_Id is mapped) Specifies the organization relationship type. The organization is not assigned unless this type is set. |
Static | producttaxcodes | Relationships_TaxCode_Type | (Required when Relationships_TaxCode_Id is mapped) Specifies the tax code relationship type. The tax code is not assigned unless this type is set. |
Static | productdescriptions | Relationships_Descriptions_Type | (Required when Relationships_Descriptions_Ids is mapped) Specifies the description relationship type. The description is not assigned unless this type is set. |
Dynamic Formula | return await GetProductTaxCodeIdByTaxCodeAsync("TAXABLE_ITEMS"); | Relationships_TaxCode_Id | Resolves the product tax code ID from the tax code. Placeholder value — replace during implementation: substitute "TAXABLE_ITEMS" with your own OroCommerce product tax code. |
Dynamic Formula |
| Relationships_Descriptions_Ids | (Optional) Provides one or more localized product descriptions with default localization. Including a single item is recommended. |
Dynamic Formula |
| Relationships_ShortDescriptions_Ids | (Optional) Provides one or more localized product short descriptions with default localization. Including a single item is recommended. |
Static | productshortdescriptions | Relationships_ShortDescriptions_Type | (Required when Relationships_ShortDescriptions_Ids is mapped) Specifies the short description relationship type. The short description is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_SlugPrototypes_Ids | (Optional) Generates a URL-safe slug from the product name, keeping only Latin letters, digits, and the symbols hyphen, period, underscore, and tilde, and replacing any other character with an underscore. Returned as a localized list. |
Static | localizedfallbackvalues | Relationships_SlugPrototypes_Type | (Required when Relationships_SlugPrototypes_Ids is mapped) Specifies the slug prototype relationship type. The slug prototype is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaTitles_Type | (Required when Relationships_MetaTitles_Ids is mapped) Specifies the meta title relationship type. The meta title is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaDescriptions_Type | (Required when Relationships_MetaDescriptions_Ids is mapped) Specifies the meta description relationship type. The meta description is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaKeywords_Type | (Required when Relationships_MetaKeywords_Ids is mapped) Specifies the meta keyword relationship type. The meta keyword is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_MetaTitles_Ids | (Optional) Provides one or more localized meta titles used for SEO, with default localization. Including a single item is recommended. |
Dynamic Formula |
| Relationships_MetaDescriptions_Ids | (Optional) Provides one or more localized meta descriptions used for SEO, with default localization. Including a single item is recommended. |
Static | entityfieldfallbackvalues | Relationships_PageTemplate_Type | (Required when Relationships_PageTemplate_Id is mapped) Specifies the page template relationship type. The page template is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_MetaKeywords_Ids | (Optional) Provides one or more localized meta keywords used for SEO, with default localization. Including a single item is recommended. |
Static | systemConfig | Relationships_PageTemplate_Id | (Optional) Sets the fallback Page Template style used to display the product in the storefront. |
Static | 1 | Relationships_ManageInventory_ScalarValue | (Optional) Sets the manage-inventory scalar value, where 1 means "On order submission in the default checkout flow" and 0 means "No (custom)". Defines whether inventory is managed for the product. |
Static | 1 | Relationships_DecrementQuantity_ScalarValue | (Optional) Sets the decrement-quantity scalar value, where 1 means Yes and 0 means No. Defines the strategy used for decrementing inventory on ordered products. |
Static | 0 | Relationships_BackOrder_ScalarValue | (Optional) Sets the backorder scalar value, where 1 means Yes and 0 means No. The backorder flag controls whether a product can be ordered while out of stock or low on inventory; such orders ship once the product is restocked. |
Static | entityfieldfallbackvalues | Relationships_DecrementQuantity_Type | (Required when Relationships_DecrementQuantity_Id is mapped) Specifies the decrement quantity relationship type. The decrement quantity flag is not assigned unless this type is set. |
Static | entityfieldfallbackvalues | Relationships_ManageInventory_Type | (Required when Relationships_ManageInventory_Id is mapped) Specifies the manage inventory relationship type. The manage inventory flag is not assigned unless this type is set. |
Static | entityfieldfallbackvalues | Relationships_BackOrder_Type | (Required when Relationships_BackOrder_Id is mapped) Specifies the backorder relationship type. The backorder flag is not assigned unless this type is set. |
Dynamic Formula | return await GetWeightUnitIdByShortCodeAsync("kg"); | Relationships_ProductShippingOptions_WeightUnit | (Required when Relationships_ProductShippingOptions_WeightValue is mapped) Resolves the OroCommerce weight unit ID by short code; returns null if no match is found. The weight value is not assigned unless this unit is set. Placeholder value — replace during implementation: substitute "kg" with your own OroCommerce weight unit short code. |
Static | productshippingoptions | Relationships_ProductShippingOptions_Type | (Required when any shipping-option data is provided) Specifies the product shipping options type. This type, together with the Primary Unit Precision ID, must be set or the shipping options are not applied, even when individual weight or dimension values are mapped. |
Field | Weight | Relationships_ProductShippingOptions_WeightValue | (Optional) Maps the product weight to the OroCommerce shipping option weight. |
Field | Depth | Relationships_ProductShippingOptions_DimensionLength | (Optional) Maps the product depth to the OroCommerce shipping option length. |
Field | Height | Relationships_ProductShippingOptions_DimensionHeight | (Optional) Maps the product height to the OroCommerce shipping option height. |
Field | Width | Relationships_ProductShippingOptions_DimensionWidth | (Optional) Maps the product width to the OroCommerce shipping option width. |
Dynamic Formula | return await GetLengthUnitIdByShortCodeAsync("m"); | Relationships_ProductShippingOptions_DimensionUnit | (Required when any dimension value is mapped) Resolves the OroCommerce dimension unit ID by short code; returns null if no match is found. The dimension values (length, height, width) are not assigned unless this unit is set. Placeholder value — replace during implementation: substitute "m" with your own OroCommerce dimension unit short code. |
Static | true | Attributes_Featured | (Optional) Specifies whether the product is featured. Set to "true" or "false". |
Dynamic Formula |
| Relationships_Category_Id | (Optional) Resolves the OroCommerce catalog category ID by title, using the last category in the iPaaS.com Categories collection; returns null if no match is found. |
Static | true | Attributes_NewArrival | (Optional) Specifies whether the product is a new arrival. Set to "true" or "false". |
Dynamic Formula | return await GetProductBrandIdByNameAsync("Default ltd."); | Relationships_Brand_Id | (Optional) Resolves the OroCommerce product brand ID by name; returns null if no match is found. Placeholder value — replace during implementation: substitute "Default ltd." with your own OroCommerce brand name. |
Static | USD | DefaultPricing_Attributes_Currency | (Required for default pricing) Maps a valid currency code for the product's default pricing. Placeholder value — replace during implementation: substitute "USD" with your own currency code. |
Static | brands | Relationships_Brand_Type | (Required when Relationships_Brand_Id is mapped) Specifies the brand relationship type. The brand is not assigned unless this type is set. |
Static | 1 | DefaultPricing_Attributes_Quantity | (Required for default pricing) Sets the default-pricing quantity. Required when default pricing is configured. |
Field | DefaultPrice | DefaultPricing_Attributes_Value | (Required for default pricing) Maps the default price value. Required when default pricing is configured. |
Dynamic Formula | string priceListId = await GetPriceListIdByNameAsync("Default Price List"); | DefaultPricing_Relationships_PriceList_Id | (Required for default pricing) Resolves the OroCommerce Price List ID from the configured Price List name. If no matching Price List exists, the product cannot be created and the process raises an error, ensuring default pricing is always tied to a valid Price List. Placeholder value — replace during implementation: substitute "Default Price List" with your own OroCommerce price list name. |
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 the product unit by label; defaults to "each" if the unit is missing or cannot be matched. |
Static | productunits | DefaultPricing_Relationships_Unit_Type | (Required for default pricing) Specifies the product units relationship type. |
Static | productprices | DefaultPricing_Type | (Required for default pricing) Specifies the product prices relationship type. |
Field | SalePrice | DefaultPricing_SalePrice | (Recommended) Maps the product sale price from iPaaS.com to the default price list entry in OroCommerce. Used to set the product's price when default pricing is configured for the integration. Leave unmapped if prices are managed exclusively through the Bulk Price flow. |
Static | categories | Relationships_Category_Type | (Required when Relationships_Category_Id is mapped) Specifies the category relationship type. The category is not assigned unless this type is set. |
Update OroCommerce Simple Product FROM iPaaS.com
This mapping collection updates existing standalone OroCommerce products from iPaaS.com data. It applies the same mapping filter and carries the same 62 fields as the Add collection, so the source-to-destination mappings are identical. The collection runs on the Update trigger. The only behavioral difference is the price-list validation error message, which states that the product "cannot be updated" rather than "cannot be created".
Mapping Filter
TrackingMethod == "Product" && (Kit == null || Kit.Components == null || Kit.Components.Count == 0)
Filter Description. This filter selects only simple products. It confirms that the product's Tracking Method is "Product" and that the product has no kit components. Products that include one or more kit components are skipped by this collection and processed by the Kit Product collections instead.
Mapping Type | Source Field (iPaaS.com) | Destination Field (OroCommerce) | Description |
Dynamic Formula |
| Relationships_Names_Ids | (Required) Provides one or more localized product names with default localization. At least one name must always be provided. |
Static | attributefamilies | Relationships_AttributeFamily_Type | (Required) Specifies the attribute family relationship type. |
Dynamic Formula | return await GetAttributeFamilyIdByCodeAsync("default_family_custom"); | Relationships_AttributeFamily_Id | (Required) Resolves the attribute family ID from the attribute family code. Placeholder value — replace during implementation: substitute "default_family_custom" with your own OroCommerce attribute family code. |
Lookup Translation | Product Inventory Status From iPaaS.com | Relationships_InventoryStatus_Id | (Required) Maps the inventory status using the lookup translation table. |
Dynamic Formula |
| Attributes_Status | (Required) Maps the product status. OroCommerce supports only "enabled" or "disabled". Source statuses "Active" and "Preorder" are mapped to "enabled"; all others are mapped to "disabled". |
Field | Sku | Attributes_Sku | (Required) Maps the product SKU from iPaaS.com to OroCommerce. |
Static | simple | Attributes_ProductType | (Required) Sets the product type to "simple" for simple products. |
Dynamic Formula | if(!string.IsNullOrWhiteSpace(Unit)) { string unitId = await GetProductUnitIdByLabelAsync(Unit); if(!string.IsNullOrWhiteSpace(unitId)) return unitId; } return "each"; | Relationships_PrimaryUnitPrecision_Id | (Required) Resolves the product unit by label; defaults to "each" if the unit is missing or cannot be matched. |
Static | 0 | Relationships_PrimaryUnitPrecision_Precision | (Required) Sets the decimal precision for the primary unit. |
Static | true | Relationships_PrimaryUnitPrecision_Sell | (Required) Specifies whether the product is sellable. Set to "true" for sellable products and "false" for non-sellable products. |
Static | productunitprecisions | Relationships_PrimaryUnitPrecision_Type | (Required) Specifies the primary unit precision relationship type. |
Static | productnames | Relationships_Names_Type | (Required) Specifies the names relationship type. |
Static | products | Type | (Required) Specifies the record type. |
Dynamic Formula | return await GetOrganizationIdByNameAsync("iPaaS.com"); | Relationships_Organization_Id | Resolves the organization ID from the organization name. Placeholder value — replace during implementation: substitute "iPaaS.com" with your own OroCommerce organization name. |
Dynamic Formula | return await GetBusinessUnitIdByNameAsync("Acme, General"); | Relationships_Owner_Id | Resolves the business unit (owner) ID from the business unit name. Placeholder value — replace during implementation: substitute "Acme, General" with your own OroCommerce business unit name. |
Static | businessunits | Relationships_Owner_Type | (Required when Relationships_Owner_Id is mapped) Specifies the owner relationship type. The owner is not assigned unless this type is set. |
Static | producttaxcodes | Relationships_TaxCode_Type | (Required when Relationships_TaxCode_Id is mapped) Specifies the tax code relationship type. The tax code is not assigned unless this type is set. |
Static | organizations | Relationships_Organization_Type | (Required when Relationships_Organization_Id is mapped) Specifies the organization relationship type. The organization is not assigned unless this type is set. |
Dynamic Formula | return await GetProductTaxCodeIdByTaxCodeAsync("TAXABLE_ITEMS"); | Relationships_TaxCode_Id | Resolves the product tax code ID from the tax code. Placeholder value — replace during implementation: substitute "TAXABLE_ITEMS" with your own OroCommerce product tax code. |
Static | productdescriptions | Relationships_Descriptions_Type | (Required when Relationships_Descriptions_Ids is mapped) Specifies the description relationship type. The description is not assigned unless this type is set. |
Static | productshortdescriptions | Relationships_ShortDescriptions_Type | (Required when Relationships_ShortDescriptions_Ids is mapped) Specifies the short description relationship type. The short description is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_ShortDescriptions_Ids | (Optional) Provides one or more localized product short descriptions with default localization. Including a single item is recommended. |
Dynamic Formula |
| Relationships_SlugPrototypes_Ids | (Optional) Generates a URL-safe slug from the product name, keeping only Latin letters, digits, and the symbols hyphen, period, underscore, and tilde, and replacing any other character with an underscore. Returned as a localized list. |
Static | localizedfallbackvalues | Relationships_SlugPrototypes_Type | (Required when Relationships_SlugPrototypes_Ids is mapped) Specifies the slug prototype relationship type. The slug prototype is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaTitles_Type | (Required when Relationships_MetaTitles_Ids is mapped) Specifies the meta title relationship type. The meta title is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaKeywords_Type | (Required when Relationships_MetaKeywords_Ids is mapped) Specifies the meta keyword relationship type. The meta keyword is not assigned unless this type is set. |
Static | localizedfallbackvalues | Relationships_MetaDescriptions_Type | (Required when Relationships_MetaDescriptions_Ids is mapped) Specifies the meta description relationship type. The meta description is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_MetaDescriptions_Ids | (Optional) Provides one or more localized meta descriptions used for SEO, with default localization. Including a single item is recommended. |
Dynamic Formula |
| Relationships_MetaTitles_Ids | (Optional) Provides one or more localized meta titles used for SEO, with default localization. Including a single item is recommended. |
Dynamic Formula |
| Relationships_MetaKeywords_Ids | (Optional) Provides one or more localized meta keywords used for SEO, with default localization. Including a single item is recommended. |
Static | entityfieldfallbackvalues | Relationships_PageTemplate_Type | (Required when Relationships_PageTemplate_Id is mapped) Specifies the page template relationship type. The page template is not assigned unless this type is set. |
Static | systemConfig | Relationships_PageTemplate_Id | (Optional) Sets the fallback Page Template style used to display the product in the storefront. |
Static | 1 | Relationships_DecrementQuantity_ScalarValue | (Optional) Sets the decrement-quantity scalar value, where 1 means Yes and 0 means No. Defines the strategy used for decrementing inventory on ordered products. |
Static | 1 | Relationships_ManageInventory_ScalarValue | (Optional) Sets the manage-inventory scalar value, where 1 means "On order submission in the default checkout flow" and 0 means "No (custom)". Defines whether inventory is managed for the product. |
Static | 0 | Relationships_BackOrder_ScalarValue | (Optional) Sets the backorder scalar value, where 1 means Yes and 0 means No. The backorder flag controls whether a product can be ordered while out of stock or low on inventory; such orders ship once the product is restocked. |
Static | entityfieldfallbackvalues | Relationships_ManageInventory_Type | (Required when Relationships_ManageInventory_Id is mapped) Specifies the manage inventory relationship type. The manage inventory flag is not assigned unless this type is set. |
Static | entityfieldfallbackvalues | Relationships_BackOrder_Type | (Required when Relationships_BackOrder_Id is mapped) Specifies the backorder relationship type. The backorder flag is not assigned unless this type is set. |
Static | productshippingoptions | Relationships_ProductShippingOptions_Type | (Required when any shipping-option data is provided) Specifies the product shipping options type. This type, together with the Primary Unit Precision ID, must be set or the shipping options are not applied, even when individual weight or dimension values are mapped. |
Dynamic Formula | return await GetWeightUnitIdByShortCodeAsync("kg"); | Relationships_ProductShippingOptions_WeightUnit | (Required when Relationships_ProductShippingOptions_WeightValue is mapped) Resolves the OroCommerce weight unit ID by short code; returns null if no match is found. The weight value is not assigned unless this unit is set. Placeholder value — replace during implementation: substitute "kg" with your own OroCommerce weight unit short code. |
Field | Weight | Relationships_ProductShippingOptions_WeightValue | (Optional) Maps the product weight to the OroCommerce shipping option weight. |
Static | entityfieldfallbackvalues | Relationships_DecrementQuantity_Type | (Required when Relationships_DecrementQuantity_Id is mapped) Specifies the decrement quantity relationship type. The decrement quantity flag is not assigned unless this type is set. |
Dynamic Formula |
| Relationships_Descriptions_Ids | (Optional) Provides one or more localized product descriptions with default localization. Including a single item is recommended. |
Static | prodinventorystatuses | Relationships_InventoryStatus_Type | (Required) Specifies the inventory status relationship type. |
Field | Height | Relationships_ProductShippingOptions_DimensionHeight | (Optional) Maps the product height to the OroCommerce shipping option height. |
Field | Depth | Relationships_ProductShippingOptions_DimensionLength | (Optional) Maps the product depth to the OroCommerce shipping option length. |
Field | Width | Relationships_ProductShippingOptions_DimensionWidth | (Optional) Maps the product width to the OroCommerce shipping option width. |
Dynamic Formula |
| Relationships_Category_Id | (Optional) Resolves the OroCommerce catalog category ID by title, using the last category in the iPaaS.com Categories collection; returns null if no match is found. |
Static | categories | Relationships_Category_Type | (Required when Relationships_Category_Id is mapped) Specifies the category relationship type. The category is not assigned unless this type is set. |
Static | brands | Relationships_Brand_Type | (Required when Relationships_Brand_Id is mapped) Specifies the brand relationship type. The brand is not assigned unless this type is set. |
Static | USD | DefaultPricing_Attributes_Currency | (Required for default pricing) Maps a valid currency code for the product's default pricing. Placeholder value — replace during implementation: substitute "USD" with your own currency code. |
Static | productprices | DefaultPricing_Type | (Required for default pricing) Specifies the product prices relationship type. |
Static | 1 | DefaultPricing_Attributes_Quantity | (Required for default pricing) Sets the default-pricing quantity. Required when default pricing is configured. |
Static | pricelists | DefaultPricing_Relationships_PriceList_Type | (Required for default pricing) Specifies the price list relationship type. |
Field | DefaultPrice | DefaultPricing_Attributes_Value | (Required for default pricing) Maps the default price value. Required when default pricing is configured. |
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 the product unit by label; defaults to "each" if the unit is missing or cannot be matched. |
Dynamic Formula | string priceListId = await GetPriceListIdByNameAsync("Default Price List"); | DefaultPricing_Relationships_PriceList_Id | (Required for default pricing) Resolves the OroCommerce Price List ID from the configured Price List name. If no matching Price List exists, the product cannot be updated and the process raises an error, ensuring default pricing is always tied to a valid Price List. Placeholder value — replace during implementation: substitute "Default Price List" with your own OroCommerce price list name. |
Static | productunits | DefaultPricing_Relationships_Unit_Type | (Required for default pricing) Specifies the product units relationship type. |
Field | SalePrice | DefaultPricing_SalePrice | (Recommended) Maps the product sale price from iPaaS.com to the default price list entry in OroCommerce. Used to set the product's price when default pricing is configured for the integration. Leave unmapped if prices are managed exclusively through the Bulk Price flow. |
Dynamic Formula | return await GetLengthUnitIdByShortCodeAsync("m"); | Relationships_ProductShippingOptions_DimensionUnit | (Required when any dimension value is mapped) Resolves the OroCommerce dimension unit ID by short code; returns null if no match is found. The dimension values (length, height, width) are not assigned unless this unit is set. Placeholder value — replace during implementation: substitute "m" with your own OroCommerce dimension unit short code. |
Static | true | Attributes_Featured | (Optional) Specifies whether the product is featured. Set to "true" or "false". |
Dynamic Formula | return await GetProductBrandIdByNameAsync("Default ltd."); | Relationships_Brand_Id | (Optional) Resolves the OroCommerce product brand ID by name; returns null if no match is found. Placeholder value — replace during implementation: substitute "Default ltd." with your own OroCommerce brand name. |
Static | true | Attributes_NewArrival | (Optional) Specifies whether the product is a new arrival. Set to "true" or "false". |
Error Handling
Product can not be created because incorrect price list name is provided through mappings for the default pricing creation — The price list name configured in the DefaultPricing_Relationships_PriceList_Id formula does not match a price list in OroCommerce. Verify that the price list exists in OroCommerce and update the formula with the correct name. This message appears on the Add collection.
Product can not be updated because incorrect price list name is provided through mappings for the default pricing update — The price list name configured in the DefaultPricing_Relationships_PriceList_Id formula does not match a price list in OroCommerce on update. Verify the price list name and update the formula. This message appears on the Update collection.
Duplicate SKU — Creating a product whose SKU already exists in OroCommerce can fail or create a conflict. Enable collision handling on the mapping collection through the subscription settings.
Missing relationship type — A relationship ID was mapped without its paired Type field, so the relationship is not assigned. Ensure both the ID and Type fields are mapped for each relationship (for example, Relationships_Owner_Id and Relationships_Owner_Type).
Default-pricing custom field not configured — Default pricing requires a boolean custom field on the Product Price entity referenced by the "Default Pricing Custom Field Name" subscription preset. If it is missing or not of type boolean, the integration raises a descriptive exception. The product itself is still created or updated and its external ID is saved; correct the pricing configuration and re-run if needed.
Validation Rules
Relationship type validation: A relationship is included in the request only when both its ID field and its paired Type field are mapped. If the Type field is not provided, the ID field is not used. This applies to all relationship fields.
Status validation: The product Status resolves to "enabled" only for source statuses "Active" and "Preorder"; every other value resolves to "disabled".
Unit fallback: When the source Unit cannot be matched to an OroCommerce product unit, the integration uses "each".
Default pricing validation: Before default pricing is created or updated, the price value, quantity, currency, price list, and unit must be present, and the configured default-pricing custom field must exist on the Product Price entity and be of type boolean.
Testing and Validation
Test Scenarios
Create a simple product: Sync a new product from iPaaS.com with Tracking Method "Product" and no kit components. The product should be created in OroCommerce and the OroCommerce Product ID saved as the external ID in iPaaS.com.
Update an existing simple product: Update a previously transferred product in iPaaS.com. The changes should be reflected in OroCommerce without creating a duplicate.
Default pricing: Map the default-pricing fields and confirm that a single default price is created on the configured price list, and that updating the price updates the same record rather than creating a second one.
Unmatched price list (failure case): Configure a price list name that does not exist in OroCommerce. The transfer should raise the price-list error, while the product record itself is still created or updated with its external ID saved.
Status mapping: Transfer products with various source statuses and confirm that only "Active" and "Preorder" produce enabled products.
Duplicate SKU (failure case): Attempt to transfer a product whose SKU already exists in OroCommerce with the collision handling method set to Error. The transfer should report a conflict error rather than create a duplicate. Set a different collision handling method to have the transfer continue as an update of the existing product. See Collision Handling for the available methods and behavior.
Missing relationship type (failure case): Map a relationship ID without its paired Type field (for example, Relationships_Owner_Id without Relationships_Owner_Type). The relationship should not be assigned, confirming that both the ID and the Type must be mapped for a relationship to be included.
Validation Checklist
All mandatory fields are mapped (Type, Attributes_Sku, Attributes_Status, Attributes_ProductType, the Attribute Family ID and Type, the Inventory Status ID and Type, the Names IDs and Type, and the Primary Unit Precision ID, Type, and Precision).
Every mapped relationship ID has its paired Type field mapped.
Referenced entities (Organization, Owner, Attribute Family, Inventory Status, Tax Code, Brand, Category) exist in OroCommerce.
The placeholder values in the dynamic formulas have been replaced with the subscriber's own OroCommerce values (attribute family code, organization, business unit, tax code, brand, weight and dimension units, currency, and price list name).
The price list referenced for default pricing exists in OroCommerce, and the default-pricing custom field is configured on the Product Price entity.
Custom fields exist in OroCommerce with matching names and types before they are mapped.
Collision handling is enabled if SKU conflicts are possible.
Additional Notes
Both collections carry the same 62 fields; they differ only by trigger event and the price-list validation message.
Localized list fields (Names, Descriptions, Short Descriptions, Meta Titles, Meta Descriptions, Meta Keywords, Slug Prototypes) should normally contain a single item unless multiple localizations are required.
Relationship Type fields are always required when the matching relationship ID is mapped.
Dynamic formulas should return a valid value; a null or invalid return for a required field can cause the transfer to fail.
Subscribers should validate status mapping, unit fallback, and case sensitivity of resolved names and codes in a staging environment before relying on them in production.
