Skip to main content

OroCommerce Configurable Product From iPaaS.com Mapping Documentation

OroCommerce Configurable Product From iPaaS.com Mapping Documentation

When a variant product is created or updated in iPaaS.com with TrackingMethod = Variant and at least one variant, the corresponding product is created or updated in OroCommerce as a configurable (parent) product, and each iPaaS.com variant is created or updated as a simple product of that configurable product. The variant option names and values are also carried across so that each variant is selectable in the storefront. This integration runs FROM iPaaS.com TO OroCommerce on the Create and Update triggers and keeps the configurable parent, its variants, and their selectable options synchronized.

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. The integration resolves the variant hierarchy from that parent product.

  • Example: 197689

External ID Format

The OroCommerce Product ID is saved as the external ID on the iPaaS.com record once the transfer succeeds.

  • Example: 288

For variant records (simple products of a configurable product) and variant options, the integration stores child external ids using a composite format that combines the child id with its parent id, in the form <childId>|<parentId>. This lets the integration locate the correct child under its parent on subsequent updates.

Custom Field Support

This flow supports custom fields. To map data from iPaaS.com into a custom field in OroCommerce, follow these steps.

  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 (for example, Product).

  3. Create a Custom Field: Click Create Field and configure the following 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".

  4. Update the Schema: After creating a Table Column field, 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 Field Configuration: Once the schema update is complete (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.

OroCommerce uses OAuth 2.0 authentication to generate an access token, which authorizes all OroCommerce API requests during transfer operations. Store credentials securely within the iPaaS.com credential manager.

Mapping Collection Status

  • Status: Enabled

  • Trigger Events: Create, Update

The configurable product flow is enabled and runs on both the Create and Update triggers. The Add collections run when a qualifying variant product is created in iPaaS.com; the Update collections run when one is updated. A product only enters this flow when its mapping filter passes (see each Mapping Filter below).

Duplicate or Conflicting Mappings

This integration includes several product collections that all write to the same OroCommerce Product entity. They are separated by their mapping filters so that each product is handled by exactly one flow based on its iPaaS.com tracking method and structure. The configurable product flow applies only to products where TrackingMethod = Variant with at least one variant. The following sibling collections handle the other product shapes:

  1. Add OroCommerce Simple Product FROM iPaaS.com

  2. Update OroCommerce Simple Product FROM iPaaS.com

  3. Add OroCommerce Kit Product FROM iPaaS.com

  4. Update OroCommerce Kit Product FROM iPaaS.com

Because all of these collections target the same Product entity, they are separated by their filters so a given product is handled by exactly one flow.

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 an incoming SKU already exists in OroCommerce — both the configurable product's own SKU and each variant's SKU are checked. The integration finds the existing OroCommerce product by SKU and reuses its ID so the transfer continues as an update 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

This flow models the OroCommerce configurable→variant→options hierarchy across a parent collection and two levels of child collections:

  1. Parent — Configurable Product: Add OroCommerce Configurable Product FROM iPaaS.com and Update OroCommerce Configurable Product FROM iPaaS.com. Creates or updates the configurable (parent) product that groups the variants.

  2. Child — Simple Product of Configurable Product (the variant): Add OroCommerce Simple Product of Configurable Product FROM iPaaS.com and Update OroCommerce Simple Product of Configurable Product FROM iPaaS.com. Creates or updates each iPaaS.com variant as a simple product linked to its configurable parent.

  3. Child — Simple Product Variant Options: Add OroCommerce Simple Product Variant Options FROM iPaaS.com and Update OroCommerce Simple Product Variant Options FROM iPaaS.com. Carries each variant's option name and value (for example, Color → Red) so the variant is selectable under the configurable product.

The parent collection creates the configurable product. For each variant on the iPaaS.com product, the variant child collection creates a simple product and links it to the configurable parent; the variant options child collection then supplies the option name and value that distinguish that variant.

OroCommerce Caveats

  • Dynamic Relationship Resolution: Certain relationship fields — such as Organization, Owner, Attribute Family, Inventory Status, Tax Code, Brand, and Category — must already exist in OroCommerce before they can be used. The integration resolves these relationships dynamically, using lookup translations or helper functions to retrieve the corresponding internal IDs from the entity's name, code, or other mapped fields.

  • Dynamic Relationship Creation: The following relationships are created dynamically through the OroCommerce Product API using the included object: Names, Descriptions, Short Descriptions, Slug Prototypes, Meta Titles, Meta Descriptions, Meta Keywords, Unit Precisions, Primary Unit Precision, Product Shipping Options, Page Template, Manage Inventory, Inventory Threshold, Low Inventory Threshold, Highlight Low Inventory, Minimum Quantity to Order, Maximum Quantity to Order, Backorder, Decrement Quantity, Is Upcoming, and Variant Links. These fields are included only if they are mapped.

  • Relationship Type pairing: Each relationship ID requires its matching relationship Type field. If the Type field is not provided, the ID is not used in the request.

  • Variant attributes must be pre-defined: Each variant option name and value must already exist as OroCommerce product attributes and be assigned to the product family before the variant options transfer; otherwise the variant options collection raises an error (see its Mapping Filter).

  • Status values are case-sensitive: OroCommerce supports only the product status values "enabled" and "disabled".

iPaaS.com Caveats

  • The source product must have TrackingMethod = Variant and at least one variant for the configurable flow to apply.

  • Required product fields must be present: Type, Attributes_Sku, Attributes_Status, Attributes_ProductType, Relationships_AttributeFamily (Id and Type), Relationships_InventoryStatus (Id and Type), Relationships_Names (Ids and Type), and Relationships_PrimaryUnitPrecision (Id, Type, and Precision).

  • Several dynamic formulas use example OroCommerce values (such as a business unit, organization, attribute family code, tax code, brand, currency, and price list name). Each subscriber must replace these with values that exist in their own OroCommerce instance. See the placeholder callouts in the Mappings tables below.

Setup Requirements

  • OroCommerce: The referenced Organization, Business Unit (Owner), Attribute Family, Inventory Status, Tax Code, Brand, Category, Price List, and Product Units must exist before product creation. The variant option attributes must exist and be assigned to the product family.

  • iPaaS.com: Map the required product fields and configure the OroCommerce subscription credentials.

  • Authentication: OroCommerce uses OAuth 2.0 (Authorization Code) to generate an access token used for all API requests during transfers.

Integration Flow

The integration processes iPaaS.com variant products as follows:

  1. A product is created or updated in iPaaS.com with TrackingMethod = Variant and at least one variant.

  2. The mapping filter confirms the product qualifies as a configurable product (variant tracking with one or more variants).

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

  4. Required relationship entities (Organization, Owner, Attribute Family, Inventory Status, Tax Code, Brand, Category) are resolved through dynamic lookups.

  5. The configurable (parent) product is created or updated through the OroCommerce Product API with Attributes_ProductType = configurable.

  6. For each iPaaS.com variant, a simple product is created or updated through the variant child collection and linked to the configurable parent (Attributes_ProductType = simple). The variant's name and slug are derived from the parent product name combined with the variant's option values.

  7. For each variant, the variant options child collection supplies the option name and value so the variant is selectable under the configurable product.

  8. If default pricing mappings are provided, pricing is validated against the configured Price List and created.

  9. The OroCommerce Product ID is saved as the external ID in iPaaS.com.

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

Mappings

Parent: OroCommerce Configurable Product Add / Update FROM iPaaS.com

This mapping collection creates (Add OroCommerce Configurable Product FROM iPaaS.com) and updates (Update OroCommerce Configurable Product FROM iPaaS.com) the configurable parent product in OroCommerce from iPaaS.com data. It applies only to products where TrackingMethod = Variant that contain at least one variant. The mapping ensures that organizational structure, product units, tax code, related financial attributes, and other product data are correctly associated, maintaining consistent updates within OroCommerce. The Add and Update collections share the same field mappings; only minor cosmetic differences exist in a few formula bodies (a leading comment or whitespace), with no difference in behavior.

Mapping Filter

TrackingMethod == "Variant" && Variants?.Count > 0

Filter Description. This filter ensures only variant-style products are processed by the configurable flow. A product passes when its TrackingMethod is "Variant" and it has one or more variants; products that are not variant-tracked, or that have no variants, are skipped here and handled by the Simple or Kit product collections instead.

Mapping Type

Source Field (iPaaS.com)

Destination Field (OroCommerce)

Description

Lookup Translation

Lookup Translation: Product Inventory Status From iPaaS.com

Relationships_InventoryStatus_Id

(Required) Maps the inventory status using the lookup translation table.

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.

Dynamic Formula

return new List

{ Name };

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 ValidateAndUpdateProductSku(Sku);

Attributes_Sku

(Required) Validates the product SKU, removing any special characters except underscores and hyphens and replacing whitespace with underscores. Returns null if the SKU is invalid.

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 the product unit by label; defaults to each if the unit is missing or cannot be matched.

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

configurable

Attributes_ProductType

(Required) Sets the product type in OroCommerce. For the configurable parent this is "configurable".

Static

productunitprecisions

Relationships_PrimaryUnitPrecision_Type

(Required) Specifies the primary unit precision relationship type.

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

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.

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.

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

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

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

return new List

{ Description };

Relationships_ShortDescriptions_Ids

(Optional) Provides one or more localized product short descriptions with default localization. Including a single item is recommended.

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.

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

{ normalizedSlug };

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_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

return new List

{ "Meta Title: " + Name }

Relationships_MetaTitles_Ids

(Optional) Provides one or more localized meta titles used for SEO, with default localization. Including a single item is recommended.

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.

Dynamic Formula

return new List

{ "Meta Desc: " + Description }

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.

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.

Dynamic Formula

return new List

{ "Meta Keyword: " + TrackingMethod + " " + Name.Split()[0] }

Relationships_MetaKeywords_Ids

(Optional) Provides one or more localized meta keywords used for SEO, with default localization. Including a single item is recommended.

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_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

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 unit, weight value, dimension unit, dimension length, dimension width, dimension height, and primary unit precision ID values are mapped.

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 the weight unit short code used in your OroCommerce instance.

Field

Weight

Relationships_ProductShippingOptions_WeightValue

(Optional) Maps the product weight to the OroCommerce shipping option weight.

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.

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 the dimension unit short code used in your OroCommerce instance.

Static

true

Attributes_Featured

(Optional) Specifies whether the product is featured. Set to true or false.

Field

Width

Relationships_ProductShippingOptions_DimensionWidth

(Optional) Maps the product width to the OroCommerce shipping option width.

Static

true

Attributes_NewArrival

(Optional) Specifies whether the product is a new arrival. Set to true or false.

Dynamic Formula

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

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.

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

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

productprices

DefaultPricing_Type

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

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

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 the currency code used in your OroCommerce instance.

Field

DefaultPrice

DefaultPricing_Attributes_Value

(Required for default pricing) Maps the default price value. Required when default pricing is configured for the product.

Static

1

DefaultPricing_Attributes_Quantity

(Required for default pricing) Sets the default-pricing quantity. Required when default pricing is configured.

Dynamic Formula

string priceListId = await GetPriceListIdByNameAsync("Default Price List");
if(!string.IsNullOrWhiteSpace(priceListId))
return priceListId;
throw new Exception("Product can not be created because incorrect price list name is provided through mappings for the default pricing creation");

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

productunits

DefaultPricing_Relationships_Unit_Type

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

Static

pricelists

DefaultPricing_Relationships_PriceList_Type

(Required for default pricing) Specifies the price list relationship type. Required when default pricing is configured for the product.

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.

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 price when default pricing is configured. Leave unmapped if prices are managed exclusively through the Bulk Price flow.

Static

products

Type

(Required) Specifies the record type.

Static

prodinventorystatuses

Relationships_InventoryStatus_Type

(Required) Specifies the inventory status relationship type.

Dynamic Formula

return new List

{ Description };

Relationships_Descriptions_Ids

(Optional) Provides one or more localized product descriptions with default localization. Including a single item is recommended.

Dynamic Formula

if(Status == "Active"

Status == "Preorder")
return "enabled";
else
return "disabled";

Static

0

Relationships_PrimaryUnitPrecision_Precision

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

Lookup Translation Tables

The Relationships_InventoryStatus_Id mapping uses the Product Inventory Status From iPaaS.com lookup translation, which maps OroCommerce inventory-status values to the corresponding iPaaS.com values. Review the live translation collection in your subscription for the current source-to-destination value pairs before relying on it in production.

Source Value

Destination Value

Notes

(See live translation collection)

(See live translation collection)

The Product Inventory Status From iPaaS.com translation maps OroCommerce inventory-status values to iPaaS.com values. Review the live translation collection in your subscription for the current pairs.

Child: OroCommerce Simple Product of Configurable Product (Variant) Add / Update FROM iPaaS.com

This child collection creates (Add OroCommerce Simple Product of Configurable Product FROM iPaaS.com) and updates (Update OroCommerce Simple Product of Configurable Product FROM iPaaS.com) each iPaaS.com variant as a simple product linked to its configurable parent. It shares the configurable parent's product fields, with the key differences that Attributes_ProductType is "simple", and the variant name, short description, description, slug, and unit are derived from the parent product (the variant name and slug additionally incorporate each variant option value). The Add and Update collections share the same field mappings.

Mapping Filter

Kit == null || Kit.Components == null || Kit.Components.Count == 0

Filter Description. This filter ensures the variant is a simple product, not a kit. A record passes when it has no kit, or its kit has no components — in other words, the variant is an individual product without sub-items. Variants that carry kit components are excluded here.

Mapping Type

Source Field (iPaaS.com)

Destination Field (OroCommerce)

Description

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.

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 price when default pricing is configured. Leave unmapped if prices are managed exclusively through the Bulk Price flow.

Dynamic Formula

return await ValidateAndUpdateProductSku(Sku);

Attributes_Sku

(Required) Validates the product SKU, removing any special characters except underscores and hyphens and replacing whitespace with underscores. Returns null if the SKU is invalid.

Dynamic Formula

if(Status == "Active"

Status == "Preorder")
return "enabled";
else
return "disabled";

Static

simple

Attributes_ProductType

(Required) Sets the product type in OroCommerce. For variant products this is "simple".

Static

true

Attributes_Featured

(Optional) Specifies whether the product is featured. Set to true or false.

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.

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

true

Attributes_NewArrival

(Optional) Specifies whether the product is a new arrival. Set to true or false.

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

Lookup Translation

Lookup Translation: Product Inventory Status From iPaaS.com

Relationships_InventoryStatus_Id

(Required) Maps the inventory status using the lookup translation table.

Static

prodinventorystatuses

Relationships_InventoryStatus_Type

(Required) Specifies the inventory status relationship type.

Static

productnames

Relationships_Names_Type

(Required) Specifies the names relationship type.

Dynamic Formula


string concatedOptions = "";

if (Options != null && Options.Count > 0)
{
foreach (var op in Options)
{
if (op.Value != null)
{
concatedOptions += "-" + op.Value;
}
}
}

string parentDescription = Parent?.Name ?? "description";
string Names = $"{parentDescription}{concatedOptions}";

return Names;

Relationships_Names_Ids

(Required) Builds the variant product name by combining the parent product name with each variant option value. At least one name must always be provided.

Dynamic Formula

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

Relationships_PrimaryUnitPrecision_Id

(Required) Resolves the product unit by the parent product's unit label; defaults to each if the unit is missing or cannot be matched.

Static

productunitprecisions

Relationships_PrimaryUnitPrecision_Type

(Required) Specifies the primary unit precision relationship type.

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

0

Relationships_PrimaryUnitPrecision_Precision

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

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 new List

{ Parent.Description };

Relationships_ShortDescriptions_Ids

(Optional) Provides the variant short description from the parent product description, as a localized list. Including a single item is recommended.

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 unit, weight value, dimension unit, dimension length, dimension width, dimension height, and primary unit precision ID values are mapped.

Field

Weight

Relationships_ProductShippingOptions_WeightValue

(Optional) Maps the product weight to the OroCommerce shipping option weight.

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 the dimension unit short code used in your OroCommerce instance.

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 the weight unit short code used in your OroCommerce instance.

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.

Field

Height

Relationships_ProductShippingOptions_DimensionHeight

(Optional) Maps the product height to the OroCommerce shipping option height.

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

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.

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

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

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

brands

Relationships_Brand_Type

(Required when Relationships_Brand_Id is mapped) Specifies the brand relationship type for the variant. OroCommerce expects the literal resource type "brands" when associating a product with a brand.

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

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

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

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

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

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.

Dynamic Formula

string concatedOptions = "";


if (Options != null && Options.Count > 0)
{
foreach (var op in Options)
{
if (op.Value != null)
{
concatedOptions += "-" + op.Value;
}
}
}

string parentName = Parent?.Name ?? "product";
string slugName = $"{parentName}{concatedOptions}";

// Normalize iPaaS product's name to meet OroCommerce URL-safe requirements
string normalizedSlug = Regex.Replace(slugName, @"[^a-zA-Z0-9-.~]", "");

return new List

{ normalizedSlug };

Relationships_SlugPrototypes_Ids

(Optional) Generates a URL-safe slug by combining the parent product name with each variant option value, 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

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

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.

Dynamic Formula

return new List

{ "Meta Title: "}

Relationships_MetaTitles_Ids

(Optional) Provides a localized meta title used for SEO, with default localization. Including a single item is recommended.

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.

Dynamic Formula

return new List

{ "Meta Desc: " }

Relationships_MetaDescriptions_Ids

(Optional) Provides a localized meta description used for SEO, with default localization. Including a single item is recommended.

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

return new List

{ "Meta Keyword: " + Parent.TrackingMethod + " "}

Relationships_MetaKeywords_Ids

(Optional) Provides a localized meta keyword used for SEO, derived from the parent product's tracking method, with default localization. Including a single item is recommended.

Static

productprices

DefaultPricing_Type

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

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

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 the currency code used in your OroCommerce instance.

Static

1

DefaultPricing_Attributes_Quantity

(Required for default pricing) Sets the default-pricing quantity. Required when default pricing is configured.

Dynamic Formula

string priceListId = await GetPriceListIdByNameAsync("Default Price List");
if(!string.IsNullOrWhiteSpace(priceListId))
return priceListId;
throw new Exception("Product can not be created because incorrect price list name is provided through mappings for the default pricing creation");

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. Required when default pricing is configured for the product.

Dynamic Formula

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

DefaultPricing_Relationships_Unit_Id

(Required for default pricing) Resolves the product unit by the parent product's unit label; defaults to each if the unit is missing or cannot be matched.

Field

DefaultPrice

DefaultPricing_Attributes_Value

(Required for default pricing) Maps the default price value. Required when default pricing is configured for the product.

Static

productunits

DefaultPricing_Relationships_Unit_Type

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

Dynamic Formula

return new List

{ Parent.Description };

Relationships_Descriptions_Ids

(Optional) Provides the variant description from the parent product description, as a localized list. Including a single item is recommended.

Static

products

Type

(Required) Specifies the record type.

Child: OroCommerce Simple Product (Variant) Options Add / Update FROM iPaaS.com

This child collection carries each variant's option name and value from iPaaS.com to OroCommerce (Add OroCommerce Simple Product Variant Options FROM iPaaS.com and Update OroCommerce Simple Product Variant Options FROM iPaaS.com). It does not create new attribute definitions in OroCommerce; it transforms the iPaaS.com variant option data into the option name and value that make each variant selectable under its configurable parent. The Add and Update collections share the same field mappings.

Mapping Filter

var validated = await ValidateVariantOptionValue(OptionName, Value);
if(validated) {return true;}
else {throw new Exception($"Option \"{OptionName}\" and Value \"{Value}\" must be pre-defined in OroCommerce product attributes and assigned to the Product Family");}

Filter Description. This filter validates that the variant's option name and value already exist as OroCommerce product attributes and are assigned to the product family. If validation succeeds, the option passes. If it fails, the transfer raises an exception with the message Option "{OptionName}" and Value "{Value}" must be pre-defined in OroCommerce product attributes and assigned to the Product Family before the variant can be created.

Mapping Type

Source Field (iPaaS.com)

Destination Field (OroCommerce)

Description

Field

OptionName

Name

(Required) Maps the variant option name from iPaaS.com (for example, "Color" or "Size") to the option name on the OroCommerce variant. Identifies which product attribute the option value belongs to.

Field

Value

Value

(Required) Maps the variant option value from iPaaS.com (for example, "Red" or "Large") to the OroCommerce variant option. Together with the option name, this defines one selectable variant of a configurable product.

Error Handling

  • Duplicate SKU: Occurs when creating a product in OroCommerce with a SKU that already exists. Enable collision handling on the mapping collection so the existing product is matched and updated rather than rejected.

  • Option and Value must be pre-defined in OroCommerce product attributes and assigned to the Product Family: Raised by the variant options filter when a variant's option name or value does not exist as an OroCommerce product attribute assigned to the product family. Create the corresponding product attribute and option value in OroCommerce and assign it to the product family before retrying.

  • Missing relationship Type: Occurs when a relationship ID is mapped without its corresponding Type field. Map both the ID and Type for every relationship (for example, Relationships_Owner_Id and Relationships_Owner_Type).

  • Product can not be created because incorrect price list name is provided: Raised when the configured Price List name does not exist in OroCommerce during default-pricing creation. Verify the Price List name exists in OroCommerce and update the mapping accordingly.

Validation Rules

  • Relationship Type validation: A relationship ID is only included in the request when its matching Type field is also mapped. If the Type is missing, the ID is ignored.

  • Variant attribute validation: Each variant option name and value must already exist as an OroCommerce product attribute and be assigned to the product family before the variant options transfer.

  • Status validation: The product status must resolve to "enabled" or "disabled"; source statuses Active and Preorder map to enabled, and all other statuses map to disabled.

Testing & Validation

Test Scenarios

  • Create configurable product with variants: Sync a new product from iPaaS.com with TrackingMethod = Variant and at least one variant. A configurable product is created in OroCommerce with each variant as a linked simple product, and the OroCommerce Product ID is saved as the external ID in iPaaS.com.

  • Update configurable product: Update an existing variant product in iPaaS.com. Changes are reflected on the configurable parent and its variants in OroCommerce without creating duplicates.

  • Variant options: Create a variant whose option name and value already exist as OroCommerce product attributes assigned to the product family. The variant becomes selectable under the configurable product.

  • Variant options not pre-defined (failure case): Attempt to transfer a variant whose option name or value is not defined in OroCommerce. The transfer fails with the variant-option validation error.

Validation Checklist

  • The source product has TrackingMethod = Variant and at least one variant.

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

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

  • Referenced entities exist in OroCommerce (Organization, Owner, Attribute Family, Inventory Status, Tax Code, Brand, Category, Price List, Product Units).

  • All placeholder example values in the dynamic formulas have been replaced with values from the target OroCommerce instance.

  • Each variant option name and value exists as an OroCommerce product attribute assigned to the product family.

  • Collision handling is configured if SKU conflicts are possible.

Additional Notes

  • The Add and Update collections in each pair share the same field mappings; the only differences are cosmetic (a leading comment or whitespace in a few formula bodies) and do not change behavior.

  • The configurable parent uses Attributes_ProductType = configurable; each variant uses Attributes_ProductType = simple.

  • Variant names and slugs are derived from the parent product name combined with each variant's option values; variant descriptions and units are taken from the parent product.

  • Relationship Type fields are always required when their matching relationship ID is mapped.

  • It is recommended to include only one item in localized lists (Names, Descriptions, Meta Titles, and similar) unless multiple localizations are required.

  • Contact your OroCommerce administrator before updating entity schemas to prevent service downtime.

Related Documents

Did this answer your question?