Перейти к основному содержимому
Версия: 1.33.0

SimpleRecord Server-Side

Этот серверный класс содержит методы для работы с записями базы данных.

SimpleRecord(tableName)


Используйте этот конструктор для создания объекта класса SimpleRecord для конкретной таблицы.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
tableNameStringДаНет

Пример:

SimpleRecord()
const taskRecord = new SimpleRecord('task');
примечание

Любое приведение объекта SimpleRecord к строке возвращает ID объекта.

const user = new SimpleRecord('user').get('100000000000000000');
ss.info(String(user))

// Информация: 100000000000000000

REM-атрибуты объекта


В классе SimpleRecord имеется отдельный объект расширенной модели записи (REM) – rem_attr, который содержит информацию о REM-атрибутах. Используйте его для чтения и редактирования значений REM-атрибутов текущей записи с помощью методов класса, как в примере ниже.

подсказка

rem_attr имеет несколько методов, аналогичных методам SimpleRecord:

Пример:

record.rem_attr.getValue('my_rem_attribute');

Пример:

get() c REM
const record = new SimpleRecord('task');
record.get('160638931615274614');
if (record.getReModelId()) {
ss.info(record.rem_attr.description);
}

Объект SimpleReference


При обращении к ссылочным полям в ответ приходит специальный объект SimpleReference, позволяющий обращаться через dot-walking к полям объекта, указанного в ссылочном поле.

подсказка

Объект SimpleReference имеет несколько методов, аналогичных методам SimpleRecord:

Пример:

getValue() с использованием объекта SimpleReference
let record = new SimpleRecord('task');
record.setLimit(1);
record.query();
record.next();
ss.info(record.caller.getValue('username'));

addOrCondition(property, operator, value)


Используйте метод, чтобы добавить условие ИЛИ к существующему запросу. Он работает в сочетании с методом addQuery(). В этом методе вы можете использовать необходимый оператор из списка операторов условий, указанный в нижнем или верхнем регистре. Используйте системные имена операторов в скриптах.

Вы также можете задавать атрибуты расширенной модели записи (REM-атрибуты) определенной таблицы. Чтобы отфильтровать записи, используйте операторы, соответствующие типу атрибута.

внимание

Условие может содержать критерии на основе атрибутов из разных моделей. Если такие критерии создаются с использованием оператора И, выборка записей будет пуста. Чтобы отобразить записи соответствующие условию, используйте оператор ИЛИ.

Параметры:

НаименованиеТипОбязательноЗначение по умолчаниюКомментарий
propertyStringДаНетДля REM-атрибутов используйте следующий паттерн: '<sys_id>:<attr_name>', где sys_id – ID модели, которая содержит атрибут, и attr_name – системное имя REM-атрибута.
operatorStringНет=-
valueInteger / String / Boolean / Array / SimpleReference objectДаНет-

Возвращаемое значение:

ТипОписание
SimpleRecord objectМетод возвращает экземпляр, на котором был вызван.

Примеры:

addOrCondition()
const record = new SimpleRecord('task');
record.addQuery('company.class', 'customer');
record.addQuery('subject', 'like', 'not work');
record.addOrCondition('subject', 'like', 'don\'t work');
ss.info('Условие запроса: ' + record.getConditionQuery());
record.query();

// Информация: Условие запроса: ((company.class=customer)^(subjectLIKEnot work))^OR(subjectLIKEdon't work)
addOrCondition() c REM-атрибутом
const record = new SimpleRecord('task');
record.addQuery('company.class', 'customer');
record.addQuery('subject', 'like', 'not work');
record.addOrCondition('166972638116358001:description', 'contains', 'not work');
ss.info('Условие запроса: ' + record.getConditionQuery());
record.query();

// Информация: Условие запроса: ((company.class=customer)^(subjectLIKEnot work))^OR(166972638116358001:descriptionLIKEnot work)
примечание

В качестве значения для метода addOrCondition() вместо ID записи может быть передано значение из Reference поля в формате current.{reference_field_name}. Пример скрипта:

SimpleRecord как аргумент
const task = new SimpleRecord('task');
task.setLimit(1);
task.query();
if (!task.next()) {
ss.info('Задачи не найдены!');
return;
}

const relatedTask = new SimpleRecord('task');
relatedTask.addQuery('caller', task.caller);
relatedTask.addOrCondition('assigned_user', task.caller);
relatedTask.query();
ss.info('Количество задач: ' + relatedTask.getRowCount());
// Информация: Количество задач: 122

addQuery(field, operator, value)


Используйте этот метод, чтобы добавить условие для выбора записей из базы данных. Для этого укажите название поля и оператор.

В этом методе вы можете использовать необходимый оператор из списка операторов условий, указанный в нижнем или верхнем регистре. Используйте системные имена операторов в скриптах.

Следующие операторы используйте без значения:

  • ISEMPTY
  • ISNOTEMPTY
  • ANYTHING
  • VALCHANGES
  • IN (также можно использовать со значением)
  • NOT IN (также можно использовать со значением)
  • NOTHING

Вы также можете задавать атрибуты расширенной модели записи (REM-атрибуты) определенной таблицы. Чтобы отфильтровать записи, используйте операторы, соответствующие типу атрибута.

внимание

Условие может содержать критерии на основе атрибутов из разных моделей. Если такие критерии создаются с использованием оператора И, выборка записей будет пуста. Чтобы отобразить записи соответствующие условию, используйте оператор ИЛИ.

Параметры:

НаименованиеТипОбязательноЗначение по умолчаниюКомментарий
fieldStringДаНетДля REM-атрибутов используйте следующий паттерн: '<sys_id>:<attr_name>', где sys_id – ID модели, которая содержит атрибут, и attr_name – системное имя REM-атрибута.
operatorStringНет-
valueInteger / String / Boolean / Array / SimpleReference objectДаНет-

Возвращаемое значение:

ТипОписание
SimpleRecord objectМетод возвращает экземпляр, на котором был вызван.

Примеры:

addQuery()
const task = new SimpleRecord('task');
task.addQuery('active', true);
task.addQuery('subject', 'like', 'email');
task.addQuery('sys_created_at', '<', '2019-04-01 00:00:00');
task.query();
ss.info('Количество: ' + task.getRowCount());
// Информация: Количество: 0
addQuery() с REM-атрибутом
let record = new SimpleRecord('task');
record.addQuery('166972638116358001:description', 'not work');
record.query();
ss.info('Всего записей: ' + record.getRowCount());
// Информация: Всего записей: 1
внимание
  • Условие с незаданным (undefined) значением или значением null будет пропущено. Результат выборки будет отфильтрован без учета условия.

    Пример с незаданным значением
    let type;
    let rule = new SimpleRecord('sys_business_rule');
    rule.addQuery('table_id', '156950677111866258');
    rule.addQuery('active', '1');
    rule.addQuery('when', type);
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 47
    Пример с заданным значением
    let rule = new SimpleRecord('sys_business_rule');
    rule.addQuery('table_id', '156950677111866258');
    rule.addQuery('active', '1');
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 47
  • Условие с пустой строкой значения вернет 0 объектов.

    Пример
    let type = '';
    let rule = new SimpleRecord('sys_business_rule');
    rule.addQuery('when', type);
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 0

В качестве значения для метода addQuery() вместо ID записи может быть передано значение из Reference поля в формате current.{reference_field_name}. Пример скрипта:

SimpleRecord как аргумент
const task = new SimpleRecord('task');
task.setLimit(1);
task.query();
if (!task.next()) {
ss.info('Задачи не найдены!');
return;
}

const otherTask = new SimpleRecord('task');
otherTask.addQuery('caller', task.caller);
otherTask.addQuery('sys_id', '!=', task.sys_id);
otherTask.query();
ss.info('Количество задач: ' + otherTask.getRowCount());
// Информация: Количество задач: 720

addEncodedQuery(condition)


Используйте данный метод, чтобы добавить закодированное условие для выбора записей из базы данных. Допустимо использование декодированного условия. Указывайте названия операторов условий заглавными буквами, в соответствии с их системными именами, так как этот метод не производит дополнительной обработки входящих данных, в отличие от addQuery(). Список всех операторов условий и их системные имена перечислены в статье.

Вы также можете задавать атрибуты расширенной модели записи (REM-атрибуты) определенной таблицы. Чтобы отфильтровать записи, используйте операторы, соответствующие типу атрибута.

внимание

Условие может содержать критерии на основе атрибутов из разных моделей. Если такие критерии создаются с использованием оператора И, выборка записей будет пуста. Чтобы отобразить записи соответствующие условию, используйте оператор ИЛИ.

При настройке фильтрации по текстовым полям String, Text, Translated Text, Conditions и URL используйте фигурные скобки для аргумента фильтрации. Запись аргумента в круглых скобках может вызвать ошибку фильтрации:

Фильтрация по текстовым полям
const subject = 'Hello, SimpleOne)';
const task = new SimpleRecord('task');
task.addEncodedQuery(`subjectLIKE${subject}`);
ss.info(task.getConditionQuery());
try {
task.query();
} catch (e) {
ss.error(e.message);
}
// Информация: (subjectLIKEHello, SimpleOne))
// Ошибка: Условие запроса неверное

Параметры:

НаименованиеТипОбязательноЗначение по умолчаниюКомментарий
conditionStringДаНетДля REM-атрибутов используйте следующий паттерн: '<sys_id>:<attr_name>', где sys_id – ID модели, которая содержит атрибут, и attr_name – системное имя REM-атрибута.

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Примеры:

addEncodedQuery()
const currentUser = ss.getUser();
const receiver = new SimpleRecord('employee');
receiver.addQuery('active', true);
if (currentUser.company.class === 'internal') {
receiver.addEncodedQuery(`(company=${currentUser.getValue('company')})`);
} else {
receiver.addEncodedQuery('%28sys_db_table_id%3D158645243815904649%5Esys_created_byDYNAMIC156957117519820256%29');
}
ss.info('Декодированное условие: ' + receiver.getConditionQuery());
receiver.query();
// Информация: Декодированное условие: (active=1)^((sys_db_table_id=158645243815904649^sys_created_byDYNAMIC156957117519820256))
addEncodedQuery() с REM-атрибутом
const receiver = new SimpleRecord('task');
receiver.addQuery('active', true);
receiver.addEncodedQuery('%28sys_db_table_id%3D158645243815904649%5E166972638116358001%3AdescriptionLIKEwork');
ss.info('Декодированное условие: ' + receiver.getConditionQuery());
receiver.query();
// Информация: Декодированное условие: (active=1)^((sys_db_table_id=158645243815904649^166972638116358001:descriptionLIKEwork))
внимание
  • Условие с незаданным (undefined) значением или значением null делает фильтр невалидным, вернется 0 объектов.

    Пример с незаданным значением
    let type;
    let rule = new SimpleRecord('sys_business_rule');
    rule.addEncodedQuery(`(table_id%3D156950677111866258%5Ewhen=${type}%5Eactive%3D1)`);
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 0
    Пример с заданным значением
    let rule = new SimpleRecord('sys_business_rule');
    rule.addEncodedQuery(`(table_id%3D156950677111866258%5Eactive%3D1)`);
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 47
  • Условие с пустой строкой в значении вернет все объекты указанной таблицы, так как условие пропускается.

    Пример
    let type = '';
    let rule = new SimpleRecord('sys_business_rule');
    rule.addEncodedQuery(`when=${type}`);
    rule.query();

    ss.info('Всего записей: ' + rule.getRowCount());

    //Информация: Всего записей: 598

canCreate()


Используйте этот метод, чтобы проверить, доступно ли текущему пользователю создание записей в указанной таблице по правилам контроля доступа (ACL).

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение true, если действие разрешено, если нет, метод возвращает false.

Пример:

canCreate()
current.canCreate();

canDelete()


Используйте этот метод, чтобы проверить, доступно ли текущему пользователю удаление записей в указанной таблице по правилам контроля доступа (ACL).

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение true, если действие разрешено, если нет, метод возвращает false.

Пример:

canDelete()
current.canDelete();

canRead()


Используйте этот метод, чтобы проверить, доступен ли текущему пользователю просмотр записей в указанной таблице по правилам контроля доступа (ACL).

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение true, если действие разрешено, если нет, метод возвращает false.

Пример:

canRead()
current.canRead();

canUpdate()


Используйте этот метод, чтобы проверить, доступно ли текущему пользователю редактирование записей в указанной таблице по правилам контроля доступа (ACL).

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение true, если действие разрешено, если нет, метод возвращает false.

Пример:

canUpdate()
current.canUpdate();

deleteMultiple()


Используйте этот метод, чтобы удалить записи из полученной выборки. Вложения удаляемых записей не удаляются.

внимание

Не используйте этот метод для таблиц с зависимостями. Всегда удаляйте каждую запись по отдельности.

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает true, если записи успешно удалены, в случае ошибки метод возвращает значение false.

Пример:

deleteMultiple()
const record = new SimpleRecord('sys_activity_feed_item');
record.addQuery('content', 'isempty');
record.query();
ss.info(record.getRowCount());
ss.info(record.deleteMultiple());
// Информация: 0
// Информация: true

deleteRecord(id)


Используйте этот метод для удаления записи.

При вызове метода в выборке записей с указанием параметра удаляется запись с конкретным ID. При отсутствии параметра id будет удалена текущая запись.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
idStringНетНет

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение true, если запись успешно удалена, в случае ошибки метод возвращает значение false.

Пример:

deleteRecord()
const task = new SimpleRecord('task');
task.get('155931135900000000');
if (!task.sys_id) {
return;
}
const isDeleted = task.deleteRecord();
if (isDeleted) {
ss.info('Задача с ID ' + task.sys_id + ' была удалена!');
return;
}
ss.error(task.getErrors());

get(propertyOrValue, value)


Используйте этот метод, чтобы загрузить объект из базы данных по значению поля или, в некоторых случаях, по ID. Параметр propertyOrValue принимает значение ID записи или имени свойства. Если значение равно имени свойства, второй параметр value является обязательным.

внимание
  • Передача значения null или пустой строки в качестве значения параметра propertyOrValue ведет к исключению: Аргумент 1 функции "get()" не может быть пустым.
  • При незаданном (undefined), null значении или пустой строке value, метод вернет объект новой записи.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyOrValueStringДаНет
valueStringНетnull

Возвращаемое значение:

ТипОписание
SimpleRecord objectМетод возвращает объект SimpleRecord из таблицы, указанной в запросе.

Пример:

get()
const current = new SimpleRecord('task');
current.get('163663310116371174');
примечание

В качестве значения для метода get() вместо ID записи может быть передано значение из Reference поля в формате current.{reference_field_name}. Пример скрипта:

SimpleRecord как аргумент
const task = new SimpleRecord('task');
task.setLimit(1);
task.query();
if (!task.next()) {
ss.info('Нет задач!');
return;
}

const user = new SimpleRecord('user');
user.get(task.caller);
user.language_id = '156628684306541141'; // Английский
ss.info(user.update());
// Информация: 167515292501757147

getAttributes()


Используйте метод, чтобы получить объект с атрибутами текущей записи в качестве ключей и значений ключей.

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект с атрибутами записи и их значениями.

Пример:

getAttributes()
const userRecord = ss.getUser();
ss.info(userRecord.getAttributes());
// Информация: {"sys_id":"155931135900000001","sys_created_at":"2019-09-30 00:00:00","sys_updated_at":"2021-06-28...

getClassDisplayValue()


Используйте метод, чтобы получить заголовок текущей таблицы.

Возвращаемое значение:

ТипОписание
StringМетод возвращает заголовок таблицы записи.

Пример:

getClassDisplayValue()
const current = new SimpleRecord('task');
current.get('163663310116371174');
ss.info(current.getClassDisplayValue());
// Информация: Задачи

getConditionQuery()


Используйте метод, чтобы получить текущее условие запроса.

Возвращаемое значение:

ТипОписание
StringМетод возвращает условие запроса.

Пример:

getConditionQuery()
const task = new SimpleRecord('task');
const condition = task.addQuery('state', '7');
condition.addOrCondition('priority', '<', '3');
ss.info('Условие до запроса: ' + task.getConditionQuery());
task.query();
ss.info('Условие после: ' + task.getConditionQuery());
// Информация: Условие до запроса: (state=7)^OR(priority<3)
// Информация: Условие после:

getDisplayValue(property)


Используйте метод, чтобы получить отображаемое значение параметра записи. Например, для поля Reference возвращается название сущности, а не ID.

Без параметра данный метод возвращает отображаемое значение записи из поля с установленным флажком Отображаемое поле.

В статье отображаемые значения в серверных скриптах по типам колонок.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyStringНетnull

Возвращаемое значение:

ТипОписание
StringМетод возвращает отображаемое значение записи или поля. Для полей типа Translated Text возвращается значение для текущего Языка интерфейса системы.

Пример:

getDisplayValue()
const current = new SimpleRecord('task');
current.get('163663310116371174');
ss.info(current.getDisplayValue('caller'));
ss.info(current.getValue('caller'));
// Информация: Иван Иванов
// Информация: 155931135900000001

getErrors()


Используйте этот метод, чтобы получить сообщения об ошибке в случае сбоя при создании, обновлении или удалении записи.

Используйте этот метод для контроля проведения операции с записью в скрипте.

предупреждение

Настоятельно рекомендуется использовать данный метод, так как некоторые ошибки могут не отображаться в процессе отладки.

Например, ошибки в запросах условия, переданных addEncodedQuery(condition) или аналогичным методом, можно получить, вызвав getErrors.

Возвращаемое значение:

ТипОписание
Array of StringsМетод возвращает значения ошибок.

Пример:

getErrors()
const record = new SimpleRecord('user');
const insertedRecordId = record.insert();
if (insertedRecordId == 0) {
ss.info(record.getErrors());
}
// Информация: ["Поле \"\"Логин\" [username]\" обязательно для заполнения. (id записи: )",...

getJournalInput()


Используйте этот метод, чтобы получить объект поля Journal Input, которым вы можете оперировать с помощью методов класса Comment.

примечание

При попытке сохранения записи SimpleRecord выполняются следующие действия:

  • если поле message объекта Journal Input пустое, запись сохраняется без комментария;
  • если поле author объекта Journal Input пустое, запись сохраняется с комментарием от имени текущего пользователя.
НаименованиеТипОбязательноЗначение по умолчанию
nameStringДаНет

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект Journal Input.

Пример:

getJournalInput()
const current = new SimpleRecord('task');
current.get('163663310116371174');
let work_notes = current.getJournalInput('work_notes')
ss.info(work_notes);
// Информация: "{'message':'','author':'155931135900000001'}"

Comment

Данный класс содержит методы, которые позволяют администратору системы отправлять сообщения от имени других пользователей. Методы этого класса позволяют оперировать объектом поля Journal Input, полученным с помощью метода getJournalInput() класса SimpleRecord.

предупреждение

У класса Comment нет конструктора, поэтому создание объекта класса недоступно.

setComment()

Используйте этот метод, чтобы задать текст и автора сообщения.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
messageStringДаНет
authorStringНетnull

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект Journal Input.

Пример:

setComment()
const current = new SimpleRecord('task');
current.get('163663310116371174');
let work_notes = current.getJournalInput('work_notes')
ss.info(work_notes); // В поле автор устанавливается ID текущего пользователя
// Информация: "{'message':'','author':'155931135900000001'}"
work_notes.setComment('message', '1000000000001'); // автором устанавливается пользователь с id = 1000000000001
ss.info(work_notes);
// Информация: "{'message':'message','author':'1000000000001'}"
work_notes.setComment('message1') // автором устанавливается текущий пользователь
ss.info(work_notes);
// Информация: "{'message':'message1','author':'155931135900000001'}"
setMessage()

Используйте этот метод, чтобы задать текст сообщения.

Если параметр message не задан, то комментарий не сохранится.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
messageStringДаНет

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект Journal Input.

Пример:

setMessage()
const current = new SimpleRecord('task');
current.get('163663310116371174');
let work_notes = current.getJournalInput('work_notes')
ss.info(work_notes);
// Информация: "{'message':'','author':'155931135900000001'}"
work_notes.setMessage('message')
// Информация: "{'message':'message','author':'155931135900000001'}"
setAuthor()

Используйте этот метод, чтобы задать автора сообщения.

Если параметр author не задан, то автором будет текущий пользователь.

НаименованиеТипОбязательноЗначение по умолчанию
authorStringНетnull

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект Journal Input.

Пример:

setAuthor()
const current = new SimpleRecord('task');
current.get('163663310116371174');
let work_notes = current.getJournalInput('work_notes')
ss.info(work_notes);
// Информация: "{'message':'','author':'155931135900000001'}"
work_notes.setAuthor('1000000000001')
// Информация: "{'message':'','author':'1000000000001'}"

getLabel(property)


Используйте этот метод, чтобы получить заголовок поля.

примечание

Метод getLabel() не используется с атрибутами REM. Вместо этого используйте метод getTitle().

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyStringДаНет

Возвращаемое значение:

ТипОписание
StringМетод возвращает название поля.

Пример:

getLabel()
const current = ss.getUser();
const fieldLabel = current.getLabel('username');
ss.addErrorMessage('Поле "' + fieldLabel + '" должно быть заполнено');
// Поле "Логин" должно быть заполнено

getReModelId()


Используйте этот метод, чтобы получить ID расширенной модели записи, относящейся к текущей записи. Используйте метод setReModelId, чтобы установить новый ID модели.

Возвращаемое значение:

ТипОписание
StringМетод возвращает ID модели. Если модель не найдена, метод возвращает значение null.

Пример:

getReModelId()
(function executeRule(current, previous = null /*not null only when action is update*/) {
if (current.getReModelId()) {
const model = new SimpleRecord('sys_rmc_model');
model.get(current.getReModelId()); // текущая модель
current.$$service = model.getValue('cmdb_service_id'); // Передает в сервис, если поле существует
}
})(current, previous);

getRowCount()


Используйте этот метод, чтобы получить количество элементов в выборке.

Возвращаемое значение:

ТипОписание
IntegerМетод возвращает количество элементов в выборке.

Пример:

getRowCount()
const task = new SimpleRecord('task');
task.query();
ss.addInfoMessage('Количество всех задач: ' + task.getRowCount());
//Количество всех задач: 2

getTableName()


Используйте этот метод, чтобы получить системное название текущей таблицы.

Возвращаемое значение:

ТипОписание
StringМетод возвращает системное название текущей таблицы.

Пример:

getTableName()
const current = ss.getUser();
ss.info('/list/' + current.getTableName() + '/' + current.sys_id);
// Информация: /list/user/155931135900000001

getTitle(attribute)


Используйте метод, чтобы получить заголовок указанного атрибута расширенной модели записи (REM).

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
columnStringДаНет

Возвращаемое значение:

ТипОписание
StringМетод возвращает заголовок атрибута REM.

Пример:

getTitle()
const current = new SimpleRecord('task');
current.get('163638951512716126');
if (current.sys_id) {
ss.info(current.rem_attr.getTitle('reviewed'));
}
// Информация: Проверка завершена
const current = new SimpleRecord('task');
current.get('163638951512716126');
if (current.sys_id) {
ss.info(current.rem_attr.getTitle('reviewed'));
}
// Информация: Проверка завершена
примечание

Чтобы вернуть колонки, заголовки которых не являются частью модели расширенной записи, используйте метод getLabel().

getTranslation()


Используйте этот метод, чтобы получить перевод на указанный язык.

Метод доступен при обращении к полю типа Translated Text или REM-атрибуту в классе SimpleRecord.

Допустимый формат обращения: record.getTranslatedText(имя_поля).getTranslation(). Для получения объекта Translated Text используйте метод getTranslatedText().

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
languageCodeString/NullНетНет

Возвращаемое значение:

ТипОписание
StringМетод возвращает перевод на указанный язык или пустую строку, если перевод не найден или запись, к которой обращался метод, не существует в системе.

Если параметру languageCode не задано значение, будет получен перевод на текущий Язык интерфейса системы.

Пример:

getTranslation()
const record = new SimpleRecord('task');
record.get('163663310116371174');
const translation = record.getTranslatedText('translated_text').getTranslation('ru');
const remTranslations = record.rem_attr.getTranslatedText('translated_text_re_attribute').getTranslation('ru');
// Пример возвращаемого значения: "тест"

getTranslatedText()


Используйте этот метод, чтобы получить объект типа Translated Text в методах управления переводами getTranslation(), getTranslations(), setTranslation() и setTranslations(). Метод getTranslatedText() также можно использовать напрямую.

Метод доступен при обращении к полю типа Translated Text или REM-атрибуту в классе SimpleRecord.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
fieldNameStringДаНет

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект типа Translated Text.

При прямом выводе метод возвращает:

  • строковое значение перевода на текущий Язык интерфейса;
  • строковое значение перевода на базовый язык (английский), если для текущего Языка интерфейса нет перевода;
  • пустую строку, если нет вышеперечисленных переводов или запись, к которой обращался метод, не существует в системе.

Пример:

getTranslatedText()
const record = new SimpleRecord('task');
record.get('163663310116371174');
const translatedText = record.getTranslatedText('translated_text');
const reTranslatedText = record.rem_attr.getTranslatedText('translated_text_re_attribute');

translatedText.setTranslation('New translation', 'en');
reTranslatedText.setTranslation('New REM-translation', 'en');
record.update();
// Пример возвращаемого значения: "test"

getTranslations()


Используйте этот метод, чтобы получить все существующие для поля переводы.

Метод доступен при обращении к полю типа Translated Text или REM-атрибуту в классе SimpleRecord.

Допустимый формат обращения: record.getTranslatedText(имя_поля).getTranslations(). Для получения объекта Translated Text используйте метод getTranslatedText().

У метода нет входных параметров.

Возвращаемое значение:

ТипОписание
ObjectМетод возвращает объект, в котором ключи – это коды языков, а значения – соответствующие переводы.

Если переводы не были установлены, метод возвратит {"en":""}.

Если запись, к которой обращался метод, не существует в системе, метод вернет пустой массив.

Пример:

getTranslations()
const record = new SimpleRecord('task');
record.get('163663310116371174');
const translations = record.getTranslatedText('translated_text').getTranslations();
const remTranslations = record.rem_attr.getTranslatedText('translated_text_re_attribute').getTranslations();
// Пример возвращаемого значения: {"en": "test", "ru": "тест"};

getValue(property)


Используйте метод, чтобы получить значение указанного атрибута объекта.

Если поле относится к типу Reference или List, возвращается его значение ID.

В статье отображаемые значения в серверных скриптах по типам колонок.

внимание

Используйте этот метод, чтобы получить значения полей типа Reference вместо dot-walking.

Например, current.getValue('reference_field') вместо current.reference_field.sys_id.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyStringДаНет

Возвращаемое значение:

ТипОписание
AnyМетод возвращает значение указанного атрибута объекта. Для полей типа Translated Text возвращается значение для текущего Языка интерфейса системы.

Пример:

getValue()
const current = ss.getUser();
const user = new SimpleRecord('user');
user.addQuery('timezone_id', current.getValue('timezone_id'));
user.selectAttributes('sys_id');
user.query();
ss.info(user.getRowCount() + ' пользователя в вашем часовом поясе');
// Информация: 24 пользователя в вашем часовом поясе
примечание

Вы также можете обратиться напрямую к значению ссылочного поля с учетом контекста используя оператор '$$'. Это позволяет проверить наличие дополнительных полей и получить их значение. Подробнее читайте в статье Использование dot-walking в скриптах.

hasAttachment()


Используйте этот метод, чтобы проверить, имеет ли указанная запись вложение.

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает true, если в записи есть вложение, если нет, метод возвращает false.

Пример:

hasAttachment()
const current = new SimpleRecord('task');
current.get('163663310116371174');
const hasAttach = current.hasAttachment();
if (!hasAttach) {
ss.addErrorMessage('Нужно прикрепить файл');
return;
}
current.state = '2'; // Открыто
current.update();

initialize()


Используйте этот метод, чтобы заполнить все доступные поля предопределенными значениями по умолчанию.

Он подходит только для новых записей, которые никогда не сохранялись.

Метод вызывается автоматически при создании записи.

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

initialize()
const taskRecord = new SimpleRecord('task');
ss.info(taskRecord.getAttributes().caller);
taskRecord.initialize();
ss.info(taskRecord.getAttributes().caller);
// Информация:
// Информация: 155931135900000001

insert()


Используйте метод, чтобы создать новую запись со значения полей объекта.

Если запись не создана, метод возвращает '0' (ноль) и генерирует сообщение об ошибке, которое можно получить с помощью метода getErrors() method.

Возвращаемое значение:

ТипОписание
String
  • Если запись не была создана, метод возвращает '0' (ноль), и генерирует сообщение со списком ошибок.
  • Если запись была создана, метод возвращает ID созданной записи.

Пример:

insert()
const newTask = new SimpleRecord('task');
newTask.subject = 'Subtask';
const insertedTaskID = newTask.insert();
ss.info(`/record/task/${insertedTaskID}`);
// Информация: /record/task/163675231910113745

isTableVcsEnabled()


Используйте этот метод, чтобы проверить установлен ли флажок Контроль версий для указанной таблицы.

Возвращаемое значение:

ТипОписание
BooleanМетод возвращает значение атрибута Контроль версий таблицы записи.

Пример:

isTableVcsEnabled()
const current = new SimpleRecord('user');
ss.info(current.isTableVcsEnabled());
// Информация: false

matchesCondition(condition)


Используйте этот метод, чтобы проверить, соответствует ли текущая запись условию.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
conditionStringНет''

Возвращаемое значение:

ТипОписание
Boolean

Метод возвращает true, если запись соответствует указанным условиям, в противном случае метод возвращает false.

Также метод возвращает false, если в методе selectAttributes() не указаны атрибуты из условия метода matchesCondition().

Пример:

matchesCondition()
const task = new SimpleRecord('task');
task.description = 'emaio';
ss.info(task.matchesCondition('descriptionLIKEemail')); // false
task.description = 'email';
ss.info(task.matchesCondition('descriptionLIKEemail')); // true

next()


Используйте этот метод, чтобы получить следующую запись в запросе.

Возвращаемое значение:

ТипОписание
SimpleRecord object or Boolean
  • При первом вызове, метод возвращает первую запись в запросе.
  • Если запрос пуст, метод возвращает false.

Пример:

next()
const user = new SimpleRecord('user');
user.setLimit(1);
user.query();
user.next();
ss.info(user.sys_id);
// Информация: 100000000000000000

orderBy(column)


Используйте этот метод, чтобы отсортировать записи в порядке возрастания.

подсказка

Используйте этот метод несколько раз, чтобы отсортировать записи по нескольким колонкам.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
columnStringДаНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

orderBy()
const firstLog = new SimpleRecord('sys_log');
firstLog.orderBy('sys_created_at'); // сначала старые записи
firstLog.addQuery('message', 'like', 'Connection');
firstLog.setLimit(1);
firstLog.selectAttributes(['message', 'sys_created_at']);
firstLog.query();
firstLog.next();
ss.info(firstLog.sys_created_at + ' - ' + firstLog.message);
// Информация: 2021-06-03 06:34:02 - IMAP IMAP (Default): Ошибка соединения: ...

orderByDesc(column)


Используйте этот метод, чтобы отсортировать записи в порядке убывания.

подсказка

Используйте этот метод несколько раз, чтобы отсортировать записи по нескольким колонкам.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
columnStringДаНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

orderByDesc()
const lastComment = new SimpleRecord('sys_activities_stream_field');
lastComment.orderByDesc('sys_created_at'); // сначала новая запись
lastComment.setLimit(1);
lastComment.selectAttributes(['value', 'sys_created_by']);
lastComment.query();
lastComment.next();
ss.info(lastComment.sys_created_by.display_name + ': ' + lastComment.value);
// Информация: Иван Иванов: Тестовый комментарий

query()


Используйте этот метод, чтобы применить запрос для получения выборки из базы данных. Выборка будет сохранена в объекте, для которого этот метод был вызван.

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

query()
const tasks = new SimpleRecord('task');
tasks.addQuery('sys_created_at', '>', '2020-01-01');
tasks.orderBy('sys_created_at');
tasks.setLimit(2);
tasks.query();
while (tasks.next()) {
ss.info('Номер задачи: ' + tasks.number);
}
// Информация: Номер задачи: TSK0000001
// Информация: Номер задачи: TSK0000003

selectAttributes(attributes)


Используйте этот метод для оптимизации запросов к базе данных, особенно когда необходимо получить только несколько полей объекта, а не весь объект.

предупреждение

Не используйте этот метод для выбора записей, которые нужно обновить или удалить после выбора. Выполненное действие также может вызвать следующее исключение:

Вы не можете обновить запись с набором сокращенных атрибутов. Удалите вызов метода selectAttributes и обновите снова.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
attributesString/ArrayДаНет

Передавайте значение одного атрибута в качестве строки. Для передачи большего количества атрибутов, используйте массив, как в примере ниже.

внимание

При одновременном использовании методов selectAttributes() и matchesCondition() убедитесь, что все атрибуты, применяющиеся в условии matchesCondition(), указаны в методе selectAttributes(). В противном случае метод matchesCondition() будет возвращать значение false. Количество атрибутов, указанных в selectAttributes(), не ограничивается атрибутами метода matchesCondition().

Возвращаемое значение:

ТипОписание
SimpleRecord object

Метод возвращает объект SimpleRecord, содержащий атрибуты и значения.

Независимо от исходного содержимого набора атрибутов, возвращаемый объект всегда содержит атрибут ID. Смотрите примеры ниже.

Примеры:

selectAttributes (String)
const record = new SimpleRecord('user');
record.selectAttributes('email');
record.query();
record.next();
ss.info(record.getAttributes());
// Информация: {"email":"ivan.ivanov@email.com","sys_id":"162423321917274937"}
selectAttributes (Array)
const record = new SimpleRecord('user');
record.selectAttributes(['email', 'username']);
record.query();
record.next();
ss.info(record.getAttributes());
// Информация: {"email":"john.doe@email.com","username":"john.doe","sys_id":"162423321917274937"}

setAbortAction(flag, message)


Используйте этот метод, чтобы прервать текущую операцию и отобразить всплывающее сообщение об ошибке в правом нижнем углу экрана пользователя. Для этого укажите исходное сообщение категории app как значение параметра message.

внимание
  • Скрипт, написанный после вызова данного метода, не будет выполняться.
  • Не рекомендуется использовать этот метод с бизнес-правилами типа async, так как это может привести к непредсказуемому поведению системы.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
flagBooleanДаНет
messageStringНетНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setAbortAction()
const current = new SimpleRecord('task');
current.get('163663310116371174');
const hasAttach = current.hasAttachment();

if (!hasAttach) {
current.setAbortAction(true, 'No attachments');
}

current.state = '2'; // Открыто
current.update();

setLimit(maxNumRecords)


Используйте этот метод, чтобы ограничить количество записей в выборке по условию.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
maxNumRecordsIntegerДаНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setLimit()
const record = new SimpleRecord('user');
record.setLimit(3);
record.query();
ss.info(record.getRowCount());
// Информация: 3

setMultipleValue(property,value)


Используйте этот метод, чтобы установить значения полей для каждой записи в текущей выборке. Для полей типа Translated Text устанавливается значение для текущего Языка интерфейса системы.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyStringДаНет
valueAnyДаНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setMultipleValue()
const task = new SimpleRecord('task');
task.addQuery('state', '7'); // Черновик
task.query();
ss.info(task.getRowCount());
task.setMultipleValue('state', '2'); // Открыто
// task.updateMultiple();

setReModelId(reModelId)


Используйте этот метод, чтобы установить ID определенной расширенной модели записи. Чтобы получить ID модели, используйте метод getReModelId.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
reModelIdStringДаНет

Если параметр reModelId равен null, расширенная модель, относящаяся к записи, будет отвязана.

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

getReModelId()
const task = new SimpleRecord('task');
task.get('163352033916904699');
if (task.getValue('service') === '164069027812962298') { // Почтовый сервер
task.setReModelId('158569205818704980'); // Запрос доступа к почтовому серверу
} else {
task.setReModelId(null);
}
task.update();
внимание
  • При вызове данного метода на экземпляре SimpleRecord, значения его атрибутов, привязанных к предыдущей модели, будут сброшены.
  • После вызова данного метода и обновления текущей записи, значения атрибутов предыдущей модели будут утеряны.

Пример:

setReModelId()
(function executeRule(current, previous = null /*not null only when action is update*/ ) {
// правило срабатывает при изменении услуги

ss.importIncludeScript('getRemAttributes');
const rmc = new SimpleRecord('sys_rmc_model');
rmc.addQuery('cmdb_service_id', current.getValue('service'));
rmc.addQuery('active', true);
rmc.selectAttributes('sys_id');
rmc.setLimit(1);
rmc.query();
if (rmc.next()) {
const previousModelAttributes = getRemAttributes(current);
current.setReModelId(rmc.sys_id);
const currentModelAttributes = getRemAttributes(current);

Object.keys(previousModelAttributes).forEach(attributeName => {
if (currentModelAttributes.hasOwnProperty(attributeName)) {
current.rem_attr[attributeName] = previousModelAttributes[attributeName];
}
})
} else {
current.setReModelId(null);
}

})(current, previous);

setTranslation()


Используйте этот метод, чтобы задать перевод на указанный язык. Если перевод на указанный язык уже существует, его значение будет обновлено.

Метод доступен при обращении к полю типа Translated Text или REM-атрибуту в классе SimpleRecord.

Допустимый формат обращения: record.getTranslatedText(имя_поля).setTranslation(). Для получения объекта Translated Text используйте метод getTranslatedText().

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
valueStringДаНет
languageCodeString/NullНетНет

Если параметру кода языка languageCode не задано значение, перевод value будет установлен для текущего Языка интерфейса. Переводы можно устанавливать только для языков, добавленных в таблицу Язык (sys_language).

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setTranslation()
const record = new SimpleRecord('task');
record.get('163663310116371174');
record.getTranslatedText('translated_text').setTranslation('New Translation', 'en');
record.rem_attr.getTranslatedText('translated_text_re_attribute').setTranslation('New Translation', 'en');

setTranslations()


Используйте этот метод, чтобы задать перевод на указанные языки. Если перевод на указанный язык уже существует, его значение будет обновлено.

Метод доступен при обращении к полю типа Translated Text или REM-атрибуту в классе SimpleRecord.

Допустимый формат обращения: record.getTranslatedText(имя_поля).setTranslations(). Для получения объекта Translated Text используйте метод getTranslatedText().

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
translationsObjectДаНет

В качестве ключей в объекте translations укажите коды языка, а в качестве значений – соответствующие переводы. Переводы можно задавать только для языков, добавленных в таблицу Язык (sys_language).

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setTranslations()
const record = new SimpleRecord('task');
record.get('163663310116371174');
const translations = {"en": "test", "ru": "тест"};
record.getTranslatedText('translated_text').setTranslations(translations);
record.rem_attr.getTranslatedText('translated_text_re_attribute').setTranslations(translations);
record.update();

setValue(property, value)


Используйте этот метод, чтобы установить значение поля в текущей записи. Для полей типа Translated Text устанавливается значение для текущего Языка интерфейса системы.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
propertyStringДаНет
valueAnyДаНет

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

setValue()
const task = new SimpleRecord('task');
task.setValue('subject', 'mail');
task.insert();

silentMode(enable)


Используйте этот метод для обновления записи без выполнения бизнес-логики, реализованной бизнес-правилами, уведомлениями, рабочими процессами и другими, либо чтобы избежать создания и обновления индикаций.

Параметры:

НаименованиеТипОбязательноЗначение по умолчанию
enableBooleanНетtrue

Возвращаемое значение:

ТипОписание
VoidМетод не возвращает значение.

Пример:

silentMode()
const task = new SimpleRecord('task');
task.addQuery('active', false);
task.addQuery('approval_state', 'isempty');
task.query();
ss.info(task.getRowCount());
task.silentMode();
task.setMultipleValue('approval_state', 'not_requested'); // задает значение по умолчанию
//task.updateMultiple();

update()


Используйте этот метод для обновления записи в базе данных.

примечание

Используйте этот метод для существующих записей.

  • Изменения будут применены, только если запись уже существовала.
  • Если запись ранее не существовала, метод getErrors() вернет сообщение об ошибке: Ошибка при обновлении записи, используйте метод 'insert()'

Возвращаемое значение:

ТипОписание
String
  • Если запись не была обновлена, метод возвращает '0' и генерирует сообщение со списком ошибок.
  • При отсутствии ошибок метод возвращает ID обновленной записи.

Пример:

update()
const current = new SimpleRecord('user');
current.get(ss.getUserId());
current.timezone_id = '156076775207670452'; // UTC
ss.info(current.update());
ss.info(current.getErrors());
// Информация: 155931135900000001
// Информация: []

updateMultiple()


Используйте этот метод для обновления всех записей выборки.

Возвращаемое значение:

ТипОписание
Boolean
  • Если произошли ошибки проверки и запись не была обновлена, метод возвращает false и генерирует сообщение со списком ошибок.
  • При отсутствии ошибок метод возвращает значение true.

Пример:

updateMultiple()
const task = new SimpleRecord('task');
task.addQuery('state', '0'); // Открыто
task.query();
ss.info(task.getRowCount());
task.setMultipleValue('state', '10'); // Отменено
task.updateMultiple();