Как получить только переменные формы человеческой задачи Камунды с помощью REST API?

У меня есть простая bpmn с единственной задачей сценария, которая устанавливает переменную процесса, и неавтоматизированной задачей, которая принимает два входных параметра, один выходной параметр и определяет одно поле данных формы.

После запуска процесса выполнение задачи, выполняемой человеком, прекращается. Затем я пытаюсь получить переменные формы неавтоматизированной задачи (т.е. входные переменные и \ или поле данных формы, но не переменную выполнения, установленную задачей экрана).

Результаты запроса REST API следующие:

  • task / id / variables - входные переменные и переменная задачи скрипта
  • task / id / form-variables - входные переменные, поле данных формы и переменная задачи скрипта
  • task / id / localVariables - пусто

Я не могу понять, почему переменная задачи скрипта возвращается вместе с другими переменными формы.

Как я могу получить только входные переменные и поле данных формы, но не переменную задачи экрана (и, возможно, все другие переменные процесса)? РЕДАКТИРОВАТЬ: я не хочу использовать параметры запроса для выбора имен переменных.

Я использую Camunda Widlfly 10.0.0.

Я использую bpmn:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.3.0">
  <bpmn:process id="userTaskExample" isExecutable="true">
    <bpmn:startEvent id="StartEvent_02mu30n">
      <bpmn:outgoing>SequenceFlow_14v3dyf</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:endEvent id="EndEvent_144sl4n">
      <bpmn:incoming>SequenceFlow_0acu0wh</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="SequenceFlow_0acu0wh" sourceRef="Task_096f7n7" targetRef="EndEvent_144sl4n" />
    <bpmn:userTask id="Task_096f7n7" name="user task sk">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="form_1" label="form_1" type="string" defaultValue="form_1_" />
        </camunda:formData>
        <camunda:inputOutput>
          <camunda:inputParameter name="input_1">input_1_val</camunda:inputParameter>
          <camunda:inputParameter name="input_2">input_2_val</camunda:inputParameter>
          <camunda:outputParameter name="output_1">output_2</camunda:outputParameter>
        </camunda:inputOutput>
      </bpmn:extensionElements>
      <bpmn:incoming>SequenceFlow_0sulfwg</bpmn:incoming>
      <bpmn:outgoing>SequenceFlow_0acu0wh</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="SequenceFlow_14v3dyf" sourceRef="StartEvent_02mu30n" targetRef="Task_0cphzp1" />
    <bpmn:sequenceFlow id="SequenceFlow_0sulfwg" sourceRef="Task_0cphzp1" targetRef="Task_096f7n7" />
    <bpmn:scriptTask id="Task_0cphzp1" name="script task sk" scriptFormat="groovy" camunda:resultVariable="script_task_variable">
      <bpmn:incoming>SequenceFlow_14v3dyf</bpmn:incoming>
      <bpmn:outgoing>SequenceFlow_0sulfwg</bpmn:outgoing>
      <bpmn:script><![CDATA["scipt task variable"]]></bpmn:script>
    </bpmn:scriptTask>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="userTaskExample">
      <bpmndi:BPMNShape id="StartEvent_02mu30n_di" bpmnElement="StartEvent_02mu30n">
        <dc:Bounds x="151" y="66" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="169" y="102" width="0" height="0" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="EndEvent_144sl4n_di" bpmnElement="EndEvent_144sl4n">
        <dc:Bounds x="616" y="66" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="634" y="102" width="0" height="0" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_0acu0wh_di" bpmnElement="SequenceFlow_0acu0wh">
        <di:waypoint xsi:type="dc:Point" x="433" y="84" />
        <di:waypoint xsi:type="dc:Point" x="524" y="84" />
        <di:waypoint xsi:type="dc:Point" x="524" y="84" />
        <di:waypoint xsi:type="dc:Point" x="616" y="84" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="539" y="84" width="0" height="0" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="UserTask_1lppvq8_di" bpmnElement="Task_096f7n7">
        <dc:Bounds x="333" y="44" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_14v3dyf_di" bpmnElement="SequenceFlow_14v3dyf">
        <di:waypoint xsi:type="dc:Point" x="169" y="102" />
        <di:waypoint xsi:type="dc:Point" x="169" y="133" />
        <di:waypoint xsi:type="dc:Point" x="252" y="133" />
        <di:waypoint xsi:type="dc:Point" x="192" y="204" />
        <di:waypoint xsi:type="dc:Point" x="275" y="204" />
        <di:waypoint xsi:type="dc:Point" x="275" y="284" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="222" y="153.5" width="0" height="0" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="SequenceFlow_0sulfwg_di" bpmnElement="SequenceFlow_0sulfwg">
        <di:waypoint xsi:type="dc:Point" x="325" y="331" />
        <di:waypoint xsi:type="dc:Point" x="401" y="342" />
        <di:waypoint xsi:type="dc:Point" x="383" y="204" />
        <di:waypoint xsi:type="dc:Point" x="383" y="124" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="392" y="258" width="0" height="0" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="ScriptTask_1q3eqsu_di" bpmnElement="Task_0cphzp1">
        <dc:Bounds x="225" y="284" width="100" height="80" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

person Sebastian Kramer    schedule 05.10.2016    source источник


Ответы (1)


Результаты показывают, что вы отображаете переменную, определенную в задаче сценария, в форме неавтоматизированной задачи. Я говорю это потому, что, когда вы смотрите на источник для получения переменных формы, мы видим:

// first, evaluate form fields
TaskDefinition taskDefinition = task.getTaskDefinition();
if (taskDefinition != null) {
  TaskFormData taskFormData = taskDefinition.getTaskFormHandler().createTaskForm(task);
  for (FormField formField : taskFormData.getFormFields()) {
    if(formVariableNames == null || formVariableNames.contains(formField.getId())) {
      result.put(formField.getId(), createVariable(formField, task));
    }
  }
}

// collect remaining variables from task scope and parent scopes
task.collectVariables(result, formVariableNames, false, deserializeObjectValues);

Обратите внимание, что мы перебираем определение поля формы, чтобы получить имена переменных, которые нам важны, а затем заполняем данные из контекста выполнения.

В конечном итоге Activiti / Camunda (они на 90% одинаковы на уровне движка) не делает различий между данными, введенными в форму, и данными, созданными в сценарии или служебной задаче (например, в качестве переменной результата).

Если вам по какой-то причине необходимо разделить их, я предлагаю вам использовать соглашение об именах и запрашивать переменные процесса на основе соглашения об именах переменных.

person Greg Harley    schedule 05.10.2016