InforLn - Customer Update
This document describes the customer synchronization process for the InforLn connector. The process retrieves customer data from the InforLn ERP system, transforms it, and updates the App4Sales database. This includes core customer information, addresses, contact persons, price list links, and discounts.
Data Source Configuration
The customer update process is initiated by calling the A4SListCustomers SOAP web service. The connector retrieves a list of all customers from the connected InforLn administration.
Service: InforLn Web Service
Method:
A4SListCustomersAuthentication: The username for the current administration is used for authentication.
Data Mapping
The following tables detail how data from the InforLn ERP system is mapped to App4Sales entities.
Customers
App4Sales Field | Source Field (XML) | Logic/Notes |
CustomerCode | customers.customerCode | The customer code is trimmed of any leading/trailing whitespace. |
CustomerName | customers.customerName | The name of the customer. |
LanguageCode | customers.languageCode | The language code is mapped to an App4Sales language code. |
Discount | customers.discount | The discount is converted to a decimal value. If the value is empty or null, it defaults to 0. |
CustomerManager | customers.customerManager | The manager responsible for the customer. |
CustomerDashboard | customers.customerDashboard | The Base64 encoded dashboard layout for the customer. This is processed and stored separately. |
customers.email | The primary email address for the customer. | |
Sysmodified | customers.sysmodified / customers.lastModified | The date and time the customer was last modified. If not provided, it defaults to the current date and time. |
VatCode | customers.VATCode | The VAT code for the customer. For USA administrations, this field is cleared. |
VatLiable | customers.isVATLiable | A boolean indicating if the customer is VAT liable. For USA administrations, this is set to false. |
ActionPriceList | - | If a `DefaultActionPriceListCode` is configured in the connector settings, and the customer does not have an action price list, this will be used. |
PaymentConditionCode | - | If the payment condition code is an empty string, it is set to null to prevent foreign key issues. |
ItemFilter | - | Processed from extra data if `CustomerItemFilter` setting is enabled. |
Addresses
App4Sales Field | Source Field (XML) | Logic/Notes |
AddressType | - | Hardcoded to "del" (delivery) and "vis" (visit). If only one type is provided, the other is created as a copy. |
AddressLine1 | customers.deliveryAddress1 / customers.visitAddress1 | The first line of the address. |
PostCode | customers.deliveryPostCode / customers.visitPostCode | The postal code for the address. |
City | customers.deliveryCity / customers.visitCity | The city for the address. |
Country | customers.languageCode | The country for the address, initially set to the customer's language code. |
Iso2 | - | The ISO2 country code is derived from the country name. It can be overridden by mapped country codes. |
Phone | customers.contactPhone | The phone number for the address. |
customers.email | The email address for the address, inherited from the customer. | |
Fax | - | The fax number, inherited from the customer. |
IsMainAddress | - | The first visit and delivery address are marked as the main address. |
Contact Persons
App4Sales Field | Source Field (XML) | Logic/Notes |
FullName | customers.contactFullName | The full name of the contact person. If not provided, it is constructed from the first, middle, and last names. |
IsMainContactPerson | - | The first contact person in the list is marked as the main contact person if no other contact is specified as the main contact. |
ContactId | - | If the contact ID is empty, a new one is generated based on a hash of the contact person object. This is only done when running in Updater mode. |
Special Logic & Filters
Batch Processing: Customers are processed in batches of 100 to avoid timeouts and reduce memory consumption.
GUID Handling: The connector attempts to reuse existing customer GUIDs to preserve relationships with orders and notes. It also supports reactivating previously deleted customers.
Address Normalization: The connector ensures that both a visit and a delivery address exist for each customer. If one is missing, it's created by copying the other. Country codes are normalized to ISO2 standards.
Main Contact: If no main contact person is designated, the first contact person in the list is automatically assigned as the main contact.
Extra Data Processing: The connector can process extra customer data provided via FTP/CSV. This data can override standard fields or be added as free fields.
Item Filters: Fixed item filters can be created for a customer based on extra data fields prefixed with `ItemFilter_`. This is controlled by the `CustomerItemFilter` setting.
Customer Dashboards: Base64-encoded dashboard layouts are decoded and saved to the `CustomerDashboards` table.
Customer Notes: Customer notes are recreated on each sync. Any existing notes from the backoffice are deleted and replaced with the new note.
Related Settings & Prerequisites
DefaultActionPriceListCode: If set, all customers without an action price list will be assigned the price list with this code.
CustomerItemFilter: When enabled, the connector will process extra data fields to create fixed item filters for customers.
EnablePriceDeduplication: If enabled, the connector will migrate customers to their deduplicated versions of pricelists.