【问题标题】:How to get "Outcome" value and manage rule to move document to another folder in Alfresco?如何获取“结果”值并管理规则以将文档移动到 Alfresco 中的另一个文件夹?
【发布时间】:2016-09-17 01:48:11
【问题描述】:

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

我创建的规则是:

+++++++++++

时间:

项目已更新

如果满足所有条件:

结果包含“任务完成”

--Outcome 等于 bpm:outcome 名称。从“显示更多..”菜单选择。

执行操作:

将项目移动到...

+++++++++++

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

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

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

非常感谢!

【问题讨论】:

  • 令我困惑的是,您正在谈论文件夹规则,但您正在尝试检查工作流程结果,这是工作流程的一部分,而不是文档的一部分。除非您在工作流程中设置了文档属性,否则您将无法按照规则执行您正在执行的操作。
  • 谢谢杰夫。它确实打开了我对文档和工作流程的基本理解,因为我是新手。我会尝试你的建议。还有一个问题,我可以设置文档属性的工作流脚本在哪里?

标签: alfresco


【解决方案1】:

您应该阅读并通读 this tutorial 的高级工作流程。

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

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

在此示例中,代码将在为用户创建“已批准通知”任务时运行。 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>

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

【讨论】:

  • 非常感谢,我已经阅读并练习了您的教程。上帝祝福你! (y)
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多