Using Data Mapping
Data mappings allow for retrieving the data required for the generic invoice run or the automatic subscription build from virtually any fields of any objects. This mechanism facilitates a more flexible mapping configuration if the ON field mechanism is not sufficient enough.
Data Mapping Configuration
The field mapping is defined in JSON notation and can either be stored as a Salesforce document or directly in a field on the record that is to be processed.
API Name | Data Type | Description |
---|---|---|
ON_MappingName | Text (255) or Formula (Text) |
Specifies the name of the file that contains the field mapping definition in JSON. Deprecated, accessible via the Documents tab in the Salesforce Classic UI only. Use ON_MappingId instead. |
ON_MappingId | Text (255) or Formula (Text) |
Specifies the 18-digit, case-safe Salesforce record ID of the file that contains the field mapping definition in JSON. Takes precedence over ON_MappingName . |
ON_Mapping | Text Area (Long) | Specifies the field mapping definition in JSON. Make sure to write all JSON code in a single line without spaces. Takes precedence over ON_MappingId and ON_MappingName . |
Info
You only need one of the above fields, depending on where you store the mapping configuration.
ON_Mapping
always takes precedence. If ON_MappingName
and ON_MappingId
are set, ON_MappingId
takes precedence.
The mapping can be used to
- define relationships by external IDs,
- add additional values to the target object fields,
- write values from the parent record to individual items, or
- write values from child records to the parent.
Note
Be aware that the data types of the mapped fields must be identical.
Data Mapping JSON Structure
The following listing illustrates the mapping structure.
{
"externalIdFields":{
"Account__c":"ExternalId__c"
},
"fields":{
"Field__c":"$FIELDNAME",
"StartDate__c":"$FIELDNAME"
},
"fieldsToUpdate":["StartDate__c"],
"items":{
"ORDERNO":{
"fields":{
"Title__c":"$FIELDNAME",
"Checkbox__c":true
},
"fieldsToUpdate":["Title__c"],
"tiers": [
{
"Quantity__c":42.0,
"Price__c":"$ORDERNO.FIELDNAME",
"Type__c":"Flat",
"Target__c":"Price"
},
{
"Quantity__c":null,
"Price__c":47.11,
"Type__c":"Default",
"Target__c":"Price"
}
]
},
"XYZ" : {
"fields":{...},
"tiers":[...]
}
}
}
externalIdFields
The mapping externalIdFields
is used to define lookup relationships from the invoice or subscription to other records, like account or template. This may be required, for example, if ON_Account
is not set or if the invoice or subscription is to be assigned to another account. It can also be used to link an invoice or a subscription to existing records without knowing or storing their Salesforce IDs in an external system.
externalIdFields
is a map where the keys are lookup field names on the invoice or subscription. Its values are field names on the target object that are configured as an external ID.
Link to an account with the external ID foo12345
:
"externalIdFields":{
"Account__c":"ExternalId__c"
}
There must be an account with ExternalId__c
= foo12345
. ON_Account
on the source object must be set to foo12345
.
fields
The mapping fields
allows to directly define field values for the resulting invoice or subscription. Field references like $FIELDNAME
and $ORDERNO.FIELDNAME
are matched with the corresponding fields on the source object and its children, and are then replaced with their values.
Be aware that $ORDERNO
is case-sensitive and that fields that are referred to by $FIELDNAME
have to be allowlisted if they are custom fields on a standard object without ON_
prefix (see Field Whitelist).
Replace field references:
Assume a source object with CloseDate
= 2017-12-01
and a child source object with ON_OrderNo
= SETUP
and Price
= 47.11
.
The mapping looks as follows:
"fields":{
"StartDate__c":"$CloseDate",
"SetupPrice__c":"$SETUP.Price"
}
Result after the replacement:
"fields":{
"StartDate__c":"2017-12-01",
"SetupPrice__c":47.11
}
fieldsToUpdate
Info
fieldsToUpdate
is used by the subscription builder only.
The mapping fieldsToUpdate
defines the target fields of the subscription or the subscription item that are to be updated (see Enabling Subscription and Subscription Items Update). It can be set for the subscription and each OrderNo
item.
Update start date and end date:
"fieldsToUpdate" : ["StartDate__c", "EndDate__c"]
items
The mapping items
allows to define field values for invoice line items or subscription items to be created or updated. Be aware of the following specifics:
-
Each item must be referred to by a unique identifier (
ORDERNO
).When building subscription and items, this value maps the
OrderNo
field of the item.When building invoices and invoice line items, this value is not transferred to the produced records, but must still be unique for the mapping configuration.
-
Field references like
$FIELDNAME
are also replaced with values from the source object and its children.
Create invoice line items:
Assume a source object that defines a title, a quantity and a price, and have the generic invoice run produce corresponding invoice line items. The mapping may look like this:
{
"items":{
"ILI1":{
"fields":{
"Title__c":"$FIELDNAME",
"Quantity__c":"$FIELDNAME",
"UnitPrice__c":"$FIELDNAME"
}
},
"ILI2":{
"fields":{
"Title__c":"$FIELDNAME",
"Quantity__c":"$FIELDNAME",
"UnitPrice__c":"$FIELDNAME"
}
}
}
}
items.ORDERNO.tiers
Info
tiers
is used by the subscription builder only.
The mapping tiers
allows to define (multiple) price tiers or commission tiers. Each mapping defines field values as key-value pairs.
The field Target
defines whether the tier is considered as a price tier or a commission tier. Field references are also replaced with values from the source object and its children.
Note
Define tiers either using the mapping or with the master subscription item, not both.