Alfresco:其他模型中的显示形式
Alfresco: Display form in other model
我在 Alfresco 中创建了一个工作流程,流程如下:
- 工作流发起人填写表格
- 管理人员被分配审查表格
- 如有错误,踢回发起者更新修改
- 否则,表单获得批准并且工作流程完成
我的问题与审核模型有关。目前看起来像下面这样:
虽然这是流程的下一步,但审阅者在不返回并选择 "View Workflow" 按钮的情况下无法参考表单信息。在该页面上显示了一个静态版本的表单,其中包含所有信息。
有没有办法:
- 在评论模型中显示表格的静态副本?
- 在审查模型之前显示表格的静态副本?
这里是我所指的"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>
我在 Alfresco 中创建了一个工作流程,流程如下:
- 工作流发起人填写表格
- 管理人员被分配审查表格
- 如有错误,踢回发起者更新修改
- 否则,表单获得批准并且工作流程完成
我的问题与审核模型有关。目前看起来像下面这样:
虽然这是流程的下一步,但审阅者在不返回并选择 "View Workflow" 按钮的情况下无法参考表单信息。在该页面上显示了一个静态版本的表单,其中包含所有信息。
有没有办法:
- 在评论模型中显示表格的静态副本?
- 在审查模型之前显示表格的静态副本?
这里是我所指的"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>