Skip to main content

MultiversExtended - Customer sync

Multivers Extended V3 - Customer Update This document describes the process of synchronizing customer data from Multivers Extended V3 to t...

Updated over a week ago

Multivers Extended V3 - Customer Update

This document describes the process of synchronizing customer data from Multivers Extended V3 to the App4Sales platform. The process updates customer core information, addresses, contact persons, and related commercial settings like price lists and discounts.

Data Source Configuration

The connector retrieves customer data from the Multivers Extended V3 API. The specific endpoints and filters used are managed within the connector's services and are not directly configurable by administrators.

Data Mapping

Customer

App4Sales Field

Source Field (API/Excel/DB)

Logic/Notes

CustomerCode

Debtor.DebtorId

Unique identifier for the customer.

CustomerName

Organisation.Name

The name of the customer's organization.

Email

Debtor.ElectronicMail

The primary email address of the customer. Whitespace is trimmed.

Phone

Debtor.Telephone

The primary phone number of the customer.

Fax

Debtor.Fax

The fax number of the customer.

LanguageCode

Organisation.LanguageId

Mapped to App4Sales language codes via the `MappedLanguages` table.

VatCode

Debtor.VatNumber

The customer's VAT number. This field is cleared for USA administrations.

VatLiable

Debtor.VatLiability

Indicates if the customer is liable for VAT. Set to `false` for USA administrations.

PaymentConditionCode

Debtor.PaymentConditionId

The code for the customer's payment condition. If empty, it's set to null to prevent foreign key issues.

UsesPriceField

Debtor.PriceListId

The ID of the standard price list used by the customer. Migrated to a deduplicated pricelist if `EnablePriceDeduplication` is active. Defaults to `1` if the original pricelist is not found.

ActionPriceList

Debtor.PromotionPriceListId

The ID of the action/promotional price list. Also migrated if `EnablePriceDeduplication` is active. Can be set to a default value using the `DefaultActionPriceListCode` setting.

CreditLimit

Debtor.CreditLimit

The customer's credit limit.

IsBlocked

Debtor.Blocked

Indicates if the customer is blocked.

FreeFields

FreeFieldList

A list of free fields, serialized into an XML string. Can also be populated from `extraCustomerData`.

ItemFilter

extraCustomerData

Generated from `extraCustomerData` if `CustomerItemFilter` setting is enabled. It's constructed based on columns prefixed with `ItemFilter_`.

CustomerNote

-

A single note from the backoffice is stored. Existing notes are deleted and recreated.

CustomerDashboard

-

Dashboard layouts are decoded from Base64 and stored separately. The original field on the customer object is cleared.

Address

App4Sales Field

Source Field (API/Excel/DB)

Logic/Notes

AddressType

OrganisationAddress.AddressType

Can be 'Visit', 'Delivery', 'Invoice', etc. If only one of 'Visit' or 'Delivery' exists, the other is created as a copy. Defaults to 'Visit' if empty.

AddressLine1

OrganisationAddress.AddressLine1

The first line of the address. It can be parsed into Street, Number, and Addition if `AddressLine` is null.

City

OrganisationAddress.City

The city of the address.

Zipcode

OrganisationAddress.PostalCode

The postal code of the address.

Country

OrganisationAddress.CountryId

The country of the address.

Iso2

OrganisationAddress.CountryId

The 2-letter ISO code of the country. Mapped via `MappedCountries` table. If not found, a lookup is performed based on the country name.

Email

OrganisationAddress.Email

Email address for the address. Unicode unit separator characters are removed. Inherits from the main customer email if it's a main address and the field is empty.

IsMainAddress

-

The first 'Visit' and 'Delivery' address in the list are marked as the main address for their respective types if no main address is specified.

Contact Person

App4Sales Field

Source Field (API/Excel/DB)

Logic/Notes

FullName

Person.DisplayName

The full name of the contact person. If not provided, it's constructed from FirstName, MiddleName, and LastName.

FirstName

-

Parsed from FullName if not provided.

LastName

-

Parsed from FullName if not provided.

Email

Person.Email

The email address of the contact person. Whitespace is trimmed.

IsMainContactPerson

-

Determined by the `MainContactPerson` on the customer object. If not specified, the first contact in the list is marked as the main contact.

PasswordWebshop

-

Set to null when running in Updater mode to prevent overwriting existing passwords.

DynamicFreeFields

-

Converted to a standard XML format for extra fields.

Discounts

App4Sales Field

Source Field (API/Excel/DB)

Logic/Notes

CustomerGuid

-

The GUID of the customer the discount belongs to.

ItemClassId

DiscountsPerItemCLassValue

The ID of the item class the discount applies to.

ItemClassValue

DiscountsPerItemCLassValue

The specific value within the item class the discount applies to.

discount

DiscountsPerItemCLassValue

The discount percentage. Only discounts with a value greater than 0 are stored.

Special Logic & Filters

  • Customers with an empty `CustomerName` or `CustomerCode` are considered invalid and skipped.

  • The process runs in batches of 100 customers to manage memory and performance.

  • The connector can reactivate previously deleted customers by reusing their `CustomerGuid`.

  • Before processing, a `BeforeUpdateCustomers` script can be executed. After processing, an `UpdateCustomers` script is executed.

  • When `extraCustomerData` is provided (e.g., from an FTP/CSV file), it can overwrite existing customer fields based on matching property names.

Domain Specifics

Customer Core Fields

The connector synchronizes core customer data, including identity, commercial settings, and status flags. It ensures that essential fields are present and correctly formatted. VAT-related information is cleared for administrations located in the USA.

Addresses

Address information is normalized to ensure data quality. This includes parsing address lines, mapping country codes, and ensuring that both 'Visit' and 'Delivery' addresses are present, creating a copy of one if the other is missing. The main address for each type is also determined and flagged.

Contacts

Contact persons are linked to their respective customers. The connector can parse full names into first and last names and determines a main contact person for each customer. Passwords for contact persons are not updated when the synchronization runs in Updater mode.

Extra Data & Free Fields

The system allows for extending customer data through an `extraCustomerData` source. This data can overwrite standard fields or be used to create custom free fields and fixed item filters for customers. Item filters are constructed from columns with names starting with `ItemFilter_`.

Discounts & Dashboards

Customer-specific discounts for item class values are synchronized, but only if the discount percentage is greater than zero. Customer-specific dashboards are also processed; the Base64-encoded dashboard data is stored, and the field on the customer object is cleared to save memory.

Related Settings & Prerequisites

  • DefaultActionPriceListCode: If a customer does not have an action price list, this setting can be used to assign a default one.

  • EnablePriceDeduplication: When enabled, the connector migrates customers to use deduplicated price lists.

  • CustomerItemFilter: If enabled, the connector will process `extraCustomerData` to create fixed item filters for customers.

  • AllowedDebtorCodes: A comma-separated list of debtor codes that should be exclusively synchronized.

  • SkipInactiveCustomersDuringSync: If enabled, inactive customers will be skipped during the synchronization process.

Did this answer your question?