activiti 學習( 三 ) 之 流程啓動者

在啓動一個流程時,咱們會有將當前用戶啓動的流程保存起來,做爲流程發起人(啓動人、申請人、提交人)html

而在保存這個流程啓動者信息,api 沒有明確規範該怎麼存。因此這裏我總結下我學到的保存流程啓動者信息的方法。api

  • 咖啡兔博客中的作法 - Activiti設置流程發起用戶信息 - 咖啡兔 - HenryYan
    注: 若是單純照博客這麼作的話,確實能在 ACT_HI_PROCINSTSTART_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源代碼就那麼幹的。博客

相關文章
相關標籤/搜索