SimpleSystem
Методы этого класса предназначены для получения информации о системе, текущем пользователе и других данных.
Этот класс не имеет конструктора, методы доступны через глобальный объект ss.
Перед выполнением некоторых методов этого класса система проводит проверку правил ACL на требуемую таблицу, запись и колонку для текущего пользователя. Если при выполнении метода возникает ошибка, связанная с недостаточностью прав ACL для текущего пользователя, система отображает исключение:
- При необработанном исключении система создает запись в таблице Журнал исключений (sys_log_exception).
- При обработанном исключении система выполняет логику, созданную разработчиком.
Когда серверный скрипт запускается системой от имени пользователя (например, при выполнении бизнес-правила, правила уведомлений или скрипта событий), проверка ACL в скрипте отключена.
Чтобы узнать о проводимых проверках правил доступа, обратитесь к описанию отдельных методов в этой статье.
ss.addInfoMessage(message, params)
Используйте этот метод для отображения информационного сообщения на языке текущего пользователя в правом нижнем углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Name | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | String | Да | Нет |
params | Object | Нет | {} |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
ss.addInfoMessage('Осталось три дня');
// или
ss.addInfoMessage('Осталось {count} {noun}', {'count': 'три', 'noun': 'дня'});
ss.addErrorMessage(message, params)
Используйте этот метод для отображения сообщения об ошибке на языке текущего пользователя в нижнем правом углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | String | Да | Нет |
params | Object | Нет | {} |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
ss.addErrorMessage('"Наименование" не может быть пустым');
// или
ss.addErrorMessage('"{title}" не может быть пустым', {title: "Наименование"});
ss.addSuccessMessage(message, params)
Используйте этот метод для отображения сообщения об успешно выполненном действии на языке текущего пользователя нижнем правом углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | String | Да | Нет |
params | Object | Нет | {} |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
ss.addSuccessMessage('Успешно обновлено');
// или
ss.addSuccessMessage('Успешно {action_name}', {action_name: "обновлено"});
ss.info(message)
Используйте этот метод, чтобы добавить информационное сообщение в системный журнал, расположенный в таблице Основной журнал (sys_log).
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | Any | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
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 | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | Any | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
const insertedID = inquiry.insert();
if (insertedID == '0') {
ss.debug(inquiry.getErrors());
} else {
ss.debug(`Создан запрос с ID ${insertedID}`)
}
ss.warning(message)
Используйте этот метод, чтобы добавить сообщение с предупреждением в системный журнал, расположенный в таблице Основной журнал (sys_log).
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | Any | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
const task = new SimpleRecord('task');
task.query();
while(task.next()){
ss.warning(task.sys_id);
}
ss.error(message)
Используйте этот метод, чтобы добавить сообщение об ошибке в системный журнал, расположенный в таблице Основной журнал (sys_log).
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
message | Any | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
(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 отключена в серверных скриптах, система не выполняет проверку этого правила доступа для пользователя с правами вендора.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
name | String | Да | Нет |
current | SimpleRecord object | Да | Нет |
param_1 | String | Нет | null |
param_2 | String | Нет | null |
param_3 | String | Нет | null |
param_4 | String | Нет | null |
param_5 | String | Нет | null |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
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 отключена в серверных скриптах, система не выполняет проверку этого правила доступа для пользователя с правами вендора.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
name | String | Да | Нет |
current | SimpleRecord object | Да | Нет |
process_started_at | SimpleDateTime object | Да | Нет |
param_1 | String | Нет | null |
param_2 | String | Нет | null |
param_3 | String | Нет | null |
param_4 | String | Нет | null |
param_5 | String | Нет | null |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
if (current.state != '10') { // Не закрыт
const plusThreeDays = new SimpleDateTime(); // сейчас
plusThreeDays.addDays(3); // + 3 дня
ss.eventQueueScheduled('incident.autoclose', current, plusThreeDays, ss.getUserID());
}
ss.generateResetToken()
Используйте этот метод для генерации токена, например, в случае запроса на сброс пароля.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает токен для сброса пароля. |
Пример:
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).
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
userId | String | Да | Нет |
script | String | Да | Нет |
expire | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает URL-адрес действия. |
Пример:
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 приложения. |
Пример:
const appId = ss.getApplicationId();
ss.info(appId);
//Информация: 155931135900000002
ss.getProperty(name)
Используйте этот метод, чтобы получить значение из записи таблицы Системные свойства (sys_property) на основе параметра name.
При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для таблицы Системные свойства (sys_property) и колонки Значение (value).
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
name | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает значение свойства, если доступно; в противном случае метод возвращает null. |
Пример:
ss.info(ss.getProperty('simple.passwordreset.enabled'));
//Информация: false
ss.setProperty(name, value, description)
Используйте этот метод, чтобы создать запись в таблице Системные свойства (sys_property) при помощи параметра name.
Если запись существует, то метод обновляет ее значение и описание.
При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операции Чтение, Создание и Редактирование для таблицы Системные свойства (sys_property).
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
name | String | Да | Нет |
value | String | Да | Нет |
description | String | Нет | null |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
ss.setProperty('user.timezone.default', 'Europe/Moscow', 'Укажите часовой пояс пользователя по умолчанию');
ss.getSession()
Используйте этот метод, чтобы получить информацию о текущем сеансе авторизации.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Возвращаемое значение:
Тип | Описание |
---|---|
SimpleSession object | Метод возвращает объект SimpleSession текущего сеанса. |
Пример:
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.info(ss.getUser().username);
//Информация: admin
ss.getUserID()
Используйте этот метод, чтобы получить ID текущего пользователя.
При выполнении этого метода система производит проверку правил доступа (ACL) текущего пользователя на операцию Чтение для таблицы Пользователь (user).
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает значение ID текущего пользователя. |
Пример:
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), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
tableId | String | Да | Нет |
recordId | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает запись Document ID (32-значное значение UUID). |
Пример:
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), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
docId | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает ID таблицы. |
Пример:
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), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
docId | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
String | Метод возвращает ID записи. |
Пример:
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), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
role | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Boolean | Метод возвращает значение true, если у пользователя есть указанная роль или роль admin; если нет, метод возвращает значение false. |
Пример:
const isUserManager = ss.hasRole('process_manager'); // true или false
return isUserManager;
Этот метод всегда возвращает значение true, если у пользователя есть указанная роль или роль admin. Чтобы проверить, есть ли у пользователя определенная роль, используйте следующий скрипт:
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), настроенных для текущего пользователя.
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
name | String | Да | Нет |
Возвращаемое значение:
Тип | Описание |
---|---|
Boolean | Метод не возвращает значение. |
Пример:
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 |
Параметры:
Название | Тип | Обязательный | Значение по умолчанию |
---|---|---|---|
url | String | Нет | '' |
Возвращаемое значение:
Тип | Описание |
---|---|
Void | Метод не возвращает значение. |
Пример:
ss.setRedirect(`/list/${current.getTableName()}`);
// Перенаправить на листовое представление текущей таблицы
ss.setRedirect('/record/task');
// Перенаправить на форму создания новой записи в таблице "Задачи"