Дополнительная функциональность среды разработки

Настройка политики повторных вызовов

Повторный вызов метода может быть настроен пользователем, в случае необходимости, для любого шага процесса. Настройка осуществляется через xml-файл, содержащий описание политик повторного вызова. Один xml-файл может быть использован для нескольких моделей процессов.
Данный xml-файл необходимо загрузить в "Настройках проекта", указав путь к конкретному файлу.
Retry_Policy

Увеличить

Далее для каждого элемента пользователь может выбрать одну из загруженных политик на вкладке "Properties".
Retry_Policy

Увеличить

Пример xml-файла моделей политик повторных вызовов:
Пример type=xml
<?xml version="1.0" encoding="UTF-8" ?>
<xs:retryPolicyModels xmlns:xs="http://.........."
    businessFamily="dul_family">
      <xs:retryPolicyModel id="RetryPolicy" description="Политика Retry">
          <!-- id модели используется для связи с тасками, для которых она будет применима -->
          <xs:retryPolicies>
              <xs:retryPolicy description="Политика для TransportTimeoutException">
                  <xs:exceptions> <!--Список исключений, на которые нужно реагировать-->
                               <xs:exception>TransportTimeoutException
                      </xs:exception>
                      <xs:exception>TransportNoRouteException
                      </xs:exception>
                      <xs:exception>UnavailableServiceException
                      </xs:exception>
                      <xs:exception>TransportException
                      </xs:exception>
                      <xs:exception>CdmWrappedException
                      </xs:exception>
                  </xs:exceptions>
                  <xs:retryStrategy>
                      <xs:linear> <!-- задать количество повторных попыток и интервал -->
                          <xs:count>3</xs:count>
                          <xs:timeout>PT1M</xs:timeout>
                      </xs:linear>
                  </xs:retryStrategy>
              </xs:retryPolicy>
          </xs:retryPolicies>
      </xs:retryPolicyModel>
</xs:retryPolicyModels>

Валидация политики повторного вызова

Валидация политики повторного вызова производится по аналогии с валидацией модели см. пункт Валидация модели ниже.
xsd-схема для валидации политики повторного вызова поставляется с дистрибутивом Designer.
Также пользователь может осуществить валидацию вручную используя любой редактор с поддержкой данной функции.

Валидация модели

Среда разработки позволяет провести проверку модели на соответствие правилам описания процессов. В механизм валидации закладываются проверки по трем областям:
  1. Правила описания процессов, накладываемые нотацией BPMN0.
  2. Правила описания расширений, накладываемые средой исполнения (bpms-core-app).
  3. Правила описания расширений, накладываемые движком среды исполнения (activity)
  4. Правила валидации модели с точки зрения bpms-core-app и activity.
Нарушение этих правил при разработке модели приведет к невозможности использовать модель в среде исполнения!

Правила валидации модели с точки зрения bpms-core-app и activity

Перечень валидируемых полей в разрезе элементов модели:
Элемент моделиВкладкаПолеОбязательностьОграничениеRegExp
Все элементы
MarkerBusinessObjectDetails → Process VariableДаНе использовать кириллические символы___
____
MarkerMark Details → Mark NameДа______
____
Execution ListenersExecution Listener Details → ValueДаНе использовать кириллические символы___
____
Execution ListenersExecution Listener Details → Delegate ExpressionДаНе использовать кириллические символы___
____
Task ListenersTask Listener Details → ValueДаНе использовать кириллические символы___
____
Extra AttributesExtra Attribute Details → Process Var NameДаНе использовать кириллические символы___
____
Extra AttributesExtra Attribute Details → Extra Attribute NameДа______
____
Extra AttributesExtra Attribute Details → CodeДаНе использовать кириллические символы___
____
<...> → AttributesMarker TypeАвтогенерацияReadOnly___
____
<...> → AttributesSbt Type____Автогенерация ReadOnly___
User Task
User TaskCandidate GroupsДаАвтоматически выбирается из Lane ReadOnly___
____
____Due DateДа______
____
____Form KeyДаНе использовать кириллические символы___
____
____PriorityДаСправочник (?)___
____
____Assignee___Не использовать кириллические символы___
Script Task
Script TaskAttributes → Script LanguageДаСправочник (?)___
____
Script TaskAttributes → ScriptДа______
Service Task
Service TaskAttributes → ClassДаНе использовать кириллические символы([a-z]{2,3}(\.[a-zA-Z][a-zA-Z_$0-9]*)*)\.([A-Z][a-zA-Z_$0-9]*)
____
____Attributes → SkipExpression___Не использовать кириллические символы___
____
FieldsFields List → NameДаНе использовать кириллические символы___
____
____Fields List → NameДаНе использовать кириллические символы___
Send Task
____Attributes → ClassДаНе использовать кириллические символы([a-z]{2,3}(\.[a-zA-Z][a-zA-Z_$0-9]*)*)\.([A-Z][a-zA-Z_$0-9]*)
____
____Attributes → SkipExpressionДаНе использовать кириллические символы___
Call Activity
InPut/OutPutIn Out Details → ValueДаНе использовать кириллические символы___
____
____In Out Details → TargetДаНе использовать кириллические символы___
Intermediate Catch Event
EventTimer Event Definition Details → Time\Date → ValueДаISO 8601 формат даты^(\d{4}((-)?(0[1-9]|1[0-2])((-)?(0[1-9]|[1-2][0-9]|3[0-1])(T(24:00(:00(\.[0]+)?)?|(([0-1][0-9]|2[0-3])(:)[0-5][0-9])((:)[0-5][0-9](\.[\d]+)?)?)((\+|-)(14:00|(0[0-9]|1[0-3])(:)[0-5][0-9])|Z))?)?)?)$
____
____Timer Event Definition Details → Duration →ДаISO 8601 формат длительности^P(([0-9]+([.,][0-9]*)?Y)?([0-9]+([.,][0-9]*)?M)?([0-9]+([.,][0-9]*)?D)?T?([0-9]+([.,][0-9]*)?H)?([0-9]+([.,][0-9]*)?M)?([0-9]+([.,][0-9]*)?S)?)|\d{4}-?(0[1-9]|11|12)-?(?:[0-2]\d|30|31)T((?:[0-1][0-9]|[2][0-3]):?(?:[0-5][0-9]):?(?:[0-5][0-9]|60)|2400|24:00)$

Валидация модели в СР

Начиная с версии 1.8 в среде разработки появился механизм валидации, позволяющий проверить исполняемую модель на соответствие "Перечню ограничений и допущений".
При валидации модели используется проверка xml файла модели. Следовательно, перед запуском валидации необходимо сохранить модель.
Для валидации модели необходимо:
  1. В структуре проекта выберите файл модели (или несколько моделей, или папку с файлами), перейдите в контекстное меню (нажать правую кнопку мыши) и выберите пункт "Validate":
    Validation

    Увеличить

  2. После завершения валидации, на экране появится сообщение, информирующее о количестве найденных ошибок (Errors) и/или предупреждений (Warnings), а также о времени выполнения валидации:
    Validation

    Увеличить

    Validation

    Увеличить

  3. На вкладке "Markers" или "Problems" в нижней части экрана можно посмотреть результат проведенной валидации:
    Validation

    Увеличить

    Validation

    Увеличить

    Для удобства исправления ошибок в таблицах вкладок "Markers" и "Problems" есть:
    • колонка "Description" с описанием ошибки;
    • колонка "Resource" с именем файла модели;
    • колонка "Location", в которой содержится номер строки bpmn-файла, в которой зафиксирована данная ошибка валидации.
    Validation

    Увеличить

  4. Вкладки "Markers" и "Problems" могут содержать данные об ошибках и предупреждениях других или даже всех моделей из рабочей области. Поэтому, для просмотра данных валидации модели можно сделать одно из следующих действий:
    • Отсортировать модели по именам, нажав на название колонки "Resource" и найдя нужный файл:
      Validation

      Увеличить

    • Выделить ненужные строки (или сразу группировку строк) и удалить их. Можно удалить все и затем повторить пункты 1 - 3, чтобы увидеть ошибки валидации только выбранной модели или моделей.
      Validation

      Увеличить

Визуальное сравнение моделей

Доступно для версии среды разработки 1.10 и выше.
Функционал позволяет визуально оценить отличия в разных версиях модели.
Для перехода в режим визуального сравнения выполните следующие действия:
  1. Диаграмма, которую хотим сравнить, должна быть открыта в графическом виде:
    Comparison

    Увеличить

    Если она открывается в виде файла xml, то нажмите на нее правой кнопкой мыши и в появившемся контекстном меню выберите Open With - Bpmn2 Diagram Editor:
    Comparison

    Увеличить

  2. Перейдите в главном меню в Diagram - Compare Models:
    Comparison

    Увеличить

  3. В открывшемся диалоговом окне в секции "Original model" нажмите пиктограмму "папка":
    Button

    Увеличить

    Выберите путь до модели, с которой необходимо произвести сравнение:
    Comparison

    Увеличить

    Можно, при необходимости, перевыбрать файл в секции "Modified model". Затем нажмите "ОК". Эти модели для сравнения так названы потому, что предполагается, что измененная модель может быть сохранена под другим именем и, не закрывая оригинальную модель, можно вызывать процедуру сравнения отредактированной модели с оригиналом.
  4. В рабочей области появится вкладка "Models Compare" c визуальным сравнением обеих моделей:
    Comparison

    Увеличить

    Красным цветом выделены удаленные элементы, зеленым - добавленные, желтым - редактированные, а серым - не изменившиеся. Внизу будет вкладка "Sbt Models Compare", в которой представлено текстовое описание всех изменений:
    Comparison

    Увеличить

Все изменения, произведенные с моделями на вкладке "Models Compare", не будут сохранены!
Изменение моделей после сравнения не будет отображаться на вкладке "Models Compare". Для сравнения новых изменений нужно заново произвести процедуру сравнения и получить новую вкладку "Models Compare".

Настройка Business Family процесса

Параметр "Business Family" нужен для присвоения процессу признака принадлежности некоторому семейству бизнес-процессов. Это поле используется для объединения моделей в группы по данному признаку при формировании отчетности.
Для указания "Business Family" процесса:
  1. Перейдите в свойства процесса, нажав на пустую область модели и открыв вкладку "Properties".
  2. Перейдите в раздел "Process" и заполнить в нем поле "Business Family":
    Business_Family

    Увеличить

  3. Сохраните модель. Значение сохраняется в xml в элементе bpmn2:process в атрибуте sbt:businessFamily:
    Business_Family

    Увеличить

Настройка владельца процесса

Для указания роли владельца процесса:
  1. Перейдите в свойства процесса (вкладка "Properties"), нажав на пустую область модели:
    Process_Owner

    Увеличить

  2. Перейдите на вкладку "Process Owner":
    Process_Owner

    Увеличить

  3. Укажите роль. Существует два способа указания роли:
    • Ручной ввод- самостоятельное описание процессной роли. Для ручного задания роли необходимо заполнить следующие поля:
      • Role Name - наименование роли;
      • Role Description - описание роли;
      • Role Code - код роли (на латинице).
    • Выбор из списка - выбор роли из файла ролевой модели. Файл ролевой модели подготавливает прикладная фабрика. Для выбора роли из файла ролевой модели необходимо нажать "Select Role":
      Process_Owner

      Увеличить

  4. Если файл с ролями задан, то появится список ролей. Выберите нужную:
    Process_Owner

    Увеличить

    Для поиска ролей в списке можно использовать поле "Search Pattern". Это поле чувствительно к регистру. Нажмите кнопку "Select". Поля вкладки "Process Owner" будут заполнены автоматически:
    Process_Owner

    Увеличить

    Сохраните изменения в модели.
  5. В случае, если файл ролевой модели еще не выбран, появится сообщение:
    Process_Owner

    Увеличить

    Нажмите "Yes". Откроется окно "Preferences", вкладка "SBT Config":
    Process_Owner

    Увеличить

    Навжмите "Change" напротив поля "Path to file with roles". Далее необходимо указать путь до xml-файла ролевой модели и нажать кнопку "Apply and Close". Если нужно изменить путь расположения файла ролевой модели, то можно открыть это окно с помощью главного меню: Window - Preferences - SBT Config. Далее проделать действия, описанные выше.
  6. В случае, если используется коллаборация, откройте настройки процесса можно, выбрав его на вкладке "Outline": снова выполните шаги 3 и 4.
    Process_Owner

    Увеличить

    Для задания роли владельца процесса проделываем шаги 2, 3 и 4.

XML-представление

<bpmn2:process id="ffd15e66-2c8d-4412-ae00-6804b3fed714" sbt:processOwner.roleName="role_name" sbt:processOwner.roleDescription="role_description" sbt:processOwner.roleCode="role_code" sbt:businessFamily="" sbt:externalVersion="" name="Process_947176493" isExecutable="true" processType="Public">

Обновление моделей

Обновление ID элементов

Согласно требованиям, в качестве ID элементов исполняемой модели используются только ID формата UUID.
Если модель содержит ID, не соответствующие этому формату, необходимо заменить их на корректные идентификаторы.
Чтобы произвести автообновление (не всех ID, а только используемых в среде исполнения), следует выполнить следующие шаги:
  1. В списке файлов проекта вызовите контекстное меню на выбранной модели (нажать правую кнопку мыши, стоя на модели). Выберите "Sbt Modeler" и затем "Update Id":
    Updating_ID

    Увеличить

  2. Если появится сообщение ниже, то необходимо нажать "ОК" и закрыть диаграмму с моделью, которую надо обновить:
    Updating_ID

    Увеличить

    Затем повторите пункт 1.
  3. Появится предупреждение о том, что в модели будет выполнена замена ID:
    Updating_ID

    Увеличить

    Это действие является необратимым! Убедитесь в том, что вы хорошо понимаете, какие зависимости в вашем проекте потребуют редактирования, и что, при необходимости, вы сможете вернуть изменения.
  4. В случае успешного обновления будет получено сообщение о завершении операции. Нажмите "Ок". Подтвердите свое намерение нажатием кнопки "Yes".
    Updating_ID

    Увеличить

    Изменения в модели сохранятся автоматически.
  5. Откроется вкладка "Compare" с сравнением модели до и после обновления. Старые и новые ID будут выделены в обоих окнах:
    Updating_ID

    Увеличить

Не забудьте обновить все зависимости, которые ссылаются на модель, проставив в них новые ID!

Обновление модели при обновлении версии СР

После выхода новой версии СР часто возникает потребность обновить модели, чтобы они соответствовали изменениям и корректно отображались в обновленном Эклипсе. Появление новых и/или рефакторинг старых фич обуславливает необходимость редактировать код модели: добавляются новые элементы и/или редактируются старые. Существует возможность обновить только одну модель или все модели выбранной папки.

Обновление всех моделей в проекте

Чтобы обновить все модели в проекте/папке:
  1. Вызовите контекстное меню на корневом каталоге проекта или на нужной папке (нажать правую кнопку мыши). Выберите в меню Sbt Modeler - Update All BPMN Models:
    Updating_ID

    Увеличить

  2. Появится сообщение, что выбранные модели будут обновлены. Для подтверждения действия нажмите "Yes":
    Updating_ID

    Увеличить

  3. После завершения обновления на экране отобразится список моделей, к которым была применена операция, с указанием результата:
    Updating_ID

    Увеличить

    Могут быть обновлены только модели для которых корректно указан namespace

Обновление одной модели

Чтобы обновить одну модель:
  1. Вызовите контекстное меню на файле модели (нажать правую кнопку мыши). Выберите в меню Sbt Modeler - Update Model:
    Updating_ID

    Увеличить

  2. Если выбранная модель открыта в графическом виде, то появится сообщение с просьбой закрыть ее:
    Updating_ID

    Увеличить

    Закройте диаграмму и повторите шаг 1.
  3. Появится сообщение, что выбранная модель будет обновлена. Для подтверждения действия нажмите
    Updating_ID

    Увеличить

  4. Может появиться сообщение о лишних тэгах в коде и вопрос, хотите ли вы их удалить:
    Updating_ID

    Увеличить

    Это связано с каким-то старым сбоем, в результате чего у элемента (в основном это элемент Pool) модели нет соответствующего графического элемента и поэтому он не отображается на диаграмме. Это нарушение приводит к появлению предупреждения при валидации модели (на вкладках "Markers" и "Problems"). Для того чтобы убрать это предупреждение, то необходимо нажать "Yes". Вне зависимости от выбора "Yes" или "No", обновление модели будет выполнено.
  5. В случае успешного обновления вы получите сообщение о завершении операции. Нажмите "Ок".
    Updating_ID

    Увеличить

    Изменения в модели сохранятся автоматически.
  6. Откроется вкладка "Compare" с сравнением модели до и после обновления. Изменения будут выделены в обоих окнах:
    Updating_ID

    Увеличить

Обновление модели при открытии

Когда открывается модель в графическом виде, автоматически выполняется проверка: нужно ли ее обновить до текущей версии моделера или нет. Если не нужно, то модель просто открывается. Иначе появится сообщение о необходимости обновить модель:
Updating_ID

Увеличить

После подтверждения ("Yes") запускается процедура обновления модели, описанная выше. Если выбрать "No", то появится сообщение о необходимости обновления:
Updating_ID

Увеличить

Далее откроется модель.
Без обновления модель может отображаться некорректно, могут не появиться новые функциональности и возникать сбои в работе.

Работа с переменными и выражениями

Переменные

Переменные - данные для выполнения шагов, которые использует экземпляр процесса. Переменные могут использоваться в выражениях (например, для выбора корректного исходящего пути в исключающем шлюзе), в автоматических задачах, когда вызываются внешние сервисы (например, обеспечения передачи/хранения результата вызова внешнего сервиса) и т.д.
Любой метод, стартующий экземпляр процесса, имеет опциональные параметры для обеспечения переменными, когда экземпляр процесса создан или стартовал. Например из RuntimeService.
  • Переменные могут быть добавлены в экземпляр процесса при старте/создании. Например, при RuntimeService:
    ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables)
  • Переменные могут быть добавлены при выполнении процесса:
    Пример type=sh
    void setVariable(String executionId, String variableName, Object value);
    void setVariableLocal(String executionId, String variableName, Object value);
    void setVariables(String executionId, Map<String, ? extends Object> variables);
    void setVariablesLocal(String executionId, Map<String, ? extends Object> variables);
    
  • Переменные, определенные в конкретном потоке исполнения, доступны только в данном потоке.
    Задачи, как и потоки исполнения, также могут иметь локальные переменные, которые будут доступны только во время исполнения задачи.
    Пример type=sh
    Map<String, Object> getVariables(String executionId);
    Map<String, Object> getVariablesLocal(String executionId);
    Map<String, Object> getVariables(String executionId, Collection<String> variableNames);
    Map<String, Object> getVariablesLocal(String executionId, Collection<String> variableNames);
    Object getVariable(String executionId, String variableName);
    <T> T getVariable(String executionId, String variableName, Class<T> variableClass);
    
  • Переменные используются в Java Delegates, выражениях, execution- или task-listener'ах, скриптах и т.д. Простейшие методы использования:
    Пример type=sh
    execution.getVariables();
    execution.getVariables(Collection<String> variableNam es);
    execution.getVariable(String variableNam e);
    execution.setVariables(Map<String, object> variables);
    execution.setVariable(String variableNam e, Object value);
    

Выражения

Выражения могут использоваться в автоматических задачах, execution- и task-listener'ах, для определения необходимого исходящего пути.
  • Пример использования для определения исходящих путей;
    sequenceFlow type=xml
    <sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask">
       <conditionExpression xsi:type="tFormalExpression">
              <![CDATA[${order.price > 100 && order.price < 250}]]>
       </conditionExpression>
    </sequenceFlow>
    
    В данном случае, выражением, которое необходимо указать является:
    ${order.price > 100 && order.price < 250}
  • Пример использования для автоматических задач:
    <serviceTask id="serviceTask" activiti:delegateExpression="$ {delegateExpressionBean}" />
    Пример2 type=xml
    <serviceTask id="javaService"
      name="My Java Service Task"
      activiti:expression="#{printer.printMessage(execution, myVar)}" />
    
  • Пример использования в execution- и task-listener'ах:
    Пример type=xml
    <userTask id="secondTask">
       <extensionElements>
              <activiti:executionListener expression="${myPojo.myMethod(execution.event)}" event="end" />
       </extensionElements>
    </userTask>
    
Предыдущий раздел
Работа с Sequence Flow
Следующий раздел
Ограничения и допущения
Была ли страница полезной?