in src/Common/ProcessImporter.ts [699:739]
private async _validatePicklists(payload: IProcessPayload): Promise<void> {
assert(payload.targetAccountInformation && payload.targetAccountInformation.collectionFields, "[Unexpected] - targetInformation not properly populated");
const fieldToPicklistIdMapping = payload.targetAccountInformation.fieldRefNameToPicklistId; // This is output for import picklist/field
const currentTargetFieldToPicklist = await this._populatePicklistDictionary(payload.targetAccountInformation.collectionFields);
for (const picklistEntry of payload.witFieldPicklists) {
const fieldRefName = picklistEntry.fieldRefName;
const currentTargetPicklist = currentTargetFieldToPicklist[fieldRefName];
if (currentTargetPicklist) {
// Compare the pick list items
let conflict: boolean;
if (currentTargetPicklist.items.length === picklistEntry.picklist.items.length && !currentTargetPicklist.isSuggested === !picklistEntry.picklist.isSuggested) {
for (const sourceItem of picklistEntry.picklist.items) {
if (currentTargetPicklist.items.filter(targetItem => targetItem.value === sourceItem.value).length !== 1) {
conflict = true;
break;
}
}
}
else {
conflict = true;
}
if (conflict) {
if (!(this._config.options && this._config.options.overwritePicklist === true)) {
throw new ValidationError(`Picklist field ${fieldRefName} exist on target account but have different items than source, set 'overwritePicklist' option to overwrite`);
}
else {
fieldToPicklistIdMapping[fieldRefName] = currentTargetPicklist.id; // We will need to update the picklist later when import picklists
}
}
else {
fieldToPicklistIdMapping[fieldRefName] = PICKLIST_NO_ACTION; // No action needed since picklist values match.
}
}
else {
// No-op, leave payload.targetAccountInformation.fieldRefNameToPicklistId[picklistEntry.fieldRefName] = undefined, which indicates creating new picklist.
}
}
}