Данный проект является реализацией протокола BPMN, но только его подмножества. Включает в себя: startEvent, endEvent, serviceTask, userTask, parallelGateway, exclusiveGateway и sequenceFlow.
На этой основе было проведено расширение:
Расширенные атрибуты включают:
beforeStart — выполняется перед началом активности для всех задач, значение — это идентификатор тега script.
afterStart — выполняется после начала активности для всех задач, значение — это идентификатор тега script.
beforeEnd — выполняется перед завершением активности для всех задач, значение — это идентификатор тега script.
afterEnd — выполняется после завершения активности для всех задач, значение — это идентификатор тега script.
exclusiveFlowTrigger — определяет, может ли продолжаться исключительный маршрут потока, применяется к последовательности flow после exclusiveGateway. Используется для определения, может ли текущий sequenceFlow продолжаться. Значение — это идентификатор тега скрипта, возвращаемое значение скрипта должно быть логическим значением.
assignRule — назначает пользователя, значение — это идентификатор тега скрипта, возвращает идентификатор пользователя.
viewConfig — конфигурация представления, применяется ко всем userTasks, значение — это идентификатор тега скрипта.
Расширенные теги:
script — тег скрипта, содержащий программный код. Например: <script>User.create! email: 'abc@abc.com' </script>.
viewConfig — тег конфигурации представления.
Например:
<viewConfig>
...
<showUrl>/path/to/your/page</showUrl> обязательный тег
...
</viewConfig>
Для получения более подробной информации о протоколе см.: http://www.mossle.com/docs/jbpm4devguide/html/bpmn2.html
Пример документации RBPMN: http://git.oschina.net/tavern/rBPM/blob/master/xml_demo.md
Добавьте следующую строку в файл Gemfile вашего приложения:
gem 'rBPM', git: 'https://git.oschina.net/tavern/rBPM.git'
После добавления выполните:
$ bundle
Этот плагин имеет три команды генерации:
Генерация файлов миграции для базы данных движка
$ rails g rBPM:migration
Создание шаблонов для движка
$ rails g rBPM:templates
Создание необходимых моделей для движка
$ rails g rBPM:model
Создаёт экземпляр процесса. Параметры: user_id:integer Возвращаемое значение: ProcessInstance:object
show_url:method — получает бизнес-адрес записи пользовательской задачи. Возвращаемое значение: string
view_configs:Hash — получает конфигурацию представления, записанную в BPMN документе, фиксированные данные.
В контроллерах, где требуется использовать движок, наследуйте от RBPM::BaseController, например:
class YourController < RBPM::BaseController
Контроллер использует параметр process_task_id для подтверждения пользовательской задачи, все следующие методы доступны при наличии этого атрибута:
class RBPM::BaseController < ApplicationController::Base
# Задача существует?
def task_present?
@task.present?
end
# Получить текущую переданную пользовательскую задачу
def task
end
# Зафиксировать задачу
def task_commit
# Автоматически получить переменные процесса @process_variables hash типа, эти данные будут сохранены
# Автоматическое получение переменных действия @process_parameters hash типа, используется один раз и действует до следующего пользовательского задания
end
end
Например:
# Этот фрагмент кода демонстрирует фиксацию текущей задачи. В этом контроллере установлено after_action, которое автоматически фиксирует задачу после выполнения действия deal_with.
# В deal_with установлены два экземпляра переменной. task_commit автоматически получит эти экземпляры переменной в качестве параметров.
class YourController < RBPM::BaseController
after_action :task_commit, only: [:task_commit]
def deal_with
# your code
@process_variables = {name: 'Tavern', age: 100}
@process_parameters = {address: 'CQ'}
end
end
В представлении, сгенерированном контроллером YourController < RBPM::BaseController>, добавьте распределённое представление, это представление автоматически установит текущий идентификатор пользовательской задачи и не требует передачи идентификатора пользовательской задачи в коде бизнес-логики при фиксации.
class YourController < RBPM::BaseController
after_action :task_commit, only: [:task_commit]
def deal_with
# your code
@process_variables = {name: 'Tavern', age: 100}
@process_parameters = {address: 'CQ'}
end
end
Это представление не использует rails helper, если вы хотите использовать его, замените соответствующий метод. Основные операторы находятся в <%= render partial: 'layouts/engine_actions' %>
.
<form action="<%= your_deal_with_path %>" method="post">
<%= render partial: 'layouts/engine_actions' %>
<button type="submit">Отправить</button>
</form>
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )