Для проверки данных перед сохранением записи обычно используется действие «Показать ошибку» в правилах для формы.
Однако так может быть затруднительно реализовать сложную логику проверки, либо проверочное выражение будет неудобочитаемым. К тому же чрезмерно сложные правила для формы могут замедлять ввод данных в форму, так как проверка выполняется в реальном времени.
Вместо правил для формы для проверки данных перед сохранением записи можно использовать сценарий с действием «Проверить результат выражения» или «Проверить результат скрипта» по событию «Создание записи», «Изменение записи» или «Нажата кнопка».
Действия «Проверить результат выражения» и «Проверить результат скрипта» прерывают выполнение сценария, если выражение или скрипт возвращают false
, что позволяет запретить сохранение некорректной записи.
Это даёт следующие преимущества:
- Сценарий позволяет наглядно реализовать логику проверки данных произвольной сложности.
- Сценарий срабатывает только при сохранении записи, благодаря чему повышается производительность.
- Действие «Проверить результат скрипта» позволяет напрямую изменять значения атрибутов без использования действия «Изменить значения атрибутов».
- Действие «Проверить результат выражения» с выражением на N3 в позволяет создать переменную в сценарии и поместить в неё необходимые данные для дальнейшего использования.
Здесь представлены варианты проверки данных перед сохранением записи с помощью:
Прикладная задача
Имеется приложение оформления заявок.
Требуется:
- запретить сохранение заявки, если к ней не прикреплены документы;
- изменить значение логического атрибута на
true
, если документы прикреплены.
Исходные данные
Имеется шаблон записи «Заявки» (Requests
) с атрибутами:
Название | Системное имя | Свойства |
---|---|---|
Документы | Documents |
|
Заявка заполнена | RequestComplete |
Тип данных: логический |
Настройка сценария с действием «Проверить результат выражения» и формулой
- Создайте сценарий.
- В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
-
Добавьте действие «Проверить результат выражения» со следующими свойствами:
- Сообщение об ошибке: Прикрепите документ
-
Выражение: формула
// Если документы не прикреплены,
// возвращаем false,
// и выполнение сценария прерывается.
NOT(EMPTY($Documents))
-
Добавьте действие «Изменить значения атрибутов» со следующими свойствами:
- Атрибут: Заявка заполнена
- Операция со значениями: заменить
-
Значение: формула
true
Настройка сценария с действием «Проверить результат выражения» и выражением N3
- Создайте сценарий.
- В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
-
Добавьте действие «Проверить результат выражения» со следующими свойствами:
- Сообщение об ошибке: Прикрепите документ
-
Выражение: N3
# Импортируем функции для работы
# с данными текущей записи и переменными.
@prefix object: <http://comindware.com/ontology/object#>.
@prefix variable: <http://comindware.com/ontology/session/variable#>.
@prefix operator: <http://comindware.com/ontology/session/operator#>.
{
# Находим атрибут Documents (Документы)
# в шаблоне Requests (Заявки).
("Requests" "Documents") object:findProperty ?DocumentsAttribute.
# Проверяем, прикреплены ли документы
# к текущей записи ?item.
if {
?item ?DocumentsAttribute ?.
}
# Если документы прикреплены:
then {
# Создаём переменную CheckResult в сценарии
# и присваиваем ей значение true.
variable:CheckResult operator:add true.
# Возвращаем true.
true -> ?value.
}
# Если документы не прикреплены,
# возвращаем false,
# и выполнение сценария прерывается.
else {
false -> ?value.
}
}
-
Добавьте действие «Изменить значения атрибутов» со следующими свойствами:
- Атрибут: Заявка заполнена
- Операция со значениями: заменить
-
Значение: формула
$$CheckResult
Настройка сценария с действием «Проверить результат скрипта»
- Создайте новый сценарий «Заполнение заявок».
- В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
-
Добавьте действие «Проверить результат скрипта» со следующими свойствами:
- Сообщение об ошибке: Прикрепите документ
-
Выражение:
using System;
using System.Collections.Generic;
using System.Linq;
using Comindware.Data.Entity;
using Comindware.TeamNetwork.Api.Data.UserCommands;
using Comindware.TeamNetwork.Api.Data;
class Script
{
public static bool Main(Object FullObjectId)
{
// Получаем ID текущей записи шаблона «Заявки» из контекста выполнения сценария.
var ObjectId = FullObjectId.ToString().Replace("user.", "");
// Помещаем в DocumentsData информацию об атрибуте Documents (Документы) текущей записи.
var DocumentsData = Api.TeamNetwork.ObjectService.GetPropertyValues(new []{ObjectId}, new []{"Documents"});
// Получаем значение атрибута Documents (Документы) в текущей записи.
var Documents = DocumentsData[ObjectId].TryGetValue("Documents", out object OutputRecordArray) && OutputRecordArray != null ? OutputRecordArray as object[] : null;
// Если документы прикреплены:
if(Documents.Length > 0)
{
// Создаём словарь со значением атрибута RequestComplete (Заявка заполнена).
var AttributeDict = new Dictionary<string,object>
{
{ "RequestComplete", true }
};
// Меняем значение атрибута RequestComplete в текущей записи.
Api.TeamNetwork.ObjectService.EditWithAlias(ObjectId, AttributeDict);
// Возвращаем true.
return true;
}
// Если документы не прикреплены, возвращаем false,
// и выполнение сценария прерывается.
else
{
return false;
}
}
}
Тестирование сценария
- Создайте заявку и не прикрепляйте Документы.
- Нажмите кнопку «Сохранить».
- На экране должно отобразиться сообщение «Прикрепите документ».
- Прикрепите Документы.
- Нажмите кнопку «Сохранить».
- Должно отобразиться сообщение об успешном сохранении записи, а в поле «Заявка заполнена» будет установлен флажок.