Alfresco:在其他模型

时间:2015-06-24 15:17:56

标签: forms model workflow alfresco activiti

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

Workflow diagram

  • 工作流程启动器填写表单
  • 指定管理层审核表单
  • 如果有错误,则会将其踢回发起人以进行更新和修改
  • 否则,表单已获批准且工作流程已完成

我的问题在于评论模型。目前看起来如下:

Review model

虽然这是该过程的下一步,但审阅者没有参考表格信息而不返回并选择"查看工作流程"按钮。在该页面上,将显示表单的静态版本,其中包含所有信息。

有办法:

  1. 在审核模型中显示表格的静态副本?
  2. 审核模型之前显示表格的静态副本?
  3. 以下是" View Workflow"中静态表单的摘录。我所指的区域,并希望显示:

    Exerpt

2 个答案:

答案 0 :(得分:2)

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

execution.setVariable("varName",value);

你可以通过以下命令获得价值。

execution.getVariable("varName");

以下链接可以使用完整。 Alfresco task listener variables

还有一种方法可以实现这一目标。

您最后添加的图片,在该页面上将有一个将被调用的其他API。您可以使用它来获取数据。 并在下一个表单上显示它。在那个休息api,你需要可能需要传递任务细节和工作流程细节。可能是他们的id。

答案 1 :(得分:2)

非常感谢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 是您为exection变量指定的名称, 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 语句将为true(因为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>