Skip to main content

OroCommerce Simple Product From iPaaS.com Mapping Documentation

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

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.

  1. Navigate to Entity Management: In OroCommerce, 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 products, select Product. For a default-pricing custom field, select Product Price.

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

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

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

  1. Add OroCommerce Simple Product FROM iPaaS.com (creates simple products)

  2. Update OroCommerce Simple Product FROM iPaaS.com (updates simple products)

  3. Add OroCommerce Configurable Product FROM iPaaS.com (creates configurable products)

  4. Update OroCommerce Configurable Product FROM iPaaS.com (updates configurable products)

  5. Add OroCommerce Kit Product FROM iPaaS.com (creates kit products)

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

  1. A product is created or updated in iPaaS.com with Tracking Method "Product" and no kit components.

  2. The mapping filter confirms the product qualifies as a simple product.

  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 to their OroCommerce internal IDs through lookup translations and helper functions.

  5. Product attributes are mapped (SKU, Status, Product Type "simple", Featured, New Arrival).

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

  7. The product is created (Add collection) or updated (Update collection) through the OroCommerce Product API.

  8. If default-pricing fields are mapped, the integration validates the pricing configuration and creates or updates the product's default price.

  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

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

return new List<string> { 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 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

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

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

return new List<string> { Description };

Relationships_Descriptions_Ids

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

Dynamic Formula

return new List<string> { Description };

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

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

Relationships_SlugPrototypes_Ids

(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

return new List<string> { "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.

Dynamic Formula

return new List<string> { "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.

Dynamic Formula

return new List<string> { "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

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

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

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");
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.

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

return new List<string> { Name };

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

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

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

return new List<string> { Description };

Relationships_ShortDescriptions_Ids

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

Dynamic Formula

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

Relationships_SlugPrototypes_Ids

(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

return new List<string> { "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.

Dynamic Formula

return new List<string> { "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.

Dynamic Formula

return new List<string> { "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

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

return new List<string> { Description };

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

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

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");
if(!string.IsNullOrWhiteSpace(priceListId)) return priceListId;
throw new Exception("Product can not be updated because incorrect price list name is provided through mappings for the default pricing update");

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.

Related Documents

Did this answer your question?