我正在使用 Alfresco Share 中的 Activiti 工作流,我需要为工作流中的所有用户任务表单添加一个通用的标题。此标题将是一组只读属性(字段),在工作流中所有用户任务表单的顶部显示上下文工作流信息。例如,在客户管理工作流中,标题可能会显示客户姓名和姓氏、客户文件代码等,在只读文本框或标签中显示每个值。
是否有一种简单的方法可以向工作流中的所有用户任务表单添加一组信息字段(并填充它们)?我知道可以创建一个包含所需属性的新方面,但是如何在运行时将该方面添加到我的任务类型并在需要时通过 JavaScript 设置它们的属性值?目前,工作流中的每个用户任务在工作流模型定义(XML 文件)中都有自己的自定义类型(即表单),除了一些“标准”审查任务使用“wf:activitiReviewTask”作为表单键。只读信息字段集应出现在所有表单中,包括标准审阅任务表单。
我想实现这样的目标(见红色方块):
提前感谢您的帮助。
更新 1
我没有使用表单模板的经验。由于我的表单非常简单,所以我只是使用了一些模型定义(方面和类型)和一些共享自定义配置来组合来设计它们。我希望在标题中显示的信息可以很容易地从 JavaScript 代码中检索,因为它存储在几个工作流上下文变量中。这是我的想法,尚未测试,请告诉我这是否可行。如果没有,您能否提供一个如何使用表单模板进行操作的示例?
mynsModel.xml
<aspect name="myns:customerTaskHeader">
<title>Customer task header</title>
<properties>
<property name="myns:customerName">
<title>Name</title>
<type>d:text</type>
</property>
<property name="myns:customerSurname">
<title>Surname</title>
<type>d:text</type>
</property>
</properties>
</aspect>
工作流模型.xml
<type name="wf:customerDelivery">
<title>Delivery to customer</title>
<parent>bpm:workflowTask</parent>
<properties>
<property name="wf:customerDeliveryType">
<title>Delivery type</title>
<type>d:text</type>
</property>
<property name="wf:customerDeliveryStatus">
<title>Signed</title>
<type>d:boolean</type>
</property>
</properties>
<mandatory-aspects>
<aspect>myns:customerTaskHeader</aspect>
</mandatory-aspects>
</type>
共享配置-custom.xml
<config evaluator="task-type" condition="wf:customerDelivery">
<forms>
<form>
<field-visibility>
<show id="myns:customerName" />
<show id="myns:customerSurname" />
<show id="packageItems" />
<show id="wf:customerDeliveryType" />
<show id="wf:customerDeliveryStatus" />
<show id="bpm:comment" />
<show id="transitions" />
</field-visibility>
<appearance>
<set id="" appearance="title" label-id="workflow.set.general" />
<set id="items" appearance="title" label-id="workflow.set.items" />
<set id="response" appearance="title" labelid="workflow.set.response" />
<field id="bpm:comment" labelid="workflow.field.message">
<control template="/org/alfresco/components/form/controls/textarea.ftl">
<control-param name="style">width: 95%</control-param>
</control>
</field>
<field id="packageItems" set="items" />
<field id="transitions" set="response" />
<field id="myns:customerName" read-only="true">
<control template="/org/alfresco/components/form/controls/info.ftl" />
</field>
<field id="myns:customerSurname" read-only="true">
<control template="/org/alfresco/components/form/controls/info.ftl" />
</field>
</appearance>
</form>
</forms>
</config>
我在这个(可能的)解决方法中看到了一些缺点:
- 所有任务类型定义都必须包含
customerTaskHeader
方面。问题是工作流中的许多用户任务都有内置类型,而不是自定义类型。如果能够在运行时通过 JavaScript 代码将具有所有必需值的方面添加到任务类型中,那就太好了,但这可能是不可能的。 - 对于 share-config-custom.xml 中的每种任务类型,我需要一个不同的自定义配置评估器。同样的问题。
- 我发现它使用起来很麻烦,而且很难维护。此外,如果我错了,请纠正我,我看不到为工作流中所有任务表单的标题字段设置值的简单方法。我认为我应该使用以下代码为每个用户任务添加一个“创建”事件侦听器:
[JavaScript 代码]
var customerName = execution.getVariable('customerName');
var customerSurname = execution.getVariable('customerSurname');
task.setVariable('myns_customerName', customerName);
task.setVariable('myns_customerSurname', customerSurname);