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

SimpleSystem

Методы этого класса предназначены для получения информации о системе, текущем пользователе и других данных.

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

подсказка

Перед выполнением некоторых методов этого класса система проводит проверку правил ACL на требуемую таблицу, запись и колонку для текущего пользователя. Если при выполнении метода возникает ошибка, связанная с недостаточностью прав ACL для текущего пользователя, система отображает исключение:

  • При необработанном исключении система создает запись в таблице Журнал исключений (sys_log_exception).
  • При обработанном исключении система выполняет логику, созданную разработчиком.

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

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

ss.addInfoMessage(message, params)


Используйте этот метод для отображения информационного сообщения на языке текущего пользователя в правом нижнем углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

NameТипОбязательныйЗначение по умолчанию
messageStringДаНет
paramsObjectНет{}

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

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

Пример:

ss.addInfoMessage()
ss.addInfoMessage('Осталось три дня');
// или
ss.addInfoMessage('Осталось {count} {noun}', {'count': 'три', 'noun': 'дня'});

ss.addErrorMessage(message, params)


Используйте этот метод для отображения сообщения об ошибке на языке текущего пользователя в нижнем правом углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.addErrorMessage()
ss.addErrorMessage('"Наименование" не может быть пустым');
// или
ss.addErrorMessage('"{title}" не может быть пустым', {title: "Наименование"});

ss.addSuccessMessage(message, params)


Используйте этот метод для отображения сообщения об успешно выполненном действии на языке текущего пользователя нижнем правом углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.addSuccessMessage()
ss.addSuccessMessage('Успешно обновлено');
// или
ss.addSuccessMessage('Успешно {action_name}', {action_name: "обновлено"});

ss.info(message)


Используйте этот метод, чтобы добавить информационное сообщение в системный журнал, расположенный в таблице Основной журнал (sys_log).

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.info()
const task = new SimpleRecord('task');
task.orderByDesc('sys_created_at');
task.setLimit(1);
task.selectAttributes('number');
task.query();
while(task.next()){
ss.info(task.number);
}

ss.debug(message)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

NameТипОбязательныйЗначение по умолчанию
messageAnyДаНет

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

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

Пример:

ss.debug()
const insertedID = inquiry.insert();
if (insertedID == '0') {
ss.debug(inquiry.getErrors());
} else {
ss.debug(`Создан запрос с ID ${insertedID}`)
}

ss.warning(message)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.warning()
const task = new SimpleRecord('task');
task.query();
while(task.next()){
ss.warning(task.sys_id);
}

ss.error(message)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.error()
(function executeRule(current, previous /*null when async*/ ) {
const nowDateTime = new SimpleDateTime();
const targetDateTime = new SimpleDateTime(current.appropriate_datetime);
const secondsLeft = targetDateTime.getNumericValue() - nowDateTime.getNumericValue();
if (secondsLeft < 1800) { // осталось меньше получаса
ss.addErrorMessage('Время начала проведения работ не может начаться ранее, чем через полчаса');
ss.error(`Срочный запрос: осталось ${secondsLeft} до начала работ`);
current.setAbortAction(true);
}
})(current, previous);

ss.eventQueue(name, current, param_1, param_2, param_3, param_4, param_5)


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

Значение параметра name должно совпадать с наименованием записи Реестра событий (sys_event_register).

Таблица переданного текущего объекта должна совпадать с таблицей, указанной в записи Реестра событий (sys_event_register) или таблицей, расширенной от нее.

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Создание для таблицы Событие (event). Если проверка правил ACL отключена в серверных скриптах, система не выполняет проверку этого правила доступа для пользователя с правами вендора.

Параметры:

НазваниеТипОбязательныйЗначение по умолчанию
nameStringДаНет
currentSimpleRecord objectДаНет
param_1StringНетnull
param_2StringНетnull
param_3StringНетnull
param_4StringНетnull
param_5StringНетnull

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

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

Пример:

ss.eventQueue()
if (current.state != '10') { // Не закрыт
ss.eventQueue('incident.close', current, ss.getUserID());
}

ss.eventQueueScheduled(name, current, process_started_at, param_1, param_2, param_3, param_4, param_5)


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

Значение параметра name должно совпадать с наименованием записи Реестра событий (sys_event_register).

Таблица переданного текущего объекта должна совпадать с таблицей, указанной в записи Реестра событий (sys_event_register) или таблицей, расширенной от нее.

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Создание для таблицы Событие (event). Если проверка правил ACL отключена в серверных скриптах, система не выполняет проверку этого правила доступа для пользователя с правами вендора.

Параметры:

НазваниеТипОбязательныйЗначение по умолчанию
nameStringДаНет
currentSimpleRecord objectДаНет
process_started_atSimpleDateTime objectДаНет
param_1StringНетnull
param_2StringНетnull
param_3StringНетnull
param_4StringНетnull
param_5StringНетnull

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

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

Пример:

ss.eventQueueScheduled()
if (current.state != '10') { // Не закрыт
const plusThreeDays = new SimpleDateTime(); // сейчас
plusThreeDays.addDays(3); // + 3 дня
ss.eventQueueScheduled('incident.autoclose', current, plusThreeDays, ss.getUserID());
}

ss.generateResetToken()


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

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

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

Пример:

generateResetToken()
const resetToken = ss.generateResetToken();
ss.info(resetToken);
//Информация: l_kxwLi-TsTwmgLYk3euOCeXeA14nE2U_1610699284

ss.generateUrlAction(userId, script, expire)


Используйте метод, чтобы получить URL-адрес. При переходе на него выполняется скрипт, указанный в параметре script.

По умолчанию после перехода по URL-адресу открывается главная страница. Если необходимо перенаправить пользователя на другую страницу, введите ее адрес в переменную redirectUrl внутри скрипта.

По умолчанию отображается всплывающее сообщение Действие выполнено. Чтобы изменить текст сообщения, измените переменную message внутри скрипта.

Всплывающее сообщение можно отключить. Для этого установите message = null или ''.

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Создание для таблицы Действия по URL (sys_url_action).

Параметры:

НазваниеТипОбязательныйЗначение по умолчанию
userIdStringДаНет
scriptStringДаНет
expireStringДаНет

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

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

Пример:

ss.generateUrlAction()
const simpleInstanceUri = ss.getProperty('simple.instance.uri');
const instanceUrl = simpleInstanceUri.startsWith('https://') ? simpleInstanceUri : 'https://' + simpleInstanceUri;


const аctionScript = `
const task = new SimpleRecord('task');
task.get('${current.sys_id}');
if (task.state == '7') { // Завершена
task.state = '10'; // Закрыта
task.update();
}
message = null;
redirectUrl = '${instanceUrl}' + '/record/task/' + '${current.sys_id}';
`;
const nowDateTime = new SimpleDateTime();
nowDateTime.addDays(3);
const url = ss.generateUrlAction(current.getValue('caller'), аctionScript, nowDateTime.getValue());
ss.info(url);
//Информация: your-instance-uri.simpleone.ru/url-action/run?key=Q2GqNFRXCRY2

ss.getApplicationId()


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

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для таблицы Приложение (sys_application).

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

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

Пример:

ss.getApplicationId()
const appId = ss.getApplicationId();
ss.info(appId);
//Информация: 155931135900000002

ss.getProperty(name)


Используйте этот метод, чтобы получить значение из записи таблицы Системные свойства (sys_property) на основе параметра name.

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для таблицы Системные свойства (sys_property) и колонки Значение (value).

Параметры:

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

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

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

Пример:

ss.getProperty()
ss.info(ss.getProperty('simple.passwordreset.enabled'));
//Информация: false

ss.setProperty(name, value, description)


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

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

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операции Чтение, Создание и Редактирование для таблицы Системные свойства (sys_property).

Параметры:

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

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

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

Пример:

ss.setProperty()
ss.setProperty('user.timezone.default', 'Europe/Moscow', 'Укажите часовой пояс пользователя по умолчанию');

ss.getSession()


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

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

ТипОписание
SimpleSession objectМетод возвращает объект SimpleSession текущего сеанса.

Пример:

ss.getSession()
const session = ss.getSession();
const ipAddress = session.getClientIP();
ss.info(ipAddress);
//Информация: 127.0.0.1

ss.getUser()


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

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для записи и колонок таблицы Пользователь (user).

внимание

В возвращаемом объекте недоступны свойства таблицы Сотрудники (employee) и других дочерних таблиц от таблицы Пользователи (user).

let user = ss.getUser();
user.work_schedule = '157165229904988595'; /* 24/7 */
user.update();

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

ТипОписание
SimpleRecord objectМетод возвращает объект SimpleRecord текущего пользователя.

Пример:

ss.getSession()
ss.info(ss.getUser().username);
//Информация: admin

ss.getUserID()


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

При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для таблицы Пользователь (user).

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

ТипОписание
StringМетод возвращает значение ID текущего пользователя.

Пример:

ss.getUserID()
const approval = new SimpleRecord('sys_approval');
approval.addQuery('approver_id', ss.getUserID());
approval.addQuery('state', 'requested');
approval.selectAttributes('sys_id');
approval.query();
if (approval.getRowCount() > 0) {
//...
}

ss.getDocIdByIds(tableId,recordId)


Используйте метод, чтобы на основе ID таблицы и ID записи таблицы получить строку со значением Document ID (32-значное значение UUID).

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

ТипОписание
StringМетод возвращает запись Document ID (32-значное значение UUID).

Пример:

ss.getDocIdByIds()
const docID = ss.getDocIdByIds(current.sys_db_table_id, current.sys_id);
const approval = new SimpleRecord('sys_approval');
approval.addQuery('item', docID);
approval.query();

ss.getTableIdByDocId(docId)


Используйте метод, чтобы на основе записи Document ID (32-значное значение UUID) получить ID таблицы.

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.getTableIdByDocId()
const tableID = ss.getTableIdByDocId(current.item);
const table = new SimpleRecord('sys_db_table');
table.get(tableID);
const record = new SimpleRecord(table.name);
const recordID = ss.getRecordIdByDocId(current.item);
record.get(recordID);
ss.addInfoMessage(record.sys_created_at);
//Информация: 2020-05-24 16:30:21

ss.getRecordIdByDocId(docId)


Используйте метод, чтобы на основе записи DocumentID (32-значное значение UUID) получить ID записи.

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.getRecordIdByDocId()
const tableID = ss.getTableIdByDocId(current.item);
const table = new SimpleRecord('sys_db_table');
table.get(tableID);
const record = new SimpleRecord(table.name);
const recordID = ss.getRecordIdByDocId(current.item);
record.get(recordID);
ss.addInfoMessage(record.sys_created_at);

ss.hasRole(role)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.hasRole()
const isUserManager = ss.hasRole('process_manager'); // true или false
return isUserManager;
внимание

Этот метод всегда возвращает значение true, если у пользователя есть указанная роль или роль admin. Чтобы проверить, есть ли у пользователя определенная роль, используйте следующий скрипт:

ss.hasRole
const MANAGER_ROLE = 'process_manager';
const userHasRole = new SimpleRecord('sys_user_has_role');
userHasRole.addQuery('user_id', ss.getUserId());
userHasRole.addQuery('role_id.name', MANAGER_ROLE);
userHasRole.setLimit(1);
userHasRole.selectAttributes(['sys_id']);
userHasRole.query();
const isManager = !!userHasRole.next();
return isManager

ss.importIncludeScript(name)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

Параметры:

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

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

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

Пример:

ss.hasRole()
ss.importIncludeScript('calculateCAB');
const approvers = [];
if (!!current.customized_cab) {
approvers = approvers.concat(current.customized_cab.split(','));
}
if (!current.ignore_automatically_generated_cab) {
const includeScriptResult = calculateCAB(current);
approvers = approvers.concat(includeScriptResult);
}

ss.setRedirect(url)


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

При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.

примечание

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

Не рекомендуетсяРекомендуется
https://instance.Пример.com/record/task/record/task

Параметры:

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

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

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

Пример:

ss.setRedirect()
ss.setRedirect(`/list/${current.getTableName()}`);
// Перенаправить на листовое представление текущей таблицы

ss.setRedirect('/record/task');
// Перенаправить на форму создания новой записи в таблице "Задачи"