ワークフローの基本をアクティブ化する

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)アイデアを再開する

おすすめ

転載: blog.csdn.net/shaixinxin/article/details/112078705