如何获得"结果"值和管理规则将文档移动到Alfresco中的另一个文件夹?

时间:2016-09-15 12:37:28

标签: alfresco

我想在监视工作流的(最终)结果任务的文件夹中创建规则,并将文档移动到另一个文件夹。我使用在Repository>中找到的已修改的Pooled review基本模板。数据字典>脚本目录(start-pooled-review-workflow.js)。

我创建的规则是:

+++++++++

:当

项目已更新

如果符合所有条件:

结果包含'任务完成'

- 结果等于bpm:结果名称。从"显示更多.."菜单选择。

执行操作:

将项目移至......

+++++++++

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

我在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

有人能给我一个线索吗?如何以正确的方式捕获工作流的最终状态/结果?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该阅读并使用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>

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