Introduction †
Activiti-Explorer Getting Start †
休暇申請 †
- fozzie (user) でログインして、プロセス→Vacation Request
- プロセスを開始して、休暇申請を発行する
- 一件の休暇申請が承認待ち
承認 †
- gonzo (manager) でログインすると、承認待ちが1件
- Approve で受理
プロセス作成 †
- kermit (admin) でログインする
- プロセス → Model workspace で、プロセスを作ることができる
Activiti-Explorer の使い所 †
Activiti-Explorer の使い所 †
- 最初勘違いして混乱したんだけど、Activiti Explorer に個別実装を追加して個別アプリを仕立てるのではない
- Activiti Explorer は、Activiti のデモの位置づけ
- とはいえ非常によくできているので、マスターメンテアプリとして使おう
- Activiti Explorer ができること
Tasks | ワークフローの実行 |
Process | プロセスの管理 |
Reporting | レポート作成 |
Manage | データベースのメンテ |
- Manage
- 生テーブルの閲覧
- BPMNの配備
- JOB管理 (各プロセスのタイマー待ちの管理など)
- User管理/Group管理
- 個別アプリは Activiti Engine をライブラリとして組み込んで作成する
- 個別アプリからは Activiti Engine の API を通してワークフローDBを操作する
- その他に業務のデータベースを持つ。休暇申請のワークフローは Activiti の Workflow Database で管理されるが、勤怠や給与なんかは個別アプリ側の Database で管理する
- その他に Activiti Rest が提供されていて、こいつは Workflow を REST-API から操作できるようにするもの
ワークフロー情報の格納先を Postgres に変更する †
- デフォルト設定では H2 のインメモリデータベースに、ワークフローデータを格納している (プロセスを落とすと消えてしまう)
- 利用できるデータベース
database type | url |
h2 | jdbc:h2:tcp://localhost/activiti |
mysql | jdbc:mysql://localhost:3306/activiti?autoReconnect=true |
oracle | jdbc:oracle:thin:@localhost:1521:xe |
postgres | jdbc:postgresql://localhost:5432/activiti |
db2 | jdbc:db2://localhost:50000/activiti |
mssql | jdbc:sqlserver://localhost:1433;databaseName=activiti |
jdbc:jtds:sqlserver://localhost:1433/activiti |
- 今回は、Postgres に格納するように変更する
- 格納先データベースを作成
[~]$ createuser -P activiti
Enter password for new role: activiti_password
Enter it again: activiti_password
[~]$ createdb -E UTF-8 -O activiti -U atsushi activiti
- activiti-explorer.war を展開して
- JDBC ドライバを /WEB-INF/lib に配置する
https://jdbc.postgresql.org/download.html
- DEMOデータの設定
/WEB-INF/classes/engine.properties
# demo data properties
create.demo.users=true
create.demo.definitions=true
create.demo.models=true
create.demo.reports=true
# engine properties
engine.schema.update=true
engine.activate.jobexecutor=false
engine.asyncexecutor.enabled=true
engine.asyncexecutor.activate=true
engine.history.level=full
# email properties
#engine.email.enabled=true
#engine.email.host=localhost
#engine.email.port=1025
とりあえずそのままでいいでしょう → tomcatの再起動ごとにデモデータが追加されるので、一度だけこの設定で起動して、以降は domo.create.* を全部 false にする必要あり
- データベース接続の設定
/WEB-INF/classes/db.properties
#db=h2
#jdbc.driver=org.h2.Driver
#jdbc.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000
#jdbc.username=sa
#jdbc.password=
db=postgres
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/activiti
jdbc.username=activiti
jdbc.password=activiti_password
- ディレクトリ指定で配備
[注意] URL Context Root) は、必ず activiti-explorer にする。コード内に絶対パスで指定している所あり
- 普通に使える
- Posgres の activiti データベースに、Activiti サンプルができている
- 再び war に圧縮するときには、圧縮対象のディレクトリに入るのがミソ
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/
$ cd activiti-explorer
$ jar cf ../activiti-explorer.war .
プロセス図示のAPI †
http://localhost:8080/activiti-explorer/diagram-viewer/index.html?processDefinitionId=reviewSaledLead:1:36
http://localhost:8080/activiti-explorer/diagram-viewer/index.html?processDefinitionId=reviewSaledLead:1:36&processInstanceId=41
無効化したい場合は、ui.properties の activiti.ui.jsdiagram = false (デフォルトtrue)
Reporting †
- 上部メニューのHistory からレポートを作ことができる
- History level は none 以上にする必要あり
WEB-INF/classes/engine.properties
engine.history.level=full
- 対応しているグラフ
- pieChart
- lineChart
- barChart
- list
- レポート作成プログラムの登録
- 普通の BPMN [Start -> Task -> End] を登録すればよい
ただし、ROOT要素 <definitions> の targetNamespace には activiti-report を設定する
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="activiti-report">
<process id="process-instance-overview-report" name="Process Instance Overview" isExecutable="true">
...
</process>
</definitions>
- プロセスが終了したときに、グラフ表示するデータが格納された JSON をバイト配列でプロセス変数 reportData に格納しておくと、そのデータがグラフとして表示される
execution.setVariable(
"reportData"
, new java.lang.String(Jackson.objectMapper.writeValueAsString(bean)).getBytes("UTF-8"));
- グラフデータの形式
{
"title": "My Report",
"datasets": [
{
"type" : "lineChart",
"description" : "My first chart",
"xaxis" : "Year"
"yaxis" : "Total sales"
"data" :
{
"2010" : 50,
"2011" : 33,
"2012" : 17,
"2013" : 87,
}
}
]
}
typeに設定できるのは、pieChart, lineChart, barChart and list.
- 通常の Process 同様に <startEvent> に Form を作ることができる
<startEvent id="startevent1" name="Start">
<extensionElements>
<activiti:formProperty id="processDefinition" name="Select process definition" type="processDefinition" required="true" />
<activiti:formProperty id="chartType" name="Chart type" type="enum" required="true">
<activiti:value id="pieChart" name="Pie chart" />
<activiti:value id="barChart" name="Bar chart" />
</activiti:formProperty>
</extensionElements>
</startEvent>
Java#Activiti