Как распространить настроенные правила управления задачами и заданиями

16 11

ПРАВИЛО – одно или несколько действий, автоматически выполняемых над полученными заданиями, заданиями-контролями, уведомлениями или стартованными задачами, которые отвечают определенным условиям, с возможными исключениями из этих условий.

Каждый пользователь может настраивать для себя правила, делается это в Сервис –> Правила. Как настраивать правила вручную описано в справке. Но не все пользователи хотят их настраивать или знают о возможности их использования , тогда перед администратором встает вопрос: «Как можно распространить настроенные правила для всех пользователей (или для заданной группы пользователей)?».

Правила хранятся в системном справочнике EXPLORER_RULE, он не имеет визуального представления. В справочнике заданы следующие реквизиты:

  • Name (Наименование);
  • Code (Код);
  • State (Состояние);
  • User (ISBReplaceableUser) – выбор из справочника Пользователи;
  • Title (ISBDescription);
  • Rule scheme (Текст);
  • Ruletype (ISBWorkRuleType) – признак, возможные значения: Входящие, Исходящие;
  • Примечание (Примечание).

Описание правила (Rule scheme) – это xml-ка:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pre>
<Rule>
  <Params>
    <Param Name="CopyFolder" Type="22" Description="">
      <Value ID="103743" Name="Важные договоры" SystemCode="DIRECTUM" ContentKind="5" Created="14.03.2011 17:33:49" Modified="14.03.2011 17:33:58" Author="Administrator" FolderType="4" UserStatus="0" HasChildren="false" AutoCleanable="false" URL=""/>
    </Param>
    <Param Name="Importance" Type="32" Description="">
      <PickValues>
        <PickValue Code="L" Name="L" NameLocalizeID="SYSRES_SBINTF.LOW_IMPORTANCE_NAME_ACCUS"/>
        <PickValue Code="N" Name="N" NameLocalizeID="SYSRES_SBINTF.NORMAL_IMPORTANCE_NAME_ACCUS"/>
        <PickValue Code="H" Name="H" NameLocalizeID="SYSRES_SBINTF.HIGH_IMPORTANCE_NAME_ACCUS"/>
      </PickValues>
      <Value Value="H"/>
    </Param>
    <Param Name="ExInitiator" Type="33" Description="" NeedIgnoreUnoperatingRecords="true">
      <Value AccountType="0" Value="Kostenkova_KK"/>
    </Param>
  </Params>
  <Actions>
    <Action ActionType="Copy">
      <ActionParam Name="CopyFolder" Param="CopyFolder"/>
    </Action>
  </Actions>
  <Conditions>
    <Condition Param="Importance"/>
  </Conditions>
  <Exclusions>
    <Exclusion Param="ExInitiator"/>
  </Exclusions>
</Rule></pre>

У xml-ки есть следующие разделы:

  • Params (описание параметров, которые задаются при настройке правила, например данные папки, которую выбрали для перемещения заданий),
  • Actions (действия),
  • Conditions (условия отбора),
  • Exclusions (исключения).

Если нужно распространить правила для других пользователей, то администратор может настроить его у себя и программно скопировать записи для других пользователей, изменив значение реквизита User.

Пример: нужно настроить правило всем работникам юридического отдела, по которому все задания, пришедшие по ТМ «Согласование договорных документов» и имеющие высокую важность, копировались в папку «Важные договоры».

Еще могут быть случаи, когда параметры, например, папки у пользователей должны быть разные (задания должны копироваться не в общую папку «Важные договоры», а в папку «Важные договоры <Имя пользователя>»). В этом случае нужно в xml-ке для каждого пользователя изменить ИД папки.

  // Найти запись, которую нужно скопировать
  Rule = References.EXPLORER_RULE.GetObjectByID(116324)
  // Создать новую запись
  NewRule = References.EXPLORER_RULE.CreateNew()
  // Скопировать данные в новую запись
  NewRule.AssignObject(Rule; ArrayOf()) 
  // Изменить пользователя
  NewRule.ISBReplaceableUser = ServiceFactory.GetUserByName('Kostenkova_KK').Code
  // Найти нужную папку по наименованию
  Search = Searches.CreateNew(ckFolder)
  SearchCriteria = Search.SearchCriteria
  FolderNameCriteria = SearchCriteria.Add('Name')
  FolderNameCriteria.SetSimpleValue('Важные договоры Костенкова К.К.')
  SearchFolders = Search.Execute
  // Если нашли папку, то изменить ID в xml-ке с правилом
  if SearchFolders.Count > 0
    SearchFolders.Reset    
    SearchFolderInfo = SearchFolders.Value
    // Изменить схему правила
    XmlObject = CreateObject("MSXML.DOMDocument")
    XmlObject.LoadXml(NewRule.Requisites('Текст').AsString)
    CopyFolder = XmlObject.SelectSingleNode("//Params/Param[@Name='CopyFolder']/Value")
    // Установить новое ИД
    CopyFolder.setAttribute("ID"; SearchFolderInfo.ID) 
    NewRule.Текст = XmlObject.Xml
  endif
  // Изменить наименование
  NewRule.SYSREQ_NAME = NewID() 
  NewRule.Save

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

Александр Глущак

А автоочистку во ВХОДЯЩИХ/ИСХОДЯЩИХ настроить можно централизовано для всех?

Ксения Останина

Этот вопрос рассматривали в http://club.directum.ru/forum/topic745-автоочистка-уточнение-промежутка-времени.aspx

Ответ Алексея Язынина: Настроить у себя в проводнике системы нужные настройки, скопировать файл "C:\Users\ >\AppData\Roaming\NPO Computer\IS-Builder\<Код системы>\EdmsExplorer.cfg". Положить в такую же папку на компьютерах пользователей. Имейте ввиду, что скопируется не только эта настройка, а многие другие настройки тоже.

Петр Гераскин

Все получилось. Работает. А как мне еще запустить правило сразу после копирования к пользователю? Чтобы правило отработало на уже существующих записях (заданиях), а не только на тех, что будут попадать во Входящие.

Василий Вендин

Подскажите, а как узнать ID своего правила, которое создал?

Ксения Останина

Программно найти в справочнике правил по пользователю, который создал правило, и по наименованию.

Василий Вендин

да да, уже нашел :) спасибо

Василий Вендин

Запустил сейчас скрипт, выдает ошибку "Объект не существует". Ругается на CopyFolder.setAttribute("ID"; SearchFolderInfo.ID).

Василий Вендин

Оказалось на версии 4.8 поменялась Rule scheme. Вместо параметра CopyFolder теперь MoveFolder

Станислав Логинов

Параметр CopyFolder даже в 4.7 уже не актуален)

ID вашего правила: 

select Analit from MBAnalit where Description = 'rule'
Святослав Романов

Подскажите, как решить следующую проблему:

Есть настроенное правило, которое перемещает задания с конкретным видом задачи в конкретную папку. Копирую настроенное правило, меняю ИД папки, ИД вида задачи - новое правило не отрабатывает. Если еще меняю Код вида задачи (а это текстовый реквизит), то при в ходе в настройку правил - вылетает ошибка Access violation at address 00DEEC0E in module 'SBCl.bpl' (EDOMParseError - В текстовом комментарии обнаружен недопустимый знак). Подозреваю, что тут дело в текстовом формате (кодировке), т.е. как только я меняю текстовое значение, то xml записывает его "кракозябрами". Вот код:

 // Изменить схему правила
  XmlObject = CreateObject("MSXML.DOMDocument")
  XmlObject.LoadXml(NewRule.Requisites('Текст').Value)
  // Установить ИД папки
  MoveFolder = XmlObject.SelectSingleNode("//Params/Param[@Name='MoveFolder']/Value")
  MoveFolder.setAttribute("ID"; Folder.Info.ID)
  // Установить ИД вида задачи
  TaskKind = XmlObject.SelectSingleNode("//Params/Param[@Name='TaskKind']/Value")
  TaskKind.setAttribute("ID"; TaskKindReference.ID)
  TaskKind.setAttribute("Code"; TaskKindCode)                                                        
  NewRule.Текст = XmlObject.Xml
  NewRule.Save
ФайлЗаписать('D:\TestXML.xml';;NewRule.Requisites('Текст').AsString)

Без TaskKind.setAttribute("Code"; TaskKindCode) в D:\TestXML.xml все читабельно, а если же трогаю текстовый параметр ("Code") - то D:\TestXML.xml все текстовые значения в непонятном формате и правила вызывают Access violation.

Подскажите, как можно решить данную проблемку?

Регина Вялитова

Подскажите, где находится этот xml-файл с правилами?

Авторизуйтесь, чтобы написать комментарий