Activiti設置流程發起人用戶信息

在啓動一個流程時,我們會有將當前用戶啓動的流程保存起來,作爲流程發起人(啓動人、申請人、提交人),而在保存這個流程啓動者信息,api 沒有明確規範該怎麼存。

先看一段API調用

List hpis = historyService.createHistoricProcessInstanceQuery()
            .startedBy(userCode).list();

查詢結果爲空,這是爲什麼呢?

一、原因說明

 當通過runtimeService接口啓動(startProcessInstance[Byxxx])流程的時候會設置一個變量,代碼片段(ProcessDefinitionEntity.java#createProcessInstance):

String initiatorVariableName = (String) getProperty(BpmnParse.PROPERTYNAME_INITIATOR_VARIABLE_NAME);
if (initiatorVariableName!=null) {
    String authenticatedUserId = Authentication.getAuthenticatedUserId();
}

從上面的代碼片段中可以看出在啓動流程的時候引擎會先從Authentication讀取已認證用戶信息;現在我們只要能設置認證用戶的ID就可以了。

二、問題解決

查看API發現接口IdentityService有一個方法:setAuthenticatedUserId(String authenticatedUserId),正是這個方法在其接口實現類:org.activiti.engine.impl.IdentityServiceImpl#setAuthenticatedUserId中調用了Authentication.setAuthenticatedUserId()。

解決辦法很簡單只要在啓動流程之前調用API即可:identityService.setAuthenticatedUserId(userId);

identityService.setAuthenticatedUserId(userId);
processInstance = runtimeService.startProcessInstanceByKey("leave", entityId, variables);

當流程啓動之後可以到表ACT_HI_PROCINST中查看字段START_USER_ID_的值來驗證是否生效。

三、結束

問題很簡單,但是官網的手冊沒有提到,希望讓遇到問題的人少走彎路。

參考:

https://segmentfault.com/a/1190000000660671

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章