如何获取 "Outcome" 值并管理规则以将文档移动到 Alfresco 中的另一个文件夹?

How to get "Outcome" value and manage rule to move document to another folder in Alfresco?

我想在一个文件夹中创建一个规则来监控工作流的(最终)结果任务并将文档移动到另一个文件夹。我使用修改后的 Pooled review 基本模板,它位于 Repository > Data Dictionary > Scripts 目录 (start-pooled-review-workflow.js).

我创建的规则是:

+++++++++

时间:

项目已更新

如果满足所有条件:

结果包含 'Task Done'

--结果等于bpm:outcome名字。从 "Show more.." 菜单选择。

执行操作:

将项目移至...

+++++++++

但我无法按预期获得最终结果的值:任务完成。 因此,规则永远不会将文档移动到另一个文件夹。

我在Alfresco论坛上也发现了类似的问题:

https://forums.alfresco.com/forum/end-user-discussions/alfresco-share/how-manage-rule-move-approved-files-another-folder

https://forums.alfresco.com/forum/installation-upgrades-configuration-integration/configuration/triggering-rule-when-document

任何人都可以给我一些线索吗?如何以正确的方式捕获工作流的最终 status/outcome?

非常感谢!

您应该阅读并完成 this tutorial 高级工作流程。

该教程中包含的示例之一是如何 运行 对工作流包中的每个文档执行操作。代码片段如下所示:

<userTask id="usertask4" name="Approved Notification" activiti:assignee="${initiator.properties.userName}" activiti:formKey="scwf:activitiApprovedNotification">
    <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="script">
                <activiti:string>
                    var setWebFlagAction = actions.create("set-web-flag");
                    setWebFlagAction.parameters["active"] = true;
                    for (var i = 0; i &lt; bpm_package.children.length; i++) {
                        logger.log("Approving node:" + bpm_package.children[i].nodeRef);
                        setWebFlagAction.execute(bpm_package.children[i]);
                    }
                </activiti:string>
            </activiti:field>
        </activiti:taskListener>
    </extensionElements>
</userTask>

在此示例中,当为用户创建 "Approved Notification" 任务时,代码将 运行。 JavaScript 正在 运行 执行操作。

在您的情况下,如果您只想设置一个 属性,则不需要 运行 一个操作。您可以只使用 JavaScript API 来设置 属性。它会是这样的:

<userTask id="usertask4" name="Approved Notification" activiti:assignee="${initiator.properties.userName}" activiti:formKey="scwf:activitiApprovedNotification">
    <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="script">
                <activiti:string>
                    var setWebFlagAction = actions.create("set-web-flag");
                    setWebFlagAction.parameters["active"] = true;
                    for (var i = 0; i &lt; bpm_package.children.length; i++) {
                        var doc = bpm_package.children[i];
                        doc.properties["cm:description"] = "Set via workflow";
                        doc.save();
                    }
                </activiti:string>
            </activiti:field>
        </activiti:taskListener>
    </extensionElements>
</userTask>

我在这里设置描述,但它可以是任何 属性,包括自定义 属性。

那时你可以配置一个规则,当 属性 以某种方式设置时执行某些操作。

这些示例将代码放在用户任务中。 Activiti 还允许您执行基本上只是脚本执行的任务,因此您不必将任务分配给人类只是 运行 一些脚本。这些称为服务任务。这是一个例子:

<serviceTask id="exampleServiceTask" name="Example Service Task" activiti:class="org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate">
  <extensionElements>
    <activiti:field name="script">
      <activiti:string><![CDATA[
          logger.log("Just an example");
      ]]></activiti:string>
    </activiti:field>
  </extensionElements>
</serviceTask>

在文档、此答案和工作流教程之间,您应该拥有所需的一切。