Общие рекомендации
-
Создавайте константы с понятными названиями.
-
Для ускорения выборки рекомендуется использовать метод selectAttributes() класса SimpleRecord.
В приведенном ниже примере создается массив, содержащий ID записей:
selectAttributesconst user = new SimpleRecord('user');
user.addQuery('email', 'like', '@bestcompany');
user.selectAttributes('sys_id'); // select sys_id only
user.query();
const userIDs = [];
while (user.next()) {
userIDs.push(user.sys_id);
} -
Используйте операторы in/not in для созданий условий:
is one of in queryconst tableIds = [
'156950363112415683',
'156950616617772294',
'155931135900000083',
current.getValue('child_table_id')
]
const column = new SimpleRecord('sys_db_column');
column.addQuery('table_id', 'in', tableIds);
column.query();вместо множества addOrCondition():
addOrConditionconst column = new SimpleRecord('sys_db_column');
column.addQuery('table_id', current.getValue('child_table_id'));
column.addOrCondition('table_id', '156950363112415683');
column.addOrCondition('table_id', '156950616617772294');
column.addOrCondition('table_id', '155931135900000083');
column.query(); -
Добавьте предварительный просмотр количества записей перед обновлением/удалением:
updateMultipleconst record = new SimpleRecord('sys_vcs_preview_log');
record.addQuery('retrieved_pack_id', current.sys_id);
record.addQuery('state', 'skipped');
record.addQuery('error_text', 'В системе есть более новая запись');
record.query();
ss.addInfoMessage(`Correction for ${record.getRowCount()} objects`);
record.setMultipleValue('state', 'good');
//record.updateMultiple();deleteMultipleconst record = new SimpleRecord('imp_ldap_users');
record.addEncodedQuery('imp_company%3DSofaShop.ru^sys_created_atLIKE2019-');
record.query();
ss.addInfoMessage(record.getRowCount());
//current.deleteMultiple(); -
Скрипт, который создает запись и связанные с ней записи (например, создание записи Задача и записей дочерних задач), должен содержать проверку создания корневой записи перед созданием связанных записей:
Проверка корневой записиconst recordTask = new SimpleRecord('task');
//recordTask.subject = 'Main Task';
const insertedID = recordTask.insert(); // ID созданной записи ИЛИ 0
const activities = [
'Analysis',
'Coding',
'Review',
'Testing',
'Merging',
'Release'
];
if (insertedID != 0) { // если Задача создана, создать связанные задачи
const subtasksID = [];
activities.forEach(activityName => {
const subTaskRecord = new SimpleRecord('task');
subTaskRecord.parent_id = insertedID;
subTaskRecord.subject = activityName;
subtasksID.push(subTaskRecord.insert());
});
} else {
ss.addErrorMessage(JSON.stringify(recordTask.getErrors()));
} -
Комментируйте свой код, когда вы используете опции поля Choice в своих скриптах:
Комментирование кодаif (current.stage == '4' || current.stage == '6') { // Отменен ИЛИ Завершен
const start = new SimpleDateTime(current.start_time);
//... -
Используйте метод getAttributes() для проверки объекта перед вставкой или обновлением:
getAttributesconst task = new SimpleRecord('task');
task.initialize();
ss.info(JSON.stringify(task.getAttributes(), null, 2));
/* Информация: {
"sys_id": "",
"parent_id": "",
"assigned_user": "",
"number": "",
"short_description": "",
"active": 1,
...
*/Этот метод позволяет перед вызовом проверить, имеет ли объект указанный атрибут или нет:
getAttributesif (task.getAttributes()['has_breached'] != undefined) {
task.has_breached = true; // SLA превышено
task.update();
} -
Используйте исходные сообщения в качестве аргумента:
Исходные сообщения как аргументss.addInfoMessage('The protocol was sent on email');
// Исходное сообщение и сообщения-переводы были добавлены заранеевместо локализации сообщения:
Локализация сообщенияconst sm = new SimpleMessage();
const localizedMessage = sm.getMessage('The protocol was sent on email');
ss.addInfoMessage(localizedMessage);и вместо прописывания условий отображения текстов сообщений на разных языках:
Условия для перевода сообщенияif (ss.getUser().language_id.language === 'en') {
ss.addInfoMessage('The protocol was sent on email');
} else {
ss.addInfoMessage('Протокол был отправлен на почту');
}