Description
Использование Ignore Mandatory Fields в Transform Map приводит к игнорированию уникальности колонок для Target записи
Workaround
В качестве обходного решения предлагаем использовать прерывание вставки неуникальной записи через скрипт Transform Script [sys_transform_script] с типом onBefore.
В массиве duplicateConditions должны содержаться условия для поиска дубликатов по всем полям, указанным в записях Field Map, с активным флагом флагом Coalesce! В примере ниже это username и email.
Пример скрипта:
(function runTransformScript(source, map, log, target /*undefined onStart*/) {
let duplicateConditions = [
`usernameSTARTSWITH${source.imp_samaccountname}^usernameENDSWITH${source.imp_samaccountname}`,
`emailSTARTSWITH${source.imp_mail}^emailENDSWITH${source.imp_mail}`
]
if (target.sys_id) {
duplicateConditions = duplicateConditions.map(node => `(${node}^sys_id!=${target.sys_id})`);
}
const TARGET_TABLE_NAME = 'user';
const duplicate = new SimpleRecord(TARGET_TABLE_NAME);
duplicate.addEncodedQuery(duplicateConditions.join('^OR'));
duplicate.selectAttributes(['sys_id']);
duplicate.setLimit(1);
duplicate.query();
if (duplicate.next()) {
ignore = true; // skip import row
message = `Duplicate with record: /record/${TARGET_TABLE_NAME}/${duplicate.sys_id}`;
ss.error(`Transform Script Log:
Record: /record/${TARGET_TABLE_NAME}/${duplicate.sys_id}
Source record attributes: ${JSON.stringify(source.getAttributes(), null, 2)}`);
}
})(source, map, log, target);