Workflow 重新分配;“发起人”;在户外活动工作流中
我正在尝试将Alfresco Activiti工作流中的“发起人”重新分配给“管理员”,以防止原始发起人修改工作流。除了工作流仅出现在原始发起人的“我已启动的工作流”下拉列表中外,此操作正常。它不会出现在“管理员”“我已启动的工作流”中。有人知道我需要更改什么才能真正将工作流程完全更改为此人吗Workflow 重新分配;“发起人”;在户外活动工作流中,workflow,alfresco,activiti,Workflow,Alfresco,Activiti,我正在尝试将Alfresco Activiti工作流中的“发起人”重新分配给“管理员”,以防止原始发起人修改工作流。除了工作流仅出现在原始发起人的“我已启动的工作流”下拉列表中外,此操作正常。它不会出现在“管理员”“我已启动的工作流”中。有人知道我需要更改什么才能真正将工作流程完全更改为此人吗 @Override public void notify(final DelegateExecution execution) { AuthenticationUtil.runAs
@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支持部门获得这类更改的签准,否则您将面临将实现置于不受支持状态的风险
这个答案确实解决了你的问题,但也解决了你的问题。通过更改对拦截器的重写,您可以阻止发起人修改工作流任务(除非他们是管理员用户或受让人)。您可以共享一些重新分配的代码吗?这有助于我们分析所使用的方法是否正确。