在啓動一個流程時,咱們會有將當前用戶啓動的流程保存起來,做爲流程發起人(啓動人、申請人、提交人)html
而在保存這個流程啓動者信息,api 沒有明確規範該怎麼存。因此這裏我總結下我學到的保存流程啓動者信息的方法。api
咖啡兔博客中的作法 - Activiti設置流程發起用戶信息 - 咖啡兔 - HenryYan
注: 若是單純照博客這麼作的話,確實能在 ACT_HI_PROCINST
的 START_USER_ID_
字段存放該值,可是我卻沒有取出來,一直是null。app
同上,也用 : identityService.setAuthenticatedUserId(userId);
,可是這裏還要配合 流程定義裏面的 開始事件 startEvent
,在開始事件中設置初始信息 。eg:ide
<startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"/>
注: 這裏applyUserId 是被存放在流程變量中的 , 而它的值就是 identityService.setAuthenticatedUserId(userId)
存入的userId。 由於是流程變量,因此能夠用通用的獲取流程變量的方法獲得。code
使用流程變量(Map) 。以前提過,在啓動流程時有不少方法,同一個方法還有不少重載。如:htm
startProcessInstanceByKey(String processDefinitionKey, Map<String,Object> variables);
這裏啓動除了給流程定義的key,還給了一個map ,這個map 維護了了這個流程實例的變量。裏面你可以存放不少東西,包括啓動人信息。如:事件
// 設置申請人,將之保存在流程變量中 Map<String ,Object > variables = new HashMap<>(); variables.put("applyUser","kk");
至於獲得流程變量的值,示例以下:get
Map<String,Object> vars = taskService.getVariables(task.getId()); for (String variableName : vars.keySet()) { String val = (String) vars.get(variableName); System.out.println(variableName + " = " +val); }
保存在業務表單中。在業務表單維護一個冗餘字段,用於保存發起人。咖啡兔的Demo源代碼就那麼幹的。博客