找回密码
 注册成为天翎用户
查看: 1579|回复: 5

[其他] 如何实现用代码设置审批人???

[复制链接]
youerwei 发表于 2015-6-11 16:17:16 | 显示全部楼层 |阅读模式
本帖最后由 shary 于 2015-9-24 15:54 编辑

请问如何用代码实现设置审批人???
比如说, 我流程中的某个节点, 当表单流转到这个节点后, 因某些需求, 我需要增加一些用户有权操作这个表单。
因为需求的关系, 我不想采用 在前台手动编辑审批人的功能, 我是中间过程有一些操作, 然后生成了一些用户, 这些用户需要对这个表单作操作, 这时候,我就需要授权了。 我想通过代码自动授权。


QQ:2503515610
dandy 发表于 2015-6-11 18:14:29 | 显示全部楼层
var process = getDocumentProcess();//申明文档业务处理类
var StateMachine = new Packages.cn.myapps.core.workflow.engine.StateMachine();
var pdoc=getParentDocument();
var userd=pdoc.getAuthor();
   var doc = getCurrentDocument():            //获得选中记录的文档对象
  // var state = doc.getStateLabel();
  var userid = "\""+doc().getItemValueAsString("xxxx")+"\"";//设置审批人ID    多人时格式:"A用户ID","B用户ID"
    var authorid=doc.getItemValueAsString("xxxx");//任务接受者
        if(authorid!=null){
       var author=getUserByid(authorid);
           var name=author.getName();
       //获取当前文档所在的流程节点ID
       //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
       var nodert = StateMachine.getCurrUserNodeRT(pdoc, userd);
       var nodeid = nodert.getNodeid();

        //设置文档审批人参数
        pdoc.setAuditorList("{\""+nodeid+"\":["+userid+"]}");   //json格式     
        pdoc.setAuditorNames(name);   
        pdoc.setLastmodifier(authorid);            


       //设置流程节点IDauthorid
        var params = createParamsTable();
        params.setParameter("_currid",nodeid);

        process.doChangeAuditor(pdoc,params,author);


}





把代码放在任务分配提交的按钮上
回复

使用道具 举报

 楼主| youerwei 发表于 2015-6-11 20:25:32 | 显示全部楼层
StateMachine.getCurrUserNodeRT(pdoc, userd);
这个方法报错了, 错误信息:
org.mozilla.javascript.EvaluatorException: Can't find method cn.myapps.core.workflow.engine.StateMachine.getCurrUserNodeRT(cn.myapps.core.dynaform.document.ejb.Document,cn.myapps.core.user.ejb.UserVO,null). (11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript#19)
at org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:109)
at org.mozilla.javascript.Context.reportRuntimeError(Context.java:1030)
at org.mozilla.javascript.Context.reportRuntimeError(Context.java:1086)
at org.mozilla.javascript.Context.reportRuntimeError1(Context.java:1049)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:162)
at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86)
at org.mozilla.javascript.gen.c5429._c0(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript:19)
at org.mozilla.javascript.gen.c5429.call(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
at org.mozilla.javascript.gen.c5429.call(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at org.mozilla.javascript.gen.c5429.exec(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at cn.myapps.core.macro.runner.JavaScriptRunner.run(JavaScriptRunner.java:135)
at cn.myapps.core.dynaform.activity.ejb.Activity.runAfterActionScript(Activity.java:1337)
at org.apache.jsp.portal.share.dynaform.activity.after_jsp._jspService(after_jsp.java:541)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
回复

使用道具 举报

dandy 发表于 2015-6-12 16:27:16 | 显示全部楼层
var process = getDocumentProcess();//申明文档业务处理类
var StateMachine = new Packages.cn.myapps.core.workflow.engine.StateMachine();
var pdoc=getParentDocument();
var userd=pdoc.getAuthor();
var webUser = new Packages.cn.myapps.core.user.action.WebUser(userd);
   var doc = getCurrentDocument():            //获得选中记录的文档对象
  // var state = doc.getStateLabel();
  var userid = "\""+doc().getItemValueAsString("xxxx")+"\"";//设置审批人ID    多人时格式:"A用户ID","B用户ID"
    var authorid=doc.getItemValueAsString("xxxx");//任务接受者
        if(authorid!=null){
       var author=getUserByid(authorid);
           var name=author.getName();
       //获取当前文档所在的流程节点ID
       //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
       var nodert = StateMachine.getCurrUserNodeRT(pdoc, webUser);
       var nodeid = nodert.getNodeid();

        //设置文档审批人参数
        pdoc.setAuditorList("{\""+nodeid+"\":["+userid+"]}");   //json格式     
        pdoc.setAuditorNames(name);   
        pdoc.setLastmodifier(authorid);            


       //设置流程节点IDauthorid
        var params = createParamsTable();
        params.setParameter("_currid",nodeid);

        process.doChangeAuditor(pdoc,params,author);


}



改了一下userd的类型应该就可以了。
回复

使用道具 举报

 楼主| youerwei 发表于 2015-6-13 12:02:29 | 显示全部楼层
请问,你们这上面的代码有没有经过测试证实的。 我在这边运行有很多的错, 比如说, 方法所传递的类型都已经是不正确的啦。

process.doChangeAuditor(pdoc,params,author);
这个方法的最后一个参数类型应该是 webUser的类型。这里author的类型是UserVO, 根本就运行不起来。
当然我做了一些调整,但是运行到后面也报错了。

// 添加任务处理人权限
var pdoc = getParentDocument();
var pdocProcessorId = "";                //父文档的当前处理人
if(pdoc != null){
        if(doc.getState() != null){
                var actors = doc.getState().getActors();      
                if (actors != null) {
                        for(var it = actors.iterator(); it.hasNext(); ) {
                                var actorrt = it.next();
                                if (actorrt.getIsprocessed()) {
                                        continue;
                                }
                                pdocProcessorId += actorrt.getActorid() + ",";//获取审批人ID                           
                        }
                        pdocProcessorId = pdocProcessorId.substring(0,pdocProcessorId.length-1);//去除最后一个多余的逗号
           }
        }

        var process = getDocumentProcess();//申明文档业务处理类
        var StateMachine = new Packages.cn.myapps.core.workflow.engine.StateMachine();
       
        //var userd = pdoc.getAuthor();
        var webUser = getWebUser();
        var doc = getCurrentDocument();           //获得选中记录的文档对象
       
        println("1====>" + pdocProcessorId);
        var receiverId = doc.getItemValueAsString("Receiver");//任务接受者

        if(receiverId != null){
                pdocProcessorId += pdocProcessorId + "," + receiverId;                //增加子表单的审批人。
                var receiverVO = getUserById(receiverId);
                println("2====>" + receiverId + "==" + name);
                var name = receiverVO.getName();
                //获取当前文档所在的流程节点ID
                //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
                var nodert = StateMachine.getCurrUserNodeRT(pdoc, webUser, null);
                var nodeid = nodert.getNodeid();
               
                //设置文档审批人参数
                pdoc.setAuditorList("{\"" + nodeid + "\":["+ pdocProcessorId +"]}");   //json格式     
                pdoc.setAuditorNames(name);   
                pdoc.setLastmodifier(receiverId);            


                //设置流程节点IDauthorid
                var params = createParamsTable();
                params.setParameter("_currid", nodeid);
                process.doChangeAuditor(pdoc, params, webUser);
        }
}
回复

使用道具 举报

 楼主| youerwei 发表于 2015-6-13 12:04:31 | 显示全部楼层
下面是错识信息:::

org.mozilla.javascript.WrappedException: Wrapped java.lang.NullPointerException (11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript#48)
at org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1757)
at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:170)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:243)
at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86)
at org.mozilla.javascript.gen.c2143._c0(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript:48)
at org.mozilla.javascript.gen.c2143.call(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
at org.mozilla.javascript.gen.c2143.call(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at org.mozilla.javascript.gen.c2143.exec(FormName:高澜数字化信息办公平台/任务管理/fm_taskinfo Activity(11e5-0683-c32ac33c-aa35-197c0b8f2ca5).提交.afterActionScript)
at cn.myapps.core.macro.runner.JavaScriptRunner.run(JavaScriptRunner.java:135)
at cn.myapps.core.dynaform.activity.ejb.Activity.runAfterActionScript(Activity.java:1337)
at org.apache.jsp.portal.share.dynaform.activity.after_jsp._jspService(after_jsp.java:541)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
at cn.myapps.base.web.ServletResult.OBPMServletDispatcherResult.doExecute(OBPMServletDispatcherResult.java:34)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-14 04:13

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表