in src/Common/ProcessImporter.ts [48:92]
private async _getFieldsToCreate(payload: IProcessPayload): Promise<WITProcessDefinitionsInterfaces.FieldModel[]> {
assert(payload.targetAccountInformation && payload.targetAccountInformation.fieldRefNameToPicklistId, "[Unexpected] - targetInformation not properly populated");
let fieldsOnTarget: WITInterfaces.WorkItemField[];
try {
fieldsOnTarget = await this._witApi.getFields();
if (!fieldsOnTarget || fieldsOnTarget.length <= 0) { // most likely 404
throw new ImportError("Failed to get fields from target account, server returned empty result");
}
}
catch (error) {
Utility.handleKnownError(error);
throw new ImportError("Failed to get fields from target account, see logs for details.")
}
// Build a lookup to know if a field is picklist field.
const isPicklistField: IDictionaryStringTo<boolean> = {};
for (const e of payload.witFieldPicklists) {
isPicklistField[e.fieldRefName] = true;
}
const outputFields: WITProcessDefinitionsInterfaces.FieldModel[] = [];
for (const sourceField of payload.fields) {
const fieldExist = fieldsOnTarget.some(targetField => targetField.referenceName === sourceField.id);
if (!fieldExist) {
const createField: WITProcessDefinitionsInterfaces.FieldModel = Utility.WITProcessToWITProcessDefinitionsFieldModel(sourceField);
if (sourceField.isIdentity) {
createField.type = WITProcessDefinitionsInterfaces.FieldType.Identity;
}
if (isPicklistField[sourceField.id]) {
const picklistId = payload.targetAccountInformation.fieldRefNameToPicklistId[sourceField.id];
assert(picklistId !== PICKLIST_NO_ACTION, "[Unexpected] We are creating the field which we found the matching field earlier on collection")
createField.pickList = {
id: picklistId,
isSuggested: null,
name: null,
type: null,
url: null
};
}
outputFields.push(createField);
}
}
return outputFields;
}