Workflow 如何在Alfresco的Activiti工作流开始时从bpm_包中删除项目?

Workflow 如何在Alfresco的Activiti工作流开始时从bpm_包中删除项目?,workflow,alfresco,activiti,Workflow,Alfresco,Activiti,我一直在研究一个解决方案,从bpm_包中删除每个没有“cm:versionable”特性的节点。我需要在启动任务开始时完成,这样用户就不能在没有附加特性的文档中启动工作流 我不希望在用户单击“开始工作流”按钮后执行此验证 我试过使用这段代码,但它没有达到我需要的效果。它应该有用,不是吗 <startEvent id="start" name="Início" activiti:initiator="initiatorUserName" activiti:fo

我一直在研究一个解决方案,从bpm_包中删除每个没有“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 = "\n\nThe following item(s) cannot be attached to the workflow:\n";
                            throw new Error(message + items + "\n");
                        }

                    ]]></activiti:string>
                </activiti:field>
            </activiti:executionListener>
        </extensionElements>
    </startEvent>

0){
var message=“\n\n下列项目无法附加到工作流:\n”;
抛出新错误(消息+项目+“\n”);
}
]]>
希望它能帮助别人