SimpleSystem
Методы этого класса предназначены для получения информации о системе, текущем пользователе и других данных.
Этот класс не имеет конструктора, методы доступны через глобальный объект ss.
Перед выполнением некоторых методов этого класса система проводит проверку правил ACL для текущего пользователя. Если метод вызывается из клиентского скрипта и у текущего пользователя недостаточно прав, система создает запись в таблице Журнал исключений (sys_log_exception) с сообщением "Insufficient privileges to perform the operation".
Когда метод запускается на стороне сервера (например, в бизнес-правиле, скрипте системного события и т.п.), проверка ACL в скрипте отключена.
Чтобы узнать о проводимых проверках правил доступа, обратитесь к описанию отдельных методов в этой статье.
ss.addInfoMessage(message, params)
Используйте этот метод для отображения информационного сообщения на языке текущего пользователя в правом нижнем углу. Для этого в параметр message введите значение из таблицы Исходные сообщения (source_message) из категории app. Дополнительные сведения см. в разделе Локализация элементов интерфейса. Параметр params позволяет определить значения для динамических частей переведенного сообщения.
При выполнении этого метода система не производит проверку правил доступа (ACL), настроенных для текущего пользователя.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| 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}" не может быть пустым', {sidebar_label: "Наименование"});
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), настроенных для текущего пользователя.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| 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, используйте внешние скрипты с установленным флажком Отключить проверку 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, используйте внешние скрипты с установленным флажком Отключить проверку 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.generateResetToken() в одном серверном скрипте.
ss.generateUrlAction(userId, script, expire)
Используйте метод, чтобы получить URL-адрес. При переходе на него выполняется скрипт, указанный в параметре script.
По умолчанию после перехода по URL-адресу открывается главная страница. Если необходимо перенаправить пользователя на другую страницу, введите ее адрес в переменную redirectUrl внутри скрипта.
По умолчанию отображается всплывающее сообщение "Действие выполнено". Чтобы изменить текст сообщения, измените переменную message внутри скрипта.
Всплывающее сообщение можно отключить. Для этого установите message = null или ''.
При вызове метода в клиентском скрипте система производит проверку правил доступа (ACL) текущего пользователя на операцию Создание для таблицы Действия по URL (sys_url_action). Чтобы отключить проверку ACL, используйте внешние скрипты с установленным флажком Отключить проверку ACL.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| 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). Чтобы отключить проверку ACL, используйте внешние скрипты с установленным флажком Отключить проверку ACL.
Возвращаемое значение:
| Тип | Описание |
|---|---|
| String | Метод возвращает ID приложения. |
Пример:
const appId = ss.getApplicationId();
ss.info(appId);
//Информация: 155931135900000002
ss.getProperty(name)
Используйте этот метод, чтобы получить значение из записи таблицы Системные свойства (sys_property) на основе параметра name.
При вызове метода в клиентском скрипте с использованием SimpleAjax выполняется проверка доступа для текущего пользователя на операцию Чтение в таблице Системные свойства (sys_property). По умолчанию, в системе отсутствует запрет на чтение записей системных свойств.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| name | String | Да | Нет |
Возвращаемое значение:
| Тип | Описание |
|---|---|
| String | Метод возвращает значение свойства, если доступно; в противном случае метод возвращает null. |
Пример:
ss.info(ss.getProperty('simple.passwordreset.enabled'));
//Информация: false
ss.setProperty(name, value, description)
Используйте этот метод, чтобы создать запись в таблице Системные свойства (sys_property) при помощи параметра name.
Если запись существует, то метод обновляет ее значение и описание. Если запись не обнаружена, создается новая запись системного свойства с указанными параметрами.
При вызове метода в клиентском скрипте система производит проверку правил доступа (ACL) текущего пользователя на операции Чтение, Создание и Редактирование для таблицы Системные свойства (sys_property). Чтобы отключить проверку ACL, используйте внешние скрипты с установленным флажком Отключить проверку ACL.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| 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) текущего пользователя на операцию Чтение для таблицы, в которой создана его учетная запись. Чтобы отключить проверку ACL, используйте внешние скрипты с установленным флажком Отключить проверку ACL.
Возвращаемое значение:
| Тип | Описание |
|---|---|
| SimpleRecord object | Метод возвращает объект SimpleRecord текущего пользователя. |
Метод ss.getUser() всегда возвращает экземпляр SimpleRecord('user'), даже если учетная запись текущего пользователя находится не в таблице Пользователь (user), а в одной из ее дочерних таблиц, например, Сотрудник (employee).
Аналогичным образом, метод getTableName() для объекта ss.getUser() всегда возвращает таблицу user.
Для получения объекта SimpleRecord с учетом таблицы, в которой находится учетная запись текущего пользователя, следует использовать метод SimpleUser().getContext():
const user = new SimpleUser();
const context = user.getContext();
ss.info(context.getTableName()); // employee
ss.info(Object.keys(context.getAttributes()).length); // 53
Пример:
const user = ss.getUser();
ss.info(user.getTableName()); // user
const tableId = user.sys_db_table_id;
const table = new SimpleRecord('sys_db_table');
table.get(tableId);
ss.info(table.name); // employee
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');
// Перенаправить на форму создания новой записи в таблице "Задачи"
ss.getLogoURL()
Используйте этот метод, чтобы получить прямую ссылку на логотип.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| url | String | Нет | Нет |
Возвращаемое значение:
| Тип | Описание |
|---|---|
| String | Метод возвращает ссылку на файл с изображением. |
Пример:
ss.info(ss.getLogoURL());
// Получить прямую ссылку на логотип
ss.getLogoBase64()
Используйте этот метод, чтобы получить код логотипа в формате Base64.
Параметры:
| Название | Тип | Обязательный | Значение по умолчанию |
|---|---|---|---|
| url | String | Нет | Нет |
Возвращаемое значение:
| Тип | Описание |
|---|---|
| String | Метод возвращает закодированное в формате Base64 изображение. |
Пример:
ss.info(ss.getLogoBase64());
// Получить код логотипа в формате Base64