Workflow 重新分配;“发起人”;在户外活动工作流中

Workflow 重新分配;“发起人”;在户外活动工作流中,workflow,alfresco,activiti,Workflow,Alfresco,Activiti,我正在尝试将Alfresco Activiti工作流中的“发起人”重新分配给“管理员”,以防止原始发起人修改工作流。除了工作流仅出现在原始发起人的“我已启动的工作流”下拉列表中外,此操作正常。它不会出现在“管理员”“我已启动的工作流”中。有人知道我需要更改什么才能真正将工作流程完全更改为此人吗 @Override public void notify(final DelegateExecution execution) { AuthenticationUtil.runAs

我正在尝试将Alfresco Activiti工作流中的“发起人”重新分配给“管理员”,以防止原始发起人修改工作流。除了工作流仅出现在原始发起人的“我已启动的工作流”下拉列表中外,此操作正常。它不会出现在“管理员”“我已启动的工作流”中。有人知道我需要更改什么才能真正将工作流程完全更改为此人吗

@Override
    public void notify(final DelegateExecution execution) {
        AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>() {
            @Override
            public Object doWork() throws Exception {
                System.out.println("in SetInitiatorListener");
                ActivitiScriptNode initiatorScriptNode = (ActivitiScriptNode) execution.getVariable("initiator");
        execution.setVariable(UtilModel.WORKFLOW_FINANCE_ORIGINAL_INITIATOR_SCRIPT_NODE, initiatorScriptNode);
            execution.setVariable(UtilModel.WORKFLOW_FINANCE_ORIGINAL_INITIATOR_USERNAME, initiatorScriptNode.getProperties().get("userName"));
            NodeRef initiatorNodeRef = initiatorScriptNode.getNodeRef();
            if (workFlowType.getExpressionText().equals("pcardis")) {
                execution.setVariable(UtilModel.WORKFLOW_FINANCE_PCARD_ORIGINAL_INITIATOR_NODE, initiatorNodeRef);
            } else {
                execution.setVariable(UtilModel.WORKFLOW_FINANCE_JOURNAL_VOUCHER_ORIGINAL_INITIATOR_NODE, initiatorNodeRef);
            }

            String path = templatePath.getExpressionText();
            System.out.println("path:" + path);
            Properties ownerMappings = templateUtil.loadTemplates(path);
            String ownerString = ownerMappings.getProperty(workFlowType.getExpressionText()); // pcardis?
            if (ownerString == null) { // try catagory
                String category = (String) execution.getVariable(UtilModel.WORKFLOW_FINANCE_JOURNAL_VOUCHER_CATEGORY);
                System.out.println("category:" + category);
                if (category != null) {
                    ownerString = ownerMappings.getProperty(category);
                }
            }
            if (ownerString == null) { // else DEFAULT
                ownerString = ownerMappings.getProperty("DEFAULT");
            }
            NodeRef newInitiatorNodeRef = personService.getPerson(ownerString);
            ActivitiScriptNode asn = new ActivitiScriptNode(newInitiatorNodeRef, serviceRegistry);
            execution.setVariable("initiator", asn);               
            execution.setVariable("initiatorhome", asn);      
            //execution.setVariable("originalInitiatorScriptNode", asn);

            return null;
        }
    }, AuthenticationUtil.getAdminUserName());
}
@覆盖
公共作废通知(最终授权执行){
AuthenticationUtil.runAs(新的AuthenticationUtil.RunAsWork(){
@凌驾
公共对象doWork()引发异常{
System.out.println(“in-SetInitiatorListener”);
ActivitiScriptNode启动器ScriptNode=(ActivitiScriptNode)execution.getVariable(“启动器”);
setVariable(UtilModel.WORKFLOW_FINANCE_ORIGINAL_INITIATOR_SCRIPT_NODE,initiatorScriptNode);
setVariable(UtilModel.WORKFLOW_FINANCE_ORIGINAL_INITIATOR_USERNAME,initiatorScriptNode.getProperties().get(“USERNAME”);
NodeRef initiatorNodeRef=initiatorScriptNode.getNodeRef();
if(workFlowType.getExpressionText().equals(“pcardis”)){
setVariable(UtilModel.WORKFLOW\u FINANCE\u PCARD\u ORIGINAL\u INITIATOR\u NODE,initiatorNodeRef);
}否则{
execution.setVariable(UtilModel.WORKFLOW\u FINANCE\u JOURNAL\u凭证\u ORIGINAL\u INITIATOR\u节点,initiatorNodeRef);
}
字符串路径=templatePath.getExpressionText();
System.out.println(“路径:+path”);
Properties ownerMappings=templateUtil.loadTemplates(路径);
String ownerString=ownerMappings.getProperty(workFlowType.getExpressionText());//pcardis?
如果(ownerString==null){//请尝试分类
字符串类别=(字符串)execution.getVariable(UtilModel.WORKFLOW\u FINANCE\u JOURNAL\u凭证\u category);
System.out.println(“类别:“+类别”);
如果(类别!=null){
ownerString=ownerMappings.getProperty(类别);
}
}
如果(ownerString==null){//else默认值
ownerString=ownerMappings.getProperty(“默认值”);
}
NodeRef newInitiatorNodeRef=personService.getPerson(ownerString);
ActivitiScriptNode asn=新ActivitiScriptNode(newInitiatorNodeRef,serviceRegistry);
setVariable(“启动器”,asn);
setVariable(“initiatorhome”,asn);
//setVariable(“originalinitatorscriptnode”,asn);
返回null;
}
},AuthenticationUtil.getAdminUserName());
}

这里的一种方法是重写WorkflowPermissionInterceptor,特别是WorkflowPermissionInterceptor#IsInitiatorAssignee()。对于不允许启动器访问的调用方法,此方法应返回false

如果这是一个企业项目,您需要从Alfresco支持部门获得这类更改的签准,否则您将面临将实现置于不受支持状态的风险


这个答案确实解决了你的问题,但也解决了你的问题。通过更改对拦截器的重写,您可以阻止发起人修改工作流任务(除非他们是管理员用户或受让人)。

您可以共享一些重新分配的代码吗?这有助于我们分析所使用的方法是否正确。