Skip to main content

Shopware B2B Company From iPaaS.com Mapping Documentation

How B2B companies, addresses, and employee relationships are written from iPaaS.com into Shopware (add and update).

Summary

This documentation covers the B2B Company family that transfers company data from iPaaS.com into Shopware, together with each company's addresses and B2B employees. The flow is split into two complementary halves: an Add parent that creates new B2B companies, and an Update parent that maintains existing, linked companies. Each parent processes the company's addresses and B2B employees through dedicated child collections. B2B Company records, their addresses, and their employees are provided by the Shopware Commercial (B2B Suite) extension, so this entire family requires that extension to write data into Shopware.

ID Format

Manual Sync ID Format

A company transfer is initiated from iPaaS.com against the target Shopware subscription. The company is identified by its iPaaS.com company record Id, for example 12345. The same Id is written to the Shopware company's customer number so the company stays identifiable across both platforms. The address and B2B employee child collections do not run on their own; they execute as part of the parent company transfer.

External ID Format

After a successful transfer, the integration links the iPaaS.com record to the Shopware record it created or updated:

  • A B2B company is linked under the Company external-id entity.

  • A company address is linked using a composite external ID built from the address ID and its parent customer ID, so the address stays associated with the correct company across transfers.

  • A B2B employee relationship is linked under the Company Relationship external-id entity.

The Update parent additionally inspects the company's existing Company external id to decide whether the record is eligible for update (see the Update parent's Mapping Filter).

Deleted Record Support

This family does not propagate deletions. No Delete collection ships with the B2B Company From iPaaS.com family, so removing a company, address, or employee in iPaaS.com does not delete the corresponding record in Shopware. Subscribers or their MiSP who need to remove records in Shopware should do so directly in Shopware.

Custom Field Support

The company address child collections support iPaaS.com custom fields. Subscribers or their MiSP can map additional iPaaS.com address values to Shopware custom fields where needed. The recipient first- and last-name resolution reads from First Name and Last Name custom fields when they are present, using the GetCustomFieldValue conversion function. Several parent and employee mappings also read iPaaS.com custom fields (First Name, Last Name, Sales Channel ID, Language ID) with GetCustomFieldValue before applying their fallbacks.

Mapping Collection Status

  • B2B Company FROM iPaaS.com - Add: Enabled

  • B2B Company Address FROM iPaaS.com (Add child): Enabled

  • B2B Company Relationship (B2B-Employee) FROM iPaaS.com (Add child): Enabled

  • B2B Company FROM iPaaS.com - Update: Enabled

  • B2B Company Address FROM iPaaS.com (Update child): Enabled

  • B2B Company Relationship (B2B-Employee) FROM iPaaS.com (Update child): Enabled

Trigger Events

  • The Add and Update parent collections are triggered when an iPaaS.com company transfer targets this Shopware subscription (through an Outbound Data Flow, or by Manual Sync from iPaaS.com).

  • The Add parent creates a B2B company; the Update parent updates an existing, linked, non-subsidiary company.

  • The address and B2B employee child collections have no independent trigger — they run automatically as part of their parent company transfer.

Duplicate or Conflicting Mappings

The Add and Update parents are complementary halves of the same FROM flow, not conflicting collections. The Add parent creates new B2B companies, while the Update parent maintains companies that are already linked to Shopware and are not subsidiaries. Together they cover the full create-and-maintain lifecycle for inbound company data; the Update parent's filter keeps new (unlinked) companies on the Add path and excludes subsidiary companies.

The following collections operate on the same entities in the opposite direction (Shopware → iPaaS.com):

  • Add/Update Shopware B2B Company TO iPaaS.com: Transfers B2B companies from Shopware to iPaaS.com.

  • Add/Update Shopware B2B Company Address TO iPaaS.com: Transfers B2B company addresses from Shopware to iPaaS.com.

  • Shopware B2B Company Relationship TO iPaaS - (B2B-Employee): Transfers Shopware B2B employee relationships to iPaaS.com.

Important: Before enabling these inbound "FROM iPaaS.com" collections alongside the outbound "TO iPaaS.com" collections, review and customize your mapping collection filters to prevent circular updates. Define clearly which system is the source of truth for company, address, and employee data. If both directions are active with default mappings, changes may propagate back and forth between systems.

Supported Child Collections

The Add parent and the Update parent each have two children:

  • B2B Company Address FROM iPaaS.com (Customer Company Address): Creates (Add parent) or maintains (Update parent) the company's addresses in Shopware as part of the company transfer. Each address is linked using a composite external ID built from the address ID and its parent customer ID.

  • B2B Company Relationship (B2B-Employee) FROM iPaaS.com (Company Relationship): Creates (Add parent) or updates (Update parent) the company's B2B employees in Shopware as part of the company transfer. Employee relationships are linked under the Company Relationship external-id entity. This child collection takes effect only when the Shopware Commercial (B2B Suite) extension is installed.

Shopware Caveats

  • B2B Suite required: B2B Company records, their addresses, and their employees are provided by the Shopware Commercial (B2B Suite) extension, not the stock Admin API. Subscribers must have that extension installed for this family to write data. The B2B component flags and the B2B employee child collection take effect only when the extension is installed; without it, the parent company transfer cannot run, so its addresses and employees are not written.

  • At least one employee is required to create a company: A B2B company is created only when it has at least one valid B2B employee relationship — an iPaaS.com Company Relationship of type Employee whose related customer has an email, first name, and last name. Employee Management must remain enabled so employees can be created and maintained.

  • Named records must exist: The default payment method, sales channel, customer group, and language are resolved from names as they appear in Shopware. Each named record referenced by a required field must exist in the target Shopware store, or company creation/update fails.

  • Address required fields: Shopware requires a recipient name, street, city, and country on every company address. If the country does not resolve to a Shopware country, the address write fails for that record.

  • State resolution assumes US addresses: The country-state (region) formula prefixes "US-" to a converted state abbreviation to meet Shopware's ISO state-code format. For non-US addresses the resulting short code may not resolve to a Shopware state, in which case the state is left unset on the address. Subscribers or their MiSP should validate non-US state resolution in a staging environment before relying on it in production.

iPaaS.com Caveats

  • Subsidiary companies are excluded from the Update path: The Update parent's filter skips companies whose Shopware link identifies them as subsidiary companies, so subsidiaries are not updated through this path. Only existing, linked, non-subsidiary companies are updated.

  • Custom-field driven values: The first name, last name, sales channel, and language are read from iPaaS.com custom fields (First Name, Last Name, Sales Channel ID, Language ID) when present, otherwise from their respective fallbacks. The named-language fallback accepts only Latin-character language names; for non-Latin languages, supply the Shopware language ID through the Language ID custom field.

  • Children cannot be triggered independently: As child collections, the address and B2B employee collections run only as part of a parent company transfer. They cannot be triggered independently from the Manual Sync page; transfer the parent company to write its addresses and employees into Shopware.

  • Throttle large jobs: When transferring a large volume of companies, subscribers or their MiSP should stagger large manual jobs and rely on the configured API throttle limits to avoid contention with the Shopware instance.

Setup Requirements

For automatic transfer, configure an Outbound Data Flow in iPaaS.com that delivers company records to this Shopware subscription. The B2B Company From iPaaS.com parent collections (Add and Update) subscribe to that flow; their address and B2B employee children run automatically as part of each parent transfer. Confirm the Shopware Commercial (B2B Suite) extension is installed before enabling the family, and replace the example named records (payment method, sales channel, customer group, language) in the mappings with names that exist in the target Shopware store.

Integration Flow

  1. An iPaaS.com company transfer is triggered against the Shopware subscription (Outbound Data Flow or Manual Sync).

  2. The integration routes the company to the Add parent (new, unlinked companies) or the Update parent (companies already linked to a non-subsidiary Shopware company), based on each parent's filter and the company's existing Company external id.

  3. The parent resolves the Shopware-specific identifiers a B2B company requires — default payment method, sales channel, customer group, and language — from iPaaS.com names, custom field values, and category names, and sets the B2B component flags and customer number.

  4. The B2B company record is created (Add) or updated (Update) in Shopware, and the iPaaS.com record is linked under the Company external-id entity.

  5. Each of the company's addresses is processed through the address child collection, resolving country and state from the iPaaS.com address data, and is linked using a composite external ID built from the address ID and its parent customer ID.

  6. Each qualifying employee relationship is processed through the B2B employee child collection, which looks up the related iPaaS.com customer and creates or updates the Shopware B2B employee, then links the relationship under the Company Relationship external-id entity.

Mappings

The Add parent and its two children are presented first, followed by the Update parent and its two children.

Add Shopware B2B Company FROM iPaaS.com

Creates a new B2B Company record in Shopware from an iPaaS.com company, resolving the Shopware identifiers it requires and setting the B2B component flags.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Field

Email Address

Email

required — the company's email address; Shopware's primary human-readable identifier for the record.

Field

Name

CompanyName

recommended — the company name; when omitted, the name is built from the contact's first and last name.

Dynamic Formula

Id

CustomerNumber

required — the Shopware customer number, set to the iPaaS.com record Id to guarantee uniqueness.

Dynamic Formula

First Name custom field, else Name

FirstName

required — the primary contact's first name; falls back to the first token of the company name.

Dynamic Formula

Last Name custom field, else Name

LastName

required — the primary contact's last name; falls back to the last token of the company name.

Dynamic Formula

Payment-method name lookup

DefaultPaymentMethodId

required — resolves the named Shopware payment method; the named method must exist or creation fails.

Dynamic Formula

Sales Channel ID custom field, else channel name

SalesChannelId

required — the Shopware sales channel; falls back to a named-channel lookup that must resolve.

Dynamic Formula

Language ID custom field, else language name

LanguageId

required — the Shopware language; falls back to a named-language lookup (Latin names only).

Dynamic Formula

First category name, else group name

GroupId

required — the Shopware customer group; derived from the first category, else a named-group fallback.

Static

"true"

B2B_EmployeeManagement

optional — enables Employee Management; must be enabled to create employees.

Static

"true"

B2B_OrderApproval

optional — enables Order Approval.

Static

"true"

B2B_QuickOrder

optional — enables Quick Order.

Static

"true"

B2B_QuoteManagement

optional — enables Quote Management.

FirstName formula:

var value = GetCustomFieldValue(CustomFields, "First Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return Name.Split().FirstOrDefault()

LastName formula:

var value = GetCustomFieldValue(CustomFields, "Last Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return Name.Split().LastOrDefault()

DefaultPaymentMethodId formula:

return await GetPaymentIdByName("PayPal");

Placeholder value — replace during implementation: "PayPal" is an example Shopware payment-method name. The named payment method MUST exist in Shopware; if it is not found, this required lookup returns nothing and company creation fails.

SalesChannelId formula:

var value = GetCustomFieldValue(CustomFields, "Sales Channel ID");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return await GetChannelIdByName("Snowboard Store");

Placeholder value — replace during implementation: "Snowboard Store" is an example Shopware sales-channel name used as the fallback. The named channel MUST exist in Shopware whenever the fallback is reached.

LanguageId formula:

var value = GetCustomFieldValue(CustomFields, "Language ID");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return await GetLanguageIdByName("English");

Placeholder value — replace during implementation: "English" is an example Shopware language name used as the fallback. The named-language fallback accepts only Latin-character language names; for non-Latin languages, supply the Shopware language ID through the Language ID custom field.

GroupId formula:

if(Categories != null && Categories.Count > 0){
    var groupId = await GetGroupIdByName(Categories[0].CategoryName);
    if(!string.IsNullOrEmpty(groupId))
        return groupId;
}
return await GetGroupIdByName("Club Member");

Placeholder value — replace during implementation: "Club Member" is an example Shopware customer-group name used as the fallback. The named group MUST exist in Shopware whenever the fallback is reached.

Add Shopware B2B Company Address FROM iPaaS.com

Writes each of the company's addresses into Shopware as part of the Add parent transfer, resolving country and state from the iPaaS.com address data.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Dynamic Formula

First Name custom field chain, else Parent.Name

FirstName

required — recipient first name; address custom field, then parent custom field, then parent name.

Dynamic Formula

Last Name custom field chain, else Parent.Name

LastName

required — recipient last name; address custom field, then parent custom field, then parent name.

Dynamic Formula

Country

CountryId

required — resolves the Shopware country from the address country; the write fails if it cannot resolve.

Dynamic Formula

Region

CountryStateId

optional — resolves the Shopware state from the address region; left unset if it cannot resolve.

Field

Address1

Street

required — the primary street line.

Field

City

City

required — the address city.

Field

PostalCode

ZipCode

recommended — the postal/ZIP code for deliverable addresses.

Field

Address2

AdditionalAddressLine1

optional — additional street line 1.

Field

Address3

AdditionalAddressLine2

optional — additional street line 2.

Field

IsPrimaryBilling

IsPrimaryBilling

optional — flags the address as the company's primary billing address.

Field

IsPrimaryShipping

IsPrimaryShipping

optional — flags the address as the company's primary shipping address.

Static

"test created"

address_id_test

optional — sample custom field carrying a test value (see placeholder note).

FirstName formula:

var value = GetCustomFieldValue(CustomFields, "First Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
else{
    value = GetCustomFieldValue(Parent.CustomFields, "First Name");
    if (!string.IsNullOrWhiteSpace(value))
        return value;
    return Parent.Name.Split().FirstOrDefault()
}

LastName formula:

var value = GetCustomFieldValue(CustomFields, "Last Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
else{
    value = GetCustomFieldValue(Parent.CustomFields, "Last Name");
    if (!string.IsNullOrWhiteSpace(value))
        return value;
    return Parent.Name.Split().LastOrDefault()
}

CountryId formula:

if(!string.IsNullOrWhiteSpace(Country)){
    if(Country.Length > 3)
        Country = CountryCode(Country);
    return await GetCountryIdByIso(Country);
}

CountryStateId formula:

if (!string.IsNullOrWhiteSpace(Region))
{
    Region = Region.Trim();
    if (Region.Length > 3 && !Region.Contains("-")) {
        Region = StateAbbreviation(Region);
        //Append "US-" to meet Shopware ISO standards
        Region = "US-"+Region;
        }
    var stateId = await GetStateIdByShortCode(Region);
    return stateId;
}

Placeholder value — replace during implementation: The static "test created" on the address_id_test sample custom field is an example/test value. Subscribers or their MiSP should replace it with a real mapped value or remove the mapping before going live.

Add Shopware B2B Company Relationship (B2B-Employee) FROM iPaaS.com

Creates B2B employees in Shopware from qualifying iPaaS.com company relationships as part of the Add parent transfer.

Mapping Filter

if(!string.IsNullOrEmpty(Type) && Type.ToLower() == "employee"){
    var companyRelationshipId = await GetExternalIdAsync(Id, "Company Relationship", SpaceportSystemId);
    if(!string.IsNullOrWhiteSpace(companyRelationshipId))
        return true;
    var email = await GetiPaaSCustomerData(RelatedToId, "Email");
    if(!string.IsNullOrWhiteSpace(email)){
        bool duplicateFound = await B2BEmployeeDuplicateCheck(email);
        if(!duplicateFound)
            return true;
        else
            throw new Exception(email + " this email has already been existed in Shopware as the B2B-Employee");
    }
}
return false;

Filter Description. Only employee relationships are processed: the relationship proceeds only when its Type (lowercased) is "employee"; relationships of any other type are skipped. For an employee relationship, the filter checks whether it is already linked to a Shopware B2B employee via GetExternalIdAsync for the Company Relationship entity — if a link exists, it proceeds. Otherwise it resolves the related iPaaS.com customer's email with GetiPaaSCustomerData and runs B2BEmployeeDuplicateCheck. If no Shopware B2B employee has that email, the relationship proceeds. If a B2B employee with that email already exists, the filter throws "<email> this email has already been existed in Shopware as the B2B-Employee" and the relationship fails rather than being silently skipped. Relationships with no resolvable email are skipped.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Dynamic Formula

Related customer FirstName

FirstName

required — the employee's first name, read from the related iPaaS.com customer.

Dynamic Formula

Related customer LastName

LastName

required — the employee's last name, read from the related iPaaS.com customer.

Dynamic Formula

Related customer Email

Email

required — the employee's email; also the key used to identify the employee and prevent duplicates.

Dynamic Formula

Language ID custom field, else language name

LanguageId

required — the employee's language; falls back to a named-language lookup.

Dynamic Formula

true

Active

optional — marks the new employee as active on creation.

FirstName formula:

return await GetiPaaSCustomerData(RelatedToId, "FirstName");

LastName formula:

return await GetiPaaSCustomerData(RelatedToId, "LastName");

Email formula:

return await GetiPaaSCustomerData(RelatedToId, "Email");

LanguageId formula:

var value = GetCustomFieldValue(CustomFields, "Language ID");
if (!string.IsNullOrWhiteSpace(value)){
return value;
}
return await GetLanguageIdByName("English");

Placeholder value — replace during implementation: the fallback language name "English" is an example default. It must be replaced with a language name that exists in the subscriber's Shopware instance, or the Language ID custom field should be supplied on the source record so the fallback is not needed. GetLanguageIdByName resolves only Latin-character names and returns nothing for a name it cannot find.

Update Shopware B2B Company FROM iPaaS.com

Updates an existing, linked, non-subsidiary B2B Company record in Shopware from an iPaaS.com company.

Mapping Filter

var companyId = await GetExternalIdAsync(Id, "Company", SpaceportSystemId);
if(!string.IsNullOrEmpty(companyId) && !companyId.Contains("_SubsidiaryCompany"))
    return true;
return false;

Filter Description. The filter restricts this collection to companies that should be updated. It looks up the company's existing Shopware link with GetExternalIdAsync for the Company entity. A company is updated only when a link exists and that link does not contain _SubsidiaryCompany. If the company has no Shopware link yet, it is skipped here and handled by the Add collection. If its link identifies it as a subsidiary company, it is skipped so subsidiaries are not updated through the standard company update path. The filter pins no environment-specific value.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Field

Name

CompanyName

recommended — the company name; when omitted, the name is built from the contact's first and last name.

Dynamic Formula

Id

CustomerNumber

required — keeps the Shopware customer number aligned with the iPaaS.com record Id.

Dynamic Formula

First Name custom field, else Name

FirstName

required — the primary contact's first name; falls back to the first token of the company name.

Dynamic Formula

Last Name custom field, else Name

LastName

required — the primary contact's last name; falls back to the last token of the company name.

Dynamic Formula

Payment-method name lookup

DefaultPaymentMethodId

required — resolves the named Shopware payment method; the named method must exist or the update fails.

Dynamic Formula

Sales Channel ID custom field, else channel name

SalesChannelId

required — the Shopware sales channel; falls back to a named-channel lookup that must resolve.

Dynamic Formula

Language ID custom field, else language name

LanguageId

required — the Shopware language; falls back to a named-language lookup (Latin names only).

Dynamic Formula

First category name, else group name

GroupId

required — the Shopware customer group; derived from the first category, else a named-group fallback.

Static

"true"

B2B_EmployeeManagement

optional — enables Employee Management; must be enabled to maintain employees.

Static

"true"

B2B_OrderApproval

optional — enables Order Approval.

Static

"true"

B2B_QuickOrder

optional — enables Quick Order.

Static

"true"

B2B_QuoteManagement

optional — enables Quote Management.

FirstName formula:

var value = GetCustomFieldValue(CustomFields, "First Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return Name.Split().FirstOrDefault()

LastName formula:

var value = GetCustomFieldValue(CustomFields, "Last Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return Name.Split().LastOrDefault()

DefaultPaymentMethodId formula:

return await GetPaymentIdByName("PayPal");

Placeholder value — replace during implementation: "PayPal" is an example Shopware payment-method name. The named payment method MUST exist in Shopware; if it is not found, this required lookup returns nothing and the company update fails.

SalesChannelId formula:

var value = GetCustomFieldValue(CustomFields, "Sales Channel ID");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return await GetChannelIdByName("Snowboard Store");

Placeholder value — replace during implementation: "Snowboard Store" is an example Shopware sales-channel name used as the fallback. The named channel MUST exist in Shopware whenever the fallback is reached.

LanguageId formula:

var value = GetCustomFieldValue(CustomFields, "Language ID");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
return await GetLanguageIdByName("English");

Placeholder value — replace during implementation: "English" is an example Shopware language name used as the fallback. The named-language fallback accepts only Latin-character language names; for non-Latin languages, supply the Shopware language ID through the Language ID custom field.

GroupId formula:

if(Categories != null && Categories.Count > 0){
    return await GetGroupIdByName(Categories[0].CategoryName);
}
return await GetGroupIdByName("Club Member");

Unlike the Add collection, this Update formula returns the first-category lookup directly. If the company has a category whose name does not match any Shopware customer group, the lookup returns nothing and the update fails. Subscribers or their MiSP should confirm each category name used on companies matches an existing Shopware customer-group name.

Placeholder value — replace during implementation: "Club Member" is an example Shopware customer-group name used as the fallback. The named group MUST exist in Shopware whenever the fallback is reached.

Update Shopware B2B Company Address FROM iPaaS.com

Writes each of the company's addresses into Shopware as part of the Update parent transfer, resolving country and state from the iPaaS.com address data.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Dynamic Formula

First Name custom field chain, else Parent.Name

FirstName

required — recipient first name; address custom field, then parent custom field, then parent name.

Dynamic Formula

Last Name custom field chain, else Parent.Name

LastName

required — recipient last name; address custom field, then parent custom field, then parent name.

Dynamic Formula

Country

CountryId

required — resolves the Shopware country from the address country; the write fails if it cannot resolve.

Dynamic Formula

Region

CountryStateId

optional — resolves the Shopware state from the address region; left unset if it cannot resolve.

Field

Address1

Street

required — the primary street line.

Field

City

City

required — the address city.

Field

PostalCode

ZipCode

recommended — the postal/ZIP code for deliverable addresses.

Field

Address2

AdditionalAddressLine1

optional — additional street line 1.

Field

Address3

AdditionalAddressLine2

optional — additional street line 2.

Field

IsPrimaryBilling

IsPrimaryBilling

optional — flags the address as the company's primary billing address.

Field

IsPrimaryShipping

IsPrimaryShipping

optional — flags the address as the company's primary shipping address.

Static

"test updated"

address_id_test

optional — sample custom field carrying a test value (see placeholder note).

FirstName formula:

var value = GetCustomFieldValue(CustomFields, "First Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
else{
    value = GetCustomFieldValue(Parent.CustomFields, "First Name");
    if (!string.IsNullOrWhiteSpace(value))
        return value;
    return Parent.Name.Split().FirstOrDefault()
}

LastName formula:

var value = GetCustomFieldValue(CustomFields, "Last Name");
if (!string.IsNullOrWhiteSpace(value)){
    return value;
}
else{
    value = GetCustomFieldValue(Parent.CustomFields, "Last Name");
    if (!string.IsNullOrWhiteSpace(value))
        return value;
    return Parent.Name.Split().LastOrDefault()
}

CountryId formula:

if(!string.IsNullOrWhiteSpace(Country)){
    if(Country.Length > 3)
        Country = CountryCode(Country);
    return await GetCountryIdByIso(Country);
}

CountryStateId formula:

if (!string.IsNullOrWhiteSpace(Region))
{
    Region = Region.Trim();
    if (Region.Length > 3 && !Region.Contains("-")) {
        Region = StateAbbreviation(Region);
        //Append "US-" to meet Shopware ISO standards
        Region = "US-"+Region;
        }
    var stateId = await GetStateIdByShortCode(Region);
    return stateId;
}

Placeholder value — replace during implementation: The static "test updated" on the address_id_test sample custom field is an example/test value. Subscribers or their MiSP should replace it with a real mapped value or remove the mapping before going live.

Update Shopware B2B Company Relationship (B2B-Employee) FROM iPaaS.com

Updates B2B employees in Shopware from qualifying iPaaS.com company relationships as part of the Update parent transfer.

Mapping Filter

if(!string.IsNullOrEmpty(Type) && Type.ToLower() == "employee"){
    var companyRelationshipId = await GetExternalIdAsync(Id, "Company Relationship", SpaceportSystemId);
    if(!string.IsNullOrWhiteSpace(companyRelationshipId))
        return true;
    var email = await GetiPaaSCustomerData(RelatedToId, "Email");
    if(!string.IsNullOrWhiteSpace(email)){
        bool duplicateFound = await B2BEmployeeDuplicateCheck(email);
        if(!duplicateFound)
            return true;
        else
            throw new Exception(email + " this email has already been existed in Shopware as the B2B-Employee");
    }
}
return false;

Filter Description. Only employee relationships are processed: the relationship proceeds only when its Type (lowercased) is "employee"; relationships of any other type are skipped. For an employee relationship, the filter checks whether it is already linked to a Shopware B2B employee via GetExternalIdAsync for the Company Relationship entity — if a link exists, it proceeds. Otherwise it resolves the related iPaaS.com customer's email with GetiPaaSCustomerData and runs B2BEmployeeDuplicateCheck. If no Shopware B2B employee has that email, the relationship proceeds. If a B2B employee with that email already exists, the filter throws "<email> this email has already been existed in Shopware as the B2B-Employee" and the relationship fails rather than being silently skipped. Relationships with no resolvable email are skipped.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Shopware)

Description

Dynamic Formula

Related customer FirstName

FirstName

required — the employee's first name, read from the related iPaaS.com customer.

Dynamic Formula

Related customer LastName

LastName

required — the employee's last name, read from the related iPaaS.com customer.

Dynamic Formula

Related customer Email

Email

required — the employee's email; also the key used to identify the employee and prevent duplicates.

Dynamic Formula

Language ID custom field, else language name

LanguageId

required — the employee's language; falls back to a named-language lookup.

Dynamic Formula

true

Active

optional — marks the employee as active.

FirstName formula:

return await GetiPaaSCustomerData(RelatedToId, "FirstName");

LastName formula:

return await GetiPaaSCustomerData(RelatedToId, "LastName");

Email formula:

return await GetiPaaSCustomerData(RelatedToId, "Email");

LanguageId formula:

var value = GetCustomFieldValue(CustomFields, "Language ID");
if (!string.IsNullOrWhiteSpace(value)){
return value;
}
return await GetLanguageIdByName("English");

Placeholder value — replace during implementation: the fallback language name "English" is an example default. It must be replaced with a language name that exists in the subscriber's Shopware instance, or the Language ID custom field should be supplied on the source record so the fallback is not needed. GetLanguageIdByName resolves only Latin-character names and returns nothing for a name it cannot find.

Error Handling

Errors surface in Dashboard / Integration Monitoring / Error Logs.

  • "<email> this email has already been existed in Shopware as the B2B-Employee": thrown by the B2B employee child filters when a relationship is not already linked to a Shopware employee but a B2B employee with the resolved email already exists. The relationship fails rather than being silently skipped. Resolution: link the existing employee to the source relationship, or remove the duplicate source relationship.

  • Required lookup resolves to nothing: when a named payment method, sales channel, customer group, or language does not exist in Shopware (or, on the Update parent, a category name does not match a customer group), the required value resolves to nothing and company creation/update fails. Resolution: confirm the referenced records exist in Shopware and align category names with existing customer-group names.

  • Address country does not resolve: when the supplied country does not resolve to a Shopware country, the address write fails for that record. Resolution: supply a country value that resolves to a Shopware country.

  • Shopware API temporarily unavailable: the transfer fails. Resolution: re-trigger the parent company transfer from iPaaS.com.

Testing & Validation

Test Scenarios

  • Transfer a new iPaaS.com company with at least one valid employee relationship and confirm the Add parent creates a B2B company with its addresses and employees.

  • Transfer a company that is already linked to a non-subsidiary Shopware company and confirm the Update parent updates the existing company rather than creating a duplicate.

  • Transfer a company whose Shopware link identifies it as a subsidiary and confirm the Update parent skips it.

  • Transfer a company without a valid employee relationship and confirm no B2B company is created.

  • Transfer a company referencing a payment method, sales channel, customer group, or language that does not exist in Shopware and confirm the transfer fails with the expected error.

  • Transfer a company whose employee email already exists in Shopware (and is not linked) and confirm the duplicate-email error is thrown.

  • Transfer an address with a non-US region and confirm state-resolution behavior.

Validation Checklist

  • The Shopware Commercial (B2B Suite) extension is installed before enabling the family.

  • The example named records (payment method, sales channel, customer group, language) have been replaced with names that exist in the target Shopware store.

  • The sample address_id_test mapping has been replaced with a real value or removed before going live.

  • New companies are routed to the Add parent and existing linked non-subsidiary companies to the Update parent.

  • Each created or updated company has its addresses linked by the composite address external ID and its employees linked under the Company Relationship entity.

  • Required address fields (recipient name, street, city, country) are present and the country resolves to a Shopware country.

  • Circular-update protection is in place where the opposite-direction "TO iPaaS.com" collections are also enabled.

Additional Notes

  • The named-language fallback (GetLanguageIdByName) accepts only Latin-character language names; for non-Latin languages, supply the Shopware language ID directly through the Language ID custom field. A region-specific value can include the variant, for example "English (US)".

  • The address state (region) formula assumes United States states because of its "US-" prefix; non-US state resolution should be validated in a staging environment before relying on it in production, at the time this documentation was written.

Did this answer your question?