Сценарий. Проверка данных записи перед сохранением
Для проверки данных перед сохранением записи обычно используется действие «Показать ошибку» в правилах для формы.
Однако так может быть затруднительно реализовать сложную логику проверки, либо проверочное выражение будет неудобочитаемым. К тому же чрезмерно сложные правила для формы могут замедлять ввод данных в форму, так как проверка выполняется в реальном времени.
Вместо правил для формы для проверки данных перед сохранением записи можно использовать сценарий с действием «Проверить результат выражения» или «Проверить результат скрипта» по событию «Создание записи», «Изменение записи» или «Нажата кнопка».
Действия «Проверить результат выражения» и «Проверить результат скрипта» прерывают выполнение сценария, если выражение или скрипт возвращают 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;}}}
Тестирование сценария
- Создайте заявку и не прикрепляйте Документы.
- Нажмите кнопку «Сохранить».
- На экране должно отобразиться сообщение «Прикрепите документ».
- Прикрепите Документы.
- Нажмите кнопку «Сохранить».
- Должно отобразиться сообщение об успешном сохранении записи, а в поле «Заявка заполнена» будет установлен флажок.
Эта статья была полезна 1 чел.