logo

Настройки запрета записи истории по объектам и действиям

В этой статье рассмотрим возможности запрета записи истории по объектам и действиям в системе. Это позволит не увеличивать объём БД за счёт хранения данных, которые не нужны для компании, например истории по задачам, процессам, комментариям.

Запись всей истории действий для всех объектов системы по умолчанию разрешена и записывается в таблицы EntityModelHistory и EntityActionHistory:

  • EntityActionHistory – в таблицу записываются все действия, произведённые с объектом: когда и какие именно изменения произошли;
  • EntityModelHistory – в таблицу записываются только даты изменения объектов. Таблица используется только в WebApi.

Начиная с версий 3.15.10, 3.13.50, 3.11.70, 4.0.0 реализована возможность отключить запись истории. Для этого в файл EntityModelHistorySettings.xml, который находится в папке …\<Общая папка с файлами системы ELMA>\UserConfig, добавлен параметр RestrictAll. Пример настроек:

<EntityModelHistoryRestriction>

<RestrictAll>False</RestrictAll>

</EntityModelHistoryRestriction>

Запрет на запись истории по объекту или действию

Эта возможность реализована начиная с версий 3.11.36, 3.12.26 и 3.13.16, 4.0.0.

Вы можете наложить запрет на запись истории по объекту или действию в таблицу EntityModelHistory при помощи файла настроек – EntityModelHistorySettings.xml.

Файл настроек создаётся в папке конфигурации. По умолчанию это папка UserConfig, которая располагается в общей папке с файлами системы ELMA. Изменение отслеживается операционной системой, при изменении файла система ELMA пересчитывает запреты.

Запрет может быть наложен на объект системы или на действие. Файл по умолчанию содержит разделы для обоих типов запретов. Общая структура файла (пример):

<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?>

<EntityModelHistoryRestriction xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<EntityRestrictions>

<!--запрет определенных действий с объектом-->

<EntityRestriction>

<EntityName>Task</EntityName>

<ActionNames>

<string>Create</string>

<string>Update</string>

<string>Delete</string>

</ActionNames>

</EntityRestriction>

<!--запрет всех действий с объектом-->

<EntityRestriction>

<EntityName>WorkflowInstance</EntityName>

</EntityRestriction> </EntityRestrictions>

<ActionRestrictions>

<!--запрет действия с определенными объектами-->

<ActionRestriction>

<ActionName>Edit</ActionName>

<EntityNames>

<string>WorkflowInstance</string>

</EntityNames>

</ActionRestriction>

<!--запрет действия со всеми объектами -->

<ActionRestriction>

<ActionName>Create</ActionName>

</ActionRestriction>

</ActionRestrictions>

</EntityModelHistoryRestriction>

Файл настроек содержит 2 раздела:

  • EntityRestrictions;
  • ActionRestrictions.

EntityRestrictions задает правила для запретов по типу объекта. При указании действия запрет накладывается на конкретное действие, а без указания действия – на все действия объекта.

ActionRestrictions задает правила для запретов по действию. При указании типа объекта запрет накладывается на конкретный тип объекта, а без указания типа объекта – на все типы объектов.

Каждый раздел содержит вложенную структуру согласно формату xml-файлов. Наименования вложенных полей используются согласно примеру, изменять их по своему желанию нельзя (приведет к ошибке чтения файла).

Настройки запрета записи истории по системным сущностям

Хранение истории изменений экземпляров объекта можно настроить в дизайнере в карточке объекта. Для этого на вкладке Дополнительные нужно включить опцию Хранить историю.

Начиная с версий 3.15.44 и 4.0.24, в системе можно запретить запись истории по системным сущностям, если в их настройках включена опция Хранить историю.

Чтобы настроить запрет записи истории, внесите изменения в файл EntityHistorySettings, который находится в папке …\<Общая папка с файлами системы ELMA>\UserConfig.

Вы можете настроить запрет записи всей истории по сущности или истории определённых действий с сущностью. Список всех возможных действий отображается в дизайнере в карточке объекта на вкладке Действия.

Чтобы установить запрет записи (как в ленте истории, так и в БД), укажите в настройках название сущности (имя класса сущности) или действие, или их комбинацию:

  • если указать только название сущности, то ни одно действие, совершаемое с этой сущностью, не запишется в историю;
  • если указать только действие, то запрет записи истории по этому действию применится ко всем сущностям, для которых такое действие возможно;
  • если указать название сущности и действие, то запрет записи истории по выбранному действию применится только к указанной сущности.

Пример структуры настроек запрета записи истории:

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><EntityHistoryRestriction>
  <RestrictAllModel>False</RestrictAllModel> — запрет всех записей в таблицу EntityModelHistory
  <RestrictAllAction>False</RestrictAllAction> — запрет всех записей в таблицу EntityActionHistory/ленту
    <EntityRestrictions>
      <EntityRestriction>
        <EntityName>
          <Name>Task</Name> — запрет истории по объекту "Задача"
        </EntityName>
      <ActionNames /> — пустой тег соответствует всем действиям
      <EntityHistoryType>Model</EntityHistoryType> — указание на тип, только для записей EntityModelHistory
    </EntityRestriction>
    <EntityRestriction>
      <EntityName /> — пустой тег равнозначен всем сущностям
      <ActionNames>
        <Name>Update</Name> — запрет записи событий Update
      </ActionNames>     
    <EntityHistoryType>Action</EntityHistoryType> — указание на тип, только для записей EntityActionHistory
  </EntityRestriction>
  </EntityRestrictions>
</EntityHistoryRestriction>

EntityHistoryType – опциональный тег, его отсутствие равнозначно типу All.