目次
1.描画方法
1.1、Eclipseプラグイン
1)ヘルプ-新しいソフトウェアのインストール...
2)[追加]をクリックし、アドレスを入力します
名前:Activiti BPMN 2.0デザイナー
場所:http://activiti.org/designer/update/
3)インストールインターフェイスに戻り、[ [すべて]を選択し、次のステップ
4)チェックボックスをクリックし、[詳細]セクションで[すべての更新サイトに連絡する...]を選択することを忘れないでください。現在のインストールに必要なすべてのプラグインがチェックされ、ダウンロードできます。 Eclipseによる
5)
インストールの確認インストールが完了したら、[新規プロジェクト]、[新規]-[その他...]をクリックします。パネルを開くと、次のように表示されます。
1.2、アイデアプラグイン
1)設定
...-プラグイン2)actiBPMを検索し、インストール後に再起動します
3)説明:このプラグインは非公式であり、長期間維持および更新されていません。いくつかのバグがあり、使いにくいです。 。
1.3、アクティビティ描画戦争パッケージ
公式ウェブサイトは、activiti-app.war展開方法の描画パッケージ、公式ウェブサイトアドレスを提供します
2、表の説明
2.1。はじめに
Acitivitiテーブルの名前はすべてACT_で始まります。真ん中の1文字または2文字は、テーブルのカテゴリを示します。テーブル全体はAPIサービスに対応します。以前は23テーブルでしたが、現在は28テーブルです。
2.2、命名規則
Activitデータベーステーブル構造の説明を参照してください
。1)ACT_GE_ xxx:一般的なグローバル一般データと設定、さまざまな状況で使用されるデータを示します
。2)ACT_HI_ xxx:プロセスの実行に関連する履歴データを含む履歴履歴データテーブルを示します。 、エンドプロセスの例、変数、タスクなどなど
。3)ACT_ID_ xxx:プロセスで使用されるID組織、ユーザーレコード、ユーザー、およびグループを示します。これらのテーブルには、ユーザー、ユーザーグループなどの識別情報が含まれます
。4)ACT_RE_ xxx:リポジトリストレージを示し、プロセス定義、プロセスリソース(画像、ルールなど)などの静的情報が含まれます
。5)ACT_RU_ xxx:ランタイム操作時間、ランタイムプロセス変数、ユーザータスク、変数、責任(ジョブ)、およびその他のランタイムデータを示します。Activitiは、インスタンスの実行中にのみランタイムデータを保存します。プロセスインスタンスが終了すると、これらのレコードが削除され、これらのランタイムテーブルが小さく高速になります。
2.3。メインテーブルの詳細な説明
1)一般データテーブル
ACT_GE_BYTEARRAY:一般的なプロセス定義とプロセスリソースを格納するバイナリデータテーブル
ACT_GE_PROPERTY:システム関連の属性、属性データテーブルはプロセスエンジンレベル全体のデータを格納します。テーブル構造を初期化すると、デフォルトで3つのレコードが挿入されます。
2)処理履歴レコード
ACT_HI_ACTINST:過去ノードテーブル
ACT_HI_ATTACHMENT:履歴取付テーブル
ACT_HI_COMMENT:歴史的意見テーブル
ACT_HI_DETAIL:履歴詳細テーブル、過去の可変クエリ提供
ACT_HI_IDENTITYLINK:歴史的プロセス担当者テーブル
ACT_HI_PROCINST:歴史的プロセスインスタンステーブル
ACT_HI_INSTASKINST:過去のタスクインスタンステーブル
TACT_HI_VARを
3 )ユーザーユーザーグループテーブル
ACT_ID_GROUP:ユーザーグループ情報テーブル
ACT_ID_INFO:ユーザー拡張情報テーブル
ACT_ID_MEMBERSHIP:ユーザーおよびユーザーグループ対応情報テーブル
ACT_ID_USER:ユーザー情報テーブル
4)プロセス定義テーブル
ACT_RE_DEPLOYMENT:展開情報テーブル
ACT_RE_MODEL:プロセス設計モデル展開テーブル
ACT_RE_PROCDEF:プロセス定義データテーブル
5)実行インスタンステーブル
ACT_RU_EVENT_SUBSCR:ランタイムイベントthrowEvent、catchEvent時間監視情報テーブル
ACT_RU_EXECUTION:実行時プロセス実行インスタンス
ACT_RU_IDENTITYLINK:主にタスクノードと参加者に関する情報を格納する実行時プロセス人事テーブル
ACT_RU_JOB:実行時タイミングタスクデータテーブル
ACT_RU_TASK:実行時タスクノードテーブル
ACT_RU_VARIABLE:実行時プロセス変数データ表
6)その他の表
ACT_EVT_LOG:イベントログ
ACT_PROCDEF_INFO:プロセス定義の動的変更情報
3、テーブルの初期化
3.1。方法1(コード実装)
pomの依存関係
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
application.properties構成
# 配置数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti-demo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=false
クラスを開始
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
...
初始代码
@Test
public void initTables() {
// 创建流程引擎的配置
ProcessEngineConfiguration cfg = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
cfg.setJdbcDriver("com.mysql.jdbc.Driver");
cfg.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti-demo");
cfg.setJdbcUsername("root");
cfg.setJdbcPassword("root");
/**
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE 如果数据库里面没有activit的表,也不会创建
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP 创建表,使用完之后删除
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE 如果数据库里面没有表,就创建
*
* dorp-create 代表如果数据库里面有表,那么先删除再创建
*
*/
//配置表的初始化的方式
cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//得到流程引擎
ProcessEngine engine = cfg.buildProcessEngine();
System.out.println(engine);
}
3.2、方法2
activiti.cfg.xmlを作成します
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti-demo"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root"></property>
<!--
flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。
true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。
create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。
drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)。 -->
<property name="databaseSchemaUpdate" value="drop-create"></property>
</bean>
</beans>
@Test
public void intiTables() {
ProcessEngineConfiguration cfg= ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("/activiti.cfg.xmls");
// 得到流程引擎
ProcessEngine engine = cfg.buildProcessEngine();
System.out.println(engine );
}
3.3。方法3(デフォルトの構成ファイルを読み取る)
@Test
public void intiTables() {
//必须创建activiti.cfg.xml 并配置好数据库的信息
ProcessEngine engine=ProcessEngines.getDefaultProcessEngine();
System.out.println(engine);
}
4、主な知識ポイント
4.1、APIの紹介
//流程部署定义 act_ge_bytearray, act_re_deployment, act_re_model, act_re_procdef
@Autowired
private RepositoryService repositoryService;
//流程运行 act_ru_event_subscr, act_ru_execution, act_ru_identitylink, act_ru_job, act_ru_task, act_ru_variable
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
//历史记录 act_hi_actinst, act_hi_attachment, act_hi_comment, act_hi_detail, act_hi_identitylink, act_hi_procinst, act_hi_taskinst, act_hi_varinst
@Autowired
private HistoryService historyService;
///页面表单
@Autowired
private FormService formService;
//用户管理 act_id_group, act_id_info, act_id_membership, act_id_user
@Autowired
private IdentityService identityService;
//管理器
@Autowired
private ManagementService managementService;
4.2、デモ
1)新しいdemo01.bpmnファイルを作成します
。2)フローチャートを作成し、
プロセステンプレートのIDと名前を定義します。
タスクハンドラー設定
判定条件設定
注:判断条件は通常、[排他的ゲートウェイ]にも実装されます。関連する
変数:
$ {userId}タスクプロセッサ
$ {days <= 3}プロジェクトマネージャーによる承認
$ {days> 3}にはゼネラルマネージャーの承認が必要です
//部署定义流程(文件名改为demo01.bpmn20.xml)
@Test
public void deployProcess() {
Deployment deploy = repositoryService.createDeployment().name("请教流程")
.addClasspathResource("bpmn/demo01.bpmn20.xml")
.deploy();
System.out.println("流程部署ID : " + deploy.getId());
}
//启动流程
@Test
public void startProcess() {
String businessKey = "BZ2021010510001"; //业务关联ID标识
String proKey = "demo01_id_10001";
Map<String, Object> vars = new HashMap<>();//流程变量设置
vars.put("userId", "张三");//指定任务处理人
runtimeService.startProcessInstanceByKey(proKey, businessKey, vars);
System.out.println("启动流程成功");
}
//查询任务
@Test
public void queryTask() {
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("张三") //查询条件指定
.orderByTaskCreateTime().desc() //排序方式
.list();//结果集
if (!CollectionUtils.isEmpty(tasks)) {
for (Task task : tasks) {
System.out.println("任务ID:" + task.getId());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("任务名称:" + task.getName());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("-----------------------------");
}
}
}
//办理任务
@Test
public void completeTask() {
String taskId = "5002";
Map<String, Object> vars = new HashMap<>();//流程变量设置
vars.put("userId", "王五");//指定任务处理人
vars.put("days", 4);//设置请假天数
taskService.complete(taskId, vars);
System.out.println("任务完成");
}
//删除部署定义流程
@Test
public void deleteProcessDef() {
String deploymentId = "1";
//根据流程部署id删除流程定义 如果当前id的流程正在执行,那么会报错
//repositoryService.deleteDeployment(deploymentId);
//根据流程部署id删除删除流程定义 如果当前id的流程正在执行,会把正在执行的流程数据删除 act_ru_*和act_hi_*表里面的数据
repositoryService.deleteDeployment(deploymentId, true);
// repositoryService.deleteDeploymentCascade(deploymentId);==repositoryService.deleteDeployment(deploymentId, true);
System.out.println("删除成功");
}
#RepositoryService
SELECT * FROM `act_ge_bytearray`; #二进制文件表
SELECT * FROM `act_re_deployment`;#流程部署表
SELECT * FROM `act_re_procdef`;#流程定义
SELECT * FROM `act_ge_property`;#工作流的ID算法和版本信息表
#RuntimeService TaskService
SELECT * FROM `act_ru_execution`;#流程启动一次只要没有执行完,就会有一条数据
SELECT * FROM `act_ru_task`;#可能有多条数据
SELECT * FROM `act_ru_variable`;#记录流程运行时的流程变量
SELECT * FROM `act_ru_identitylink`;#存放流程办理人的信息
#HistroyService
SELECT * FROM `act_hi_procinst`;#历史流程实例
SELECT * FROM `act_hi_taskinst`;#历史任务实例
SELECT * FROM `act_hi_actinst`;#历史活动节点表
SELECT * FROM `act_hi_varinst`;#历史流程变量表
SELECT * FROM `act_hi_identitylink`;##历史办理人表
SELECT * FROM `act_hi_comment`;#批注表
SELECT * FROM `act_hi_attachment`;#附件表
#IdentityService
SELECT * FROM `act_id_group` #角色
SELECT * FROM `act_id_membership`#用户和角色之间的关系
SELECT * FROM `act_id_info`#用户的详细信息
SELECT * FROM `act_id_user`#用户表
4.3、actiBPM中国語の文字化けの問題
1)文字化けしたコード効果
2)idea \ IntelliJ IDEA 2019.1.3 \ bin \ idea64.exe.vmoptionsファイルにエンコード設定を追加します
-Dfile.encoding=UTF-8
3)アイデアを再開する