您应该阅读并通读 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 < 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 < 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>
在文档、此答案和工作流教程之间,您应该拥有所需的内容。