Alfresco:其他模型中的显示形式

Alfresco: Display form in other model

我在 Alfresco 中创建了一个工作流程,流程如下:

我的问题与审核模型有关。目前看起来像下面这样:

虽然这是流程的下一步,但审阅者在不返回并选择 "View Workflow" 按钮的情况下无法参考表单信息。在该页面上显示了一个静态版本的表单,其中包含所有信息。

有没有办法:

  1. 在评论模型中显示表格的静态副本?
  2. 审查模型之前显示表格的静态副本

这里是我所指的"View Workflow"区静态表格的摘录,希望展示:

如果你想将之前的模型值传递给工作流中的下一个任务,你需要使用下面的变量设置每个值。

execution.setVariable("varName",value);

您可以通过以下命令获取值。

execution.getVariable("varName");

link以下可以满额使用。 Alfresco task listener variables.

还有一种方法可以实现。

您在最后添加的有问题的图像,在该页面上将有一个休息 API 将获取 called.You 可以使用它来获取数据。 并将其显示在剩下的 api 的下一个 form.On 上,您可能需要传递任务详细信息和工作流程 details.May 作为它们的 ID。

非常感谢 Krutik 的回答。下面是我如何让它工作的完整解释。

总结

  • 在您的 bpmn 文件中,创建一个加载表单副本的 userTask(重复意味着使用不同的名称复制模型中的类型)。
  • 在模型中使用相同的 属性 ID,以便数据传输过来。
  • 在您的 share-config-custom.xml 中,将此模型的所有控件设置为 info.ftl 以使其显示而不可编辑。
  • 要获取表单字段信息以在提交和修改任务之间显示和更新,请在不同的 userTask 脚本中设置执行和任务变量。

要让变量在表单之间传输(比如在提交和修改表单之间),您必须执行以下操作:

设置变量(初始形式)

在您的 .bpmn 文件中,在用户首次将数据输入表单的事件上创建一个任务侦听器。例如,如果您在工作流开始时有表单,您将使用以下内容:

<activiti:taskListener event="start" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">

或者,如果您在稍后的 userTask 中有第一个表单,请将 "start" 更改为 "create" 并将其放在该表单下。在此侦听器下,您将添加一个具有不同集合的脚本:

if (typeof identifier_variableName != 'undefined') task.setVariableLocal('identifier_propertyName', identifier_propertyName);

if 检查您是否在初次提交修改字段后重新访问此表单。第一次,您的所有变量都将是未定义的,因此不会采取任何操作。这允许您在不定义另一个模型的情况下重用您的表单。

identifier_variableName 是您为执行变量指定的名称,identifier_property 是执行变量的名称属性 你想保存。

例如,如果在您的模型中有一个名为 someCo:textBox 的 d:text 属性,您将使用:

if (typeof someCo_textBox != 'undefined') task.setVariableLocal('someCo_textBox', someCo_textBox);

重置变量(审查和修订表格)

正如我在此答案开头所解释的那样,创建具有相同 属性 名称的重复模型将从第一个表单提交中加载数据。但是为了让修改表单更新数据,必须重新设置变量。

在加载重复表单的 userTask 中,使用 event="complete" 创建一个任务侦听器。然后,对于您在第一种形式中定义的每个变量,您将使用 execution.setVariable,如下所示:

execution.setVariable("someCo_textBox", task.getVariableLocal("someCo_textBox"));

这会更新执行变量,以便再次加载第一个表单时,if 语句将为真(因为 someCo_textBox 将不再是未定义的) , 更新后的 属性 将显示。

如果您想在审阅和修订表单之间传递消息,只需向审阅和修订模型添加一个新的 属性,并添加其各自的变量集。

代码示例

除非您完全理解我上面概述的过程的每个摘录,否则我相信您会有疑问。所以,这是一个更完整的代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="formWorkflow" isExecutable="true">
    <startEvent id="start" activiti:initiator="initiatorUserName" activiti:formKey="formWorkflow:start"></startEvent>
    <sequenceFlow id="sequenceFlow1" sourceRef="start" targetRef="userTask1"></sequenceFlow>
    <userTask id="userTask1" name="Review Submission" activiti:candidateGroups="GROUPS_REVIEW_GROUP" activiti:formKey="formWorkflow:reviewSubmission">
      <extensionElements>
  <activiti:taskListener event="start" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[if (typeof formWorkflow_textField != 'undefined') task.setVariableLocal('formWorkflow_textField', formWorkflow_textField);]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>        
  <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[if (typeof task.getVariableLocal('formWorkflow_approveRejectOutcome') != undefined) execution.setVariable('formWorkflow_approveRejectOutcome', task.getVariableLocal('formWorkflow_approveRejectOutcome'));
            if (typeof task.getVariableLocal('bpm_comment') != 'undefined') execution.setVariable('bpm_comment', task.getVariableLocal('bpm_comment'));
   execution.setVariable("formWorkflow_commentBox", task.getVariableLocal("formWorkflow_commentBox"));
   execution.setVariable('bpm_comment', task.getVariableLocal("formWorkflow_commentBox"));]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <exclusiveGateway id="exclusiveGateway1"></exclusiveGateway>
    <userTask id="userTask2" name="Revise Submission" activiti:assignee="${initiator.properties.userName}" activiti:formKey="formWorkflow:reviseSubmission">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate;
if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;
if (typeof formWorkflow_commentBox != 'undefined') task.setVariableLocal('formWorkflow_commentBox', formWorkflow_commentBox);]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
   <activiti:field name="script">
    <activiti:string><![CDATA[execution.setVariable("formWorkflow_textField", task.getVariableLocal("formWorkflow_textField"));]]></activiti:string>
   </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <sequenceFlow id="sequenceFlow4" name="Revise if rejected" sourceRef="exclusiveGateway1" targetRef="userTask2">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${formWorkflow_approveRejectOutcome == "Requires Revision"}]]></conditionExpression>
    </sequenceFlow>
    <endEvent id="end"></endEvent>
    <sequenceFlow id="flow1" sourceRef="userTask1" targetRef="exclusiveGateway1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="exclusiveGateway1" targetRef="end"></sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="userTask2" targetRef="userTask1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_formWorkflow">
    <bpmndi:BPMNPlane bpmnElement="formWorkflow" id="BPMNPlane_formWorkflow">
      <bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
        <omgdc:Bounds height="35.0" width="35.0" x="120.0" y="13.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="userTask1" id="BPMNShape_userTask1">
        <omgdc:Bounds height="60.0" width="100.0" x="220.0" y="1.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="exclusiveGateway1" id="BPMNShape_exclusiveGateway1">
        <omgdc:Bounds height="40.0" width="40.0" x="380.0" y="10.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="userTask2" id="BPMNShape_userTask2">
        <omgdc:Bounds height="60.0" width="100.0" x="351.0" y="110.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
        <omgdc:Bounds height="35.0" width="35.0" x="509.0" y="13.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow1" id="BPMNEdge_sequenceFlow1">
        <omgdi:waypoint x="155.0" y="30.0"></omgdi:waypoint>
        <omgdi:waypoint x="220.0" y="31.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow4" id="BPMNEdge_sequenceFlow4">
        <omgdi:waypoint x="400.0" y="50.0"></omgdi:waypoint>
        <omgdi:waypoint x="401.0" y="110.0"></omgdi:waypoint>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="14.0" width="100.0" x="410.0" y="49.0"></omgdc:Bounds>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="320.0" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="420.0" y="30.0"></omgdi:waypoint>
        <omgdi:waypoint x="509.0" y="30.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="351.0" y="140.0"></omgdi:waypoint>
        <omgdi:waypoint x="270.0" y="140.0"></omgdi:waypoint>
        <omgdi:waypoint x="270.0" y="61.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>