Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  • Создавайте константы с понятным названием.
  • Для ускорения выборки рекомендуется использовать метод selectAttributes() класса SimpleRecord.

    В приведенном ниже примере создается массив, содержащий ID записей:

    Code Block
    languagejs
    themeEclipse
    titleselectAttributes
    linenumberstrue
    const 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 для созданий условий:

    Code Block
    languagejs
    themeEclipse
    titleis one of in query
    linenumberstrue
    const 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:

    Code Block
    languagejs
    themeConfluence
    titleaddOrCondition
    linenumberstrue
    const 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();


  • Добавьте предварительный просмотр количества записей перед обновлением/удалением:

    Code Block
    languagejs
    themeEclipse
    titleupdateMultiple
    linenumberstrue
    const 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()} obhects`objects`);
    record.setMultipleValue('state', 'good');
    //record.updateMultiple();


    Code Block
    languagejs
    themeEclipse
    titledeleteMultiple
    linenumberstrue
    const record = new SimpleRecord('imp_ldap_users');
    record.addEncodedQuery('imp_company%3DSofaShop.ru^sys_created_atLIKE2019-');
    record.query();
    ss.addInfoMessage(record.getRowCount());
    //current.deleteMultiple();
    


  • Скрипт, который создает запись и связанные с ней записи (например, создание записи задачи и записей дочерних задач) должен содержать проверку создания корневой записи перед созданием связанных записей:

    Code Block
    languagejs
    themeEclipse
    titleПроверка корневой записи
    linenumberstrue
    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 в своих скриптах:

    Code Block
    languagejs
    themeEclipse
    titleКомментирование кода
    linenumberstrue
    if (current.stage == '4' || current.stage == '6') { // Отменен ИЛИ Завершен
        const start = new SimpleDateTime(current.start_time);
        //...


  • Используйте метод getAttributes() для проверки объекта перед вставкой или обновлением:

    Code Block
    languagejs
    themeEclipse
    titlegetAttributes
    linenumberstrue
    const task = new SimpleRecord('task');
    task.initialize();
    ss.info(JSON.stringify(task.getAttributes(), null, 2));
    /* Info: {
      "sys_id": "",
      "parent_id": "",
      "assigned_user": "",
      "number": "",
      "short_description": "",
      "active": 1,
      ...
    */

    Этот метод позволяет перед вызовом проверить, имеет ли объект указанный атрибут или нет:

    Code Block
    languagejs
    themeEclipse
    titlegetAttributes
    linenumberstrue
    if (task.getAttributes()['has_breached'] != undefined) {
        task.has_breached = true; // SLA Breached
        task.update();
    }


  • Используйте исходные сообщения в качестве аргумента:

    Code Block
    languagejs
    themeEclipse
    titleSource Message as an argument
    linenumberstrue
    ss.addInfoMessage('The protocol was send on email');
    // Исходное сообщение и сообщения-переводы были добавлены заранее

    вместо локализации сообщения:

    Code Block
    themeConfluence
    titleMessage preparing
    const sm = new SimpleMessage();
    const localizedMessage = sm.getMessage('The protocol was send on email');
    ss.addInfoMessage(localizedMessage);

    вместо прописывания условий отображения текстов сообщений на разных языках:

    Code Block
    languagejs
    themeConfluence
    titleHardcode messaging
    if (ss.getUser().language_id.language === 'en') {
        ss.addInfoMessage('The protocol was send on email');
    } else {
        ss.addInfoMessage('Протокол был отправлен на почту');
    }