我正在Alfresco Share中使用Activiti工作流程,我需要爲工作流程中的所有用戶任務表單添加一個通用標題。該標題將是一組只讀屬性(字段),用於在工作流程的所有用戶任務表單頂部顯示上下文工作流程信息。例如,在客戶端管理工作流程中,標題可以顯示客戶端名稱和姓氏,客戶端文件代碼等,以只讀文本框或標籤顯示每個值。如何向Activiti工作流程中的所有用戶任務表單添加標題?
是否有一種簡單的方法將一組信息字段添加到工作流中的所有用戶任務表單中(並將它們填充)?我知道可以創建一個包含所需屬性的新方面,但是如何在運行時將該方面添加到我的任務類型並在需要時通過JavaScript設置它們的屬性值?目前,工作流中的每個用戶任務在工作流模型定義(XML文件)中都有自己的自定義類型(即表單),但某些「標準」審閱任務使用「wf:activitiReviewTask」作爲表單鍵。該組只讀信息字段應顯示在所有表單中,包括標準審閱任務表單。
我想要實現這樣的事情(見紅方):
Task form with information fields
感謝您的幫助提前。
更新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>
workflowModel.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);
根據我們的代碼,我的理解是添加顯示客戶端名稱和姓氏的標題給自定義工作流程的所有任務。但我想知道這些標題值是從哪裏來的?我的意思是,當你的工作流程和你想在你的任務中顯示這些信息時,你保存了這些值? – swemon
感謝您的評論。我從開始時調用的Web服務獲取字段值,然後將它們保存在流程上下文中供以後使用。 –
如果您可以在所有自定義任務上設置額外的屬性(如您所示,您需要創建多個自定義任務),那麼我可以看到這個工作。但是,像這樣複製數據不一定是最好的解決方案 - 如果它發生變化,那麼您的工作流程將不會反映這一點。 –