1. 程式人生 > 實用技巧 >activiti學習筆記 ----------------------------FormService

activiti學習筆記 ----------------------------FormService

FormService

  • 解析流程定義中表單項的配置
  • 提交表單的方式驅動使用者節點流轉
  • 獲取自定義外部表單key

示例

首先編寫流程定義檔案:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1536107421286" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="second_approve" isClosed="false" isExecutable="true" name="二級審批" processType="None">
    <startEvent id="startEvent" name="開始" activiti:formKey="/rest/process/form/start"/>
      <extensionElements>
        <activiti:formProperty id="message" name="資訊" type="string" required="true"/>
      </extensionElements>
    <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="myTask"/>
    <userTask id="myTask" name="my-task" activiti:candidateUsers="yubuyun"
      activiti:formKey="/rest/process/form/userTask">
      <extensionElements>
        <activiti:formProperty id="yesOrNo" name="審批" type="string" required="true"/>
      </extensionElements>
    </userTask>
    <sequenceFlow id="flow2" sourceRef="myTask" targetRef="endEvent"/>
    <endEvent id="endEvent" name="取消"/>
  </process>
</definitions>

從流程檔案中可以看出在啟動事件和使用者任務節點都有表單,表單的屬性用extensionElements標籤包裹。

後臺獲取流程定義中配置的屬性程式碼如下:

FormService formService = processEngine.getFormService();

// 獲取表單key和啟動節點表單資料
String formKey = formService.getStartFormKey(processDefinition.getId());
StartFormData startFormData = formService.getStartFormData(processDefinition.getId());
List<FormProperty> formPropertyList = startFormData.getFormProperties();

// 提交開始節點的表單
Map<String,String> properties = new HashMap<String,String>();
properties.put("message","hello world");
ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(),properties);

// 獲取當前使用者任務節點的表單資料
TaskService taskService = processEngine.getTaskService();
Task task1 = taskService.createTaskQuery()
                .processInstanceId(processInstance.getId())
                .singleResult();
TaskFormData taskFormData = formService.getTaskFormData(task1.getId());
logger.info("taskformData={}",taskFormData);

// 提交任務節點的表單
Map<String,String> taskParams = new HashMap<String, String>();
taskParams.put("yesOrNo","yes");
formService.submitTaskFormData(processDefinition.getId(),taskParams);

從上述示例中可知:

  1. 當執行submitStartFormData方法時根據流程定義id提交開始事件的表單後,自動發起流程並從開始節點提交到使用者任務節點。
  2. 提交到使用者任務節點後就可以查詢任務節點的表單資料TaskFormData物件。
  3. 當執行submitTaskFormData方法時候,流程自動從當前節點提交到下個節點。
  4. 由於表單屬性required引數為true,表示提交表單的時候這個引數一定要傳,不然會拋異常。