Перейти к содержанию

Сценарий. Проверка данных записи перед сохранением

Для проверки данных перед сохранением записи обычно используется действие «Показать ошибку» в правилах для формы.

Однако так может быть затруднительно реализовать сложную логику проверки, либо проверочное выражение будет неудобочитаемым. К тому же чрезмерно сложные правила для формы могут замедлять ввод данных в форму, так как проверка выполняется в реальном времени.

Вместо правил для формы для проверки данных перед сохранением записи можно использовать сценарий с действием «Проверить результат выражения» или «Проверить результат скрипта» по событию «Создание записи», «Изменение записи» или «Нажата кнопка».

Действия «Проверить результат выражения» и «Проверить результат скрипта» прерывают выполнение сценария, если выражение или скрипт возвращают false, что позволяет запретить сохранение некорректной записи.

Это даёт следующие преимущества:

  • Сценарий позволяет наглядно реализовать логику проверки данных произвольной сложности.
  • Сценарий срабатывает только при сохранении записи, благодаря чему повышается производительность.
  • Действие «Проверить результат скрипта» позволяет напрямую изменять значения атрибутов без использования действия «Изменить значения атрибутов».
  • Действие «Проверить результат выражения» с выражением на N3 в позволяет создать переменную в сценарии и поместить в неё необходимые данные для дальнейшего использования.

Здесь представлены варианты проверки данных перед сохранением записи с помощью:

Прикладная задача

Имеется приложение оформления заявок.

Требуется:

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

Исходные данные

Имеется шаблон записи «Заявки» (Requests) с атрибутами:

Название Системное имя Свойства
Документы Documents
  • Тип данных: документ
  • Хранить несколько значений: флажок установлен
Заявка заполнена RequestComplete Тип данных: логический

Настройка сценария с действием «Проверить результат выражения» и формулой

  1. Создайте сценарий.
  2. В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
  3. Добавьте действие «Проверить результат выражения» со следующими свойствами:

    • Сообщение об ошибке: Прикрепите документ
    • Выражение: формула

      // Если документы не прикреплены, 
      // возвращаем false,
      // и выполнение сценария прерывается.
      NOT(EMPTY($Documents))
  4. Добавьте действие «Изменить значения атрибутов» со следующими свойствами:

    • Атрибут: Заявка заполнена
    • Операция со значениями: заменить
    • Значение: формула

      true 

Настройка сценария с действием «Проверить результат выражения» и выражением N3

  1. Создайте сценарий.
  2. В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
  3. Добавьте действие «Проверить результат выражения» со следующими свойствами:

    • Сообщение об ошибке: Прикрепите документ
    • Выражение: 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.
      }
      }
  4. Добавьте действие «Изменить значения атрибутов» со следующими свойствами:

    • Атрибут: Заявка заполнена
    • Операция со значениями: заменить
    • Значение: формула

      $$CheckResult 

Настройка сценария с действием «Проверить результат скрипта»

  1. Создайте новый сценарий «Заполнение заявок».
  2. В начальном событии «Нажата кнопка» выберите контекстный шаблон «Заявки» и кнопку «Сохранить».
  3. Добавьте действие «Проверить результат скрипта» со следующими свойствами:

    • Сообщение об ошибке: Прикрепите документ
    • Выражение:

      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. Создайте заявку и не прикрепляйте Документы.
  2. Нажмите кнопку «Сохранить».
  3. На экране должно отобразиться сообщение «Прикрепите документ».
  4. Прикрепите Документы.
  5. Нажмите кнопку «Сохранить».
  6. Должно отобразиться сообщение об успешном сохранении записи, а в поле «Заявка заполнена» будет установлен флажок.
К началу