Activiti 工作流:从 StartTask 中设置一个方面的值



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

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

我正在使用Alfresco4.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>

在配置中:

<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() 作为值。

根据我的经验,启动任务中方面和属性的所有值都会自动复制到 executionContext 中,并且已经可用于将来的任务。

尝试删除 BPMN 中的执行侦听器,您不需要它。然后尝试在后续任务上创建一个 starttasklistener,将执行上下文中的值复制到此任务中。它应该可以正常工作。

在后续任务中从执行上下文中获取 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>

这是一个很长的镜头,但在您的共享表单中,您的自定义字段正在使用信息控件:

我相信你需要有一个常规字段,信息字段是显示文本,AFAIK,它不包括输入字段,也不会向工作流启动发送任何内容。

最新更新