Alfresco Activiti工作流:从StartTask设置方面的值
我需要在开始表单的文本字段中设置一个值,然后在其他几个任务中提取此信息。为此,我使用了一个方面,试图将数据发送到执行变量,然后将其向下拉 问题是我无法将值从开始表单发送到执行变量。现在,Share只会说工作流无法启动 我使用的是Alfresco 4.2.f社区版 启动事件在BPMN中定义如下:Alfresco Activiti工作流:从StartTask设置方面的值,alfresco,activiti,Alfresco,Activiti,我需要在开始表单的文本字段中设置一个值,然后在其他几个任务中提取此信息。为此,我使用了一个方面,试图将数据发送到执行变量,然后将其向下拉 问题是我无法将值从开始表单发送到执行变量。现在,Share只会说工作流无法启动 我使用的是Alfresco 4.2.f社区版 启动事件在BPMN中定义如下: <startEvent id="start" name="Start Delivery Ticket Workflow" activiti:initiator="initiatorUserName"
<startEvent id="start" name="Start Delivery Ticket Workflow" activiti:initiator="initiatorUserName" activiti:formKey="deliveryTicketWorkflow:start">
<documentation>Project Manager initiates workflow. A customer purchase order is provided, along with the specific line items for the delivery ticket.</documentation>
<extensionElements>
<activiti:executionListener class="org.alfresco.repo.workflow.activiti.listener.ExecutionListener" event="start">
<activiti:field name="script">
<activiti:string><![CDATA[
execution.setVariable('deliveryTicketWorkflow_requestdetailstext', task.getVariable('deliveryTicketWorkflow_requestdetailstext'));;
]]></activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</startEvent>
项目经理启动工作流。将提供客户采购订单以及交货通知单的特定行项目。
我的模型的相关部分包括:
<type name="deliveryTicketWorkflow:start">
<parent>bpm:startTask</parent>
<properties />
<associations />
<overrides />
<mandatory-aspects>
<aspect>deliveryTicketWorkflow:requestdetails</aspect>
</mandatory-aspects>
</type>
[...]
<aspect name="deliveryTicketWorkflow:requestdetails">
<properties>
<property name="deliveryTicketWorkflow:requestdetailstext">
<title>Specific Details</title>
<type>d:text</type>
<mandatory>true</mandatory>
<multiple>false</multiple>
</property>
</properties>
</aspect>
bpm:startTask
deliveryTicketWorkflow:requestdetails
[...]
具体细节
d:文本
真的
假的
在配置中:
<config condition="deliveryTicketWorkflow:start" evaluator="task-type">
<forms>
<form>
<field-visibility>
<show id="packageItems"/>
<show id="deliveryTicketWorkflow:requestdetailstext"/>
<show id="transitions"/>
</field-visibility>
<appearance>
<set appearance="title" label-id="Prepare Delivery Ticket" id="info"/>
<field set="info" id="packageItems"/>
<field set="info" label-id="Request Details" id="deliveryTicketWorkflow:requestdetailstext">
<control template="/org/alfresco/components/form/controls/info.ftl"/>
</field>
<set id="response"/>
<field set="response" id="transitions"/>
</appearance>
</form>
</forms>
</config>
[...]
<config condition="activiti$deliveryTicketWorkflow" evaluator="string-compare">
<forms>
<form>
<field-visibility>
<show id="bpm:workflowPriority"/>
<show id="packageItems"/>
<show id="deliveryTicketWorkflow:requestdetails"/>
<show id="transitions"/>
<show id="deliveryTicketWorkflow:approveRejectOutcome"/>
</field-visibility>
<appearance>
<set appearance="title" label-id="Request Delivery Ticket" id="info"/>
<field set="info" label-id="workflow.field.priority" id="bpm:workflowPriority">
<control template="/org/alfresco/components/form/controls/workflow/priority.ftl"/>
</field>
<field set="info" id="packageItems"/>
<field set="info" label-id="Request Details" id="deliveryTicketWorkflow:requestdetails">
<control template="/org/alfresco/components/form/controls/textarea.ftl"/>
</field>
<set id="response"/>
<field set="response" id="approveRejectOutcome">
<control template="/org/alfresco/components/form/controls/workflow/activiti-transitions.ftl"/>
</field>
<field set="response" id="transitions"/>
</appearance>
</form>
</forms>
</config>
[...]
我在这里看到了至少一个类似的问题,但答案是在开始表单中使用任务侦听器。我一点也不确定它是如何工作的,因为它似乎不是一个“真正”的任务,只能使用ExecutionListeners。差异应该很小,但似乎在开始任务中对“任务”的任何引用都会导致失败或根本没有影响。因为我不能使用task.getVariableLocal()来获取值,所以我看不出要将什么赋予execution.setVariable()作为值。这是一个很长的选择,但在共享表单中,您的自定义字段使用了info控件:
我相信你需要在那里有一个常规字段,信息字段是显示文本的,好吧,它不包括输入字段,不会向工作流开始发送任何内容。以我的经验,开始任务中的方面和属性的所有值都会自动复制到executionContext,并且已可用于将来的任务 尝试删除BPMN中的executionlistener,您不应该需要它。然后尝试在后续任务上创建starttasklistener,将ExecutionContext中的值复制到此任务中。它应该很好用 在后续任务中从executioncontext取回var的工作方式如下:
<activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="language" stringValue="groovy" /
<activiti:field name="script">
<activiti:string><![CDATA[
System.out.println(execution.getVariable("deliveryTicketWorkflow_requestdetailstext"));
if (execution.getVariable("deliveryTicketWorkflow_requestdetailstext") != null){
task.setVariableLocal('deliveryTicketWorkflow_requestdetailstext', execution.getVariable("deliveryTicketWorkflow_requestdetailstext"));
}]]>
</activiti:string>
</activiti:field>
</activiti:taskListener>
您的建议是正确的,info formcontrol不支持数据修改,也不提交任何数据(甚至不是默认数据或预先输入的值)由于启动任务的模型将deliveryTicketWorkflow:requestdetails
作为强制特性,而将deliveryTicketWorkflow:requestdetailstext
作为强制特性,导致工作流无法启动,因为它缺少一些强制数据。但是,这并不能帮助OP在以后将一些数据从开始任务传递到其他任务…@MichaelKay:您可以启动该流程吗(即使您以后无法从其他任务的开始事件中检索该值)?我当前无法启动该流程。我在alfresco.log、alfrescotomcat-stderr.log或alfrescotomcat-stdout.log中没有看到任何详细说明失败原因的内容。似乎开始表单实际上是从activiti$deliveryTicketWorkflow而不是deliveryTicketWorkflow:start中提取的,尽管deliveryTicketWorkflow:start是表单键。我已经更新了发布的配置以包含它。像这样的任务需要阅读它吗?因为这对我不起作用<代码>澄清:当我删除执行侦听器并在下一个任务中使用上述任务侦听器时,任务运行正常,但消息仍然没有从起始表单移动到第二个表单。您应该从执行上下文对象(execution.getVariable)中获取值(“deliveryTicketWorkflow_requestdetailstext”)。我已经更新了我的答案这很有意义,我将该任务的脚本更改为完全相同的(开始事件为空,不再有侦听器)它仍然没有移动数据。fwiw:所有其他任务都在移动数据。只是从一开始就无法获取的文本。我是一个完全的白痴。我盯着这个东西看了好几天,没有意识到我在表单上引用了方面名称,而不是我想要的实际属性。一旦我解决了这个问题,一切都变了你说它应该做什么就做什么。