我一直在研究一个解决方案,从bpm_package中删除每个没有"cm:versionable"方面的节点。我需要在启动任务开始时完成,这样用户就不能用没有附加方面的文档来启动工作流。
我不想在用户单击"启动工作流"按钮后进行此验证。
我试过使用这段代码,但它没有达到我需要的效果。它应该起作用,不是吗?
<startEvent id="start" name="Início" activiti:initiator="initiatorUserName"
activiti:formKey="workflowdocumentrequest:start">
<extensionElements>
<activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
<activiti:field name="script">
<activiti:string>
<![CDATA[
for (var i = 0; i < bpm_package.children.length; i++)
{
if(!bpm_package.children[i].hasAspect("cm:versionable")){
bpm_package.removeNode(bpm_package.children[i]);
}
}
]]>
</activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</startEvent>
实际上,我发布的代码不应该像我想象的那样在表单创建时执行。一旦用户单击"启动工作流"按钮,就会触发此事件。
因此,我更改了te代码,向用户显示一条错误消息,其中包含无法附加到工作流的项目,而不是删除它们并启动它,而不给它们任何选项或响应。
新代码如下所示:
<startEvent id="start" name="Início" activiti:initiator="initiatorUserName"
activiti:formKey="workflowdocumentrequest:start">
<extensionElements>
<activiti:executionListener class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener"
event="start">
<activiti:field name="script">
<activiti:string><![CDATA[
var count = 0;
var items = "";
for (var i = 0; i < bpm_package.children.length; i++) {
var child = bpm_package.children[i];
if (!child.hasAspect("cm:versionable")) {
items += child.properties['cm:name'] + "n";
count++;
}
}
if (count > 0){
var message = "nnThe following item(s) cannot be attached to the workflow:n";
throw new Error(message + items + "n");
}
]]></activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
</startEvent>
希望它能帮助其他人。