Activiti ワークフローの一般的に使用されるいくつかの API とテーブルの分析の紹介

Activiti には一般的に使用される API がいくつかあります

1ProcessEngineConfiguration は ProcessEngine コア オブジェクトの生成に使用されます。これは Hibernate の Configuration に似た感覚を与えます。

//通过ProcessEngineConfiguration来生成ProcessEngine流程引擎对象    
public void generateTables(){
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        configuration.setJdbcDriver("oracle.jdbc.driver.OracleDriver");
        configuration.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
        configuration.setJdbcUsername("qsw");
        configuration.setJdbcPassword("admin");
        //设置自动建表,一共生成25张表
     configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.buildProcessEngine();
    }

2RepositoryService オブジェクト

a.RepositoryService は ProcessEngine を通じて取得されます

b.RepositoryService は主に運用プロセスの配備・定義の操作、およびプロセスの配備・定義情報の問い合わせに使用され、主に act_re_deployment (プロセス配備情報)、act_re_procdef (プロセス定義情報)、act_ge_bytearray (フローチャートが格納されている) の 4 つのテーブルで構成されます。その中に)、act_ge_property (プロセスのバージョン番号が含まれます)

c.RepositoryService のいくつかの一般的な機能:

  1. プロセスの導入と定義
    @Test
    public void deployProcess(){
        //只部署bmpn文件(数据库保存的时候自动生成图片)
//        repositoryService.createDeployment()
//                .addClasspathResource("diagrams/leave.bpmn")
//                .name("请假流程")
//                .deploy();
        //部署bpmn文件和图片,数据库不会自动生成图片,会使用你上传的图片
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("diagrams/leave.bpmn")
                .addClasspathResource("diagrams/leave.png")
                .name("请假流程")
                .deploy();
        System.out.println(deploy.getId()+","+deploy.getName()+","+deploy.getDeploymentTime());

    }

 

 

2. RepositoryService は、プロセスのデプロイメント情報とプロセス定義情報を照会するために使用されます。

//查询流程部署的信息
 public void queryDeployment(){
        List<Deployment> deployments = repositoryService.createDeploymentQuery()
                .deploymentId("1")
                .deploymentName("请假流程").list();
        for (Deployment dep :
                deployments) {
            System.out.println(dep.getId()+","+dep.getName());
        }
    }
 //流程定义信息的查询
    @Test
    public void queryProcessDefined(){
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
        for (ProcessDefinition definition :
             list) {
            System.out.println(definition.getId()+","+definition.getDeploymentId());
        }
    }

3. クエリのフローチャート

  @Test
    public void queryProcessPicture() throws IOException {
        InputStream is = repositoryService.getProcessDiagram("leaveProcess:2:2504");
        OutputStream os = new FileOutputStream("e:/demo.png");
        FileUtil.copyStream(is,os);
    }

4. プロセス定義の削除 (コードはここでは説明しません...)

5. プロセス定義の変更。プロセス定義はデプロイ後に変更できず、再デプロイできることに注意してください。

 

3.RuntimeService オブジェクト

a. 主に実行管理 (プロセス インスタンスの開始、進行、削除などの操作を含む) に使用され、主にテーブル act_ru_execution (プロセス インスタンスの実行)、ACT_RU_TASK (プロセス インスタンスのタスク)、ACT_RU_IDENTITYLINK (プロセス インスタンスに対応するタスク) エージェントに関係します) 、ACT_HI_ACTINST (プロセス インスタンスのアクティビティ履歴、ここでのアクティビティとは、startPoint から endPoint までのプロセス全体における各アクティビティ ポイントの集合名を指します)、ACT_HI_TASKINST (タスク履歴、タスクは bpmn ブロックのリーダーを指します)

b. 車の設計図と自動車が同じ概念ではないのと同様に、プロセス定義とプロセス インスタンスは同じ概念ではないことに注意してください。1 つのプロセス定義は複数の「新しい」プロセス インスタンスを開始できます。

c. RuntimeService のいくつかの一般的な操作

1. プロセス インスタンスを開始します (プロセス定義の ID、プロセス定義のキー、およびメッセージの名前に基づいて開始できます)。

    //流程的启动(流程实例的启动)
    @Test
    public void processInstanceStart(){
        //1通过流程定义的id
//        ProcessInstance processInstance = runtimeService.startProcessInstanceById("leaveProcess:2:2504");
//        System.out.println("流程实例的id"+processInstance.getId()+",流程实例的名字"+processInstance.getName());
//        System.out.println("流程实例对应的流程定义"+processInstance.getProcessDefinitionId());
        //通过流程定义的key来启动
        ProcessInstance leaveProcess = runtimeService.startProcessInstanceByKey("leaveProcess");
        System.out.println("流程实例的id"+leaveProcess.getId()+",流程实例的name"+leaveProcess.getName());
        System.out.println("流程定义的name"+leaveProcess.getProcessDefinitionKey());

    }

2. プロセス インスタンスのクエリ (コーディングはもう行いません。結局のところ、RepositoryService は知っているので、基本的なルーチンは次のとおりです...)

3. プロセスの現在のノードの座標 (現在のプロセスが実行されている場所を表示)

  //获取当前流程的节点坐标,为了让用户能够看到当前流程执行到哪个活动点,可以获取图像信息,在页面中通过div来给当前所在节点进行标红
    //单个节点
    @Test
    public void getActiveNodeZuoBiao(){
        String act_id = "doApplicate";
        GraphicInfo info = repositoryService.getBpmnModel("leaveProcess:2:2504").getGraphicInfo(act_id);
        System.out.println("宽度"+info.getWidth());
        System.out.println("高度"+info.getHeight());
        System.out.println("x轴"+info.getX());
        System.out.println("y轴"+info.getY());
    }

4 プロセス インスタンスの強制削除 (申請シナリオ、たとえば、Xiao Wang が退職を申請しましたが、後悔してすぐに退職申請を取り消しました...)

 //流程实例的硬性删除
    @Test
    public void deleteProcessInstance(){
        runtimeService.deleteProcessInstance("5001","操作失误,不想离职");
    }

4.TaskServcie オブジェクト (主に個人タスクの処理に使用され、関連するテーブルは act_ru_task、act_hi_taskinst)

個人のタスクを表示する

 //查询个人待办任务
    @Test
    public void querySelfUncompleteTask(){
        List<Task> tasks = taskService.createTaskQuery()
                .taskAssignee("张三")
                .list();
        for (Task task :
                tasks) {
            System.out.println(task.getId()+","+task.getAssignee());
        }
    }

個人的なTo Doタスクが完了しました

  //完成个人代办任务
    @Test
    public void completeTask(){
        taskService.complete("7504"); //任务id去act_hi_taskinst表中获取
    }
}

 

このほか、HistoryService (履歴管理)、IdentityService (組織管理)、FormService (タスクフォーム管理)、ManagerService などがありますが、個別には記載していませんが、上記の API が最も一般的に使用されており、個人的にはどれかが使用されると思います。はい、ただし、これらの 25 のテーブルについてよく理解しておく必要があります。

おすすめ

転載: blog.csdn.net/qsw2lw/article/details/90224919