Alfresco Activiti工作流:从StartTask设置方面的值

Alfresco Activiti工作流:从StartTask设置方面的值,alfresco,activiti,Alfresco,Activiti,我需要在开始表单的文本字段中设置一个值,然后在其他几个任务中提取此信息。为此,我使用了一个方面,试图将数据发送到执行变量,然后将其向下拉 问题是我无法将值从开始表单发送到执行变量。现在,Share只会说工作流无法启动 我使用的是Alfresco 4.2.f社区版 启动事件在BPMN中定义如下: <startEvent id="start" name="Start Delivery Ticket Workflow" activiti:initiator="initiatorUserName"

我需要在开始表单的文本字段中设置一个值,然后在其他几个任务中提取此信息。为此,我使用了一个方面,试图将数据发送到执行变量,然后将其向下拉

问题是我无法将值从开始表单发送到执行变量。现在,Share只会说工作流无法启动

我使用的是Alfresco 4.2.f社区版

启动事件在BPMN中定义如下:

<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:所有其他任务都在移动数据。只是从一开始就无法获取的文本。我是一个完全的白痴。我盯着这个东西看了好几天,没有意识到我在表单上引用了方面名称,而不是我想要的实际属性。一旦我解决了这个问题,一切都变了你说它应该做什么就做什么。