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

[已解决] 能不能手动改变流程的状态?

[复制链接]
youerwei 发表于 2015-5-22 09:26:29 | 显示全部楼层 |阅读模式
本帖最后由 karrman 于 2015-11-3 15:02 编辑

请问:如何手动改变流程的各种状态, 比如说,我现在有一条正在启动着的流程,在这个流程的过程中, 我开启另外一条流程去走审批流, 这条流程的意思是申请 中止我的主流程?  如果这个申请中止到最后审批通过了, 我就会在这条流程结束的同时, 去关闭 我的主业务流程?
请问,可以实现吗?
另外,如果当我在走这条中止申请流程的时候,我能否将主业务流程 暂时中止, 当我的申请流程走完之后, 根据结果判定是重新恢复或者 直接关闭?
q:2503515610
karrman 发表于 2015-6-9 18:51:44 | 显示全部楼层
1、在表单中,需要添加操作按钮类型为“无”,在动作执行脚本中放如下代码,主要传当前文档id,当前节点id这两个字段;同时隐藏脚本中,需要跟进当前id是否在走流程的记录中(非完成状态),如果为是,则隐藏,否则可以被多次触发;
         (function(){
                  var domain = getDomainid();
        var application = getApplication();
                 var doc1=getCurrentDocument();
                var relation_id=doc1.getId();
                var appno=doc1.getItemValueAsString("申请单号");
                var params1 = getParamsTable();
                var currid=params1.getParameterAsString("_currid")
                var formProcess = new Packages.cn.myapps.core.dynaform.form.ejb.FormProcessBean();//申明表单业务处理类

        var form = formProcess.doViewByFormName("被终止流程",getApplication());  //根据表单名查询出表单(被终止流程为对应的插入记录的表单名)

        var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");

        var user = userProcess.getUserByLoginno("wgs",getDomainid());//根据用户名查询表单的创建者(wgs为对应的作者登录名)

        var webuser = new Packages.cn.myapps.core.user.action.WebUser(user);

        var process = getDocumentProcess();//申明文档业务处理类

        var doc = process.doNew(form,webuser,new Packages.cn.myapps.base.action.ParamsTable());//创建记录
        var uuid = new Packages.cn.myapps.util.sequence.Sequence();
                 doc.setId(uuid.getSequence());
        doc.setFlowid("11e5-0e7f-ac94b3f6-90d6-ff870a13c83e");//flowid为对应的流程Id.
                doc.setAuthor(getWebUser());
        doc.setIstmp(false);
        doc.setApplicationid(application);
        doc.setLastmodifier(getWebUser().getId());
        doc.setDomainid(domain);
                doc.addStringItem("申请单号",appno);
                doc.addStringItem("relation_id",relation_id);//relation_id为被终止的文档记录id
                doc.setStateLabel("未提交");
                doc.addStringItem("currid",currid);//currid为当前流程节点id

        var params =new Packages.cn.myapps.base.action.ParamsTable();
               

        params.setParameter("_flowid", "11e5-0e7f-ac94b3f6-90d6-ff870a13c83e")//为对应的流程Id.
        process.doCreate(doc);
                println("sddddddddd");
        process.doStartFlowOrUpdate(doc,params,webuser);//启动流程
                return "";
                })()
        2、申请终止流程,会新增记录到具体表单,并触发该表单走流程,改字段至少包含被终止的文档记录id和流程节点;在终止流程到审批完成的最后线上,放执行脚本:



                               
                                  (function(){
                                        var relation_id =getCurrentDocument().getItemValueAsString("relation_id");
                                        var doc=findDocument(relation_id);
                                        if(doc != null){
                                        //当前流程实例ID
                                        var instance = doc.getState();
                                        var flowStateId=doc.getStateid();//当前流程实例ID
                                        var currid=getCurrentDocument().getItemValueAsString("currid");
                                       
                                        var fd = instance.getFlowVO().toFlowDiagram();
                                       
                                        var update = false;
                                        var currNode = fd.getElementByID(currid);
                                       
                                        var endNode = new Packages.cn.myapps.core.workflow.element.EndNode(fd);
                                       
                                       
                                        var label = "终止";
                                        endNode.name = label;
                                        //
                                        endNode.id= "terminate_id";
                                        println("endNode0000000000="+endNode);
                                        var nodeRTProcess =  new Packages.cn.myapps.core.workflow.storage.runtime.ejb.NodeRTProcess(getApplication());
                                        //var nodeRTProcess = createProcess("cn.myapps.core.workflow.storage.runtime.ejb.NodeRTProcessBean");
                                        println("instance1111111111111111111111111="+instance.isComplete());
                                        println("instance2222222222222222222222222="+instance.isTerminated());
                                        if(!instance.isComplete() && !instance.isTerminated()){
                                                if(instance.getNoderts()!=null && instance.getNoderts().size()>0){
                                                        for (var iterator = instance.getNoderts().iterator(); iterator.hasNext();) {
                                                                var nodert = iterator.next();
                                                                nodeRTProcess.doRemove(nodert.getId());
                                                                //nodeRTProcess.doRemoveByFlowStateRT(flowStateId);
                                                                println("nodert1111111111111111111111="+nodert);
                                                        }
                                                        instance.getNoderts().clear();
                                                        update = true;
                                                }
                                        }
                                       
                                        if(update){
                                                var actionTime = new Packages.java.util.Date();
                                                var attitude = "";
                                                //更新流程实例
                                                var user=getWebUser();
                                                instance.setAuditdate(actionTime);
                                                instance.setAuditorList("");
                                                instance.setAuditorNames("");
                                                instance.setAudituser(user.getId());
                                                instance.setTerminated(true);
                                                instance.setLastFlowOperation("8");
                                                instance.setLastModified(actionTime);
                                                instance.setLastModifierId(user.getId());
                                                instance.setNoderts(new Packages.java.util.ArrayList());
                                                instance.setStateLabel(label);
                                                var st=new Packages.cn.myapps.core.workflow.engine.StateMachine();
                                                st.getFlowStateRTProcess(doc.getApplicationid()).doUpdate(instance);
                                                //更新流程历史
                                                st.updatePreviousRelationHIS(instance, currNode, user, actionTime);
                                                st.createOrUpdateRelationHIS(instance, currNode, endNode, user, actionTime, attitude,"", "8");
                                                //更新文档
                                       
                                                var proxy = getDocumentProcess();
       
                                                doc.setAuditdate(actionTime);
                                                doc.setAuditorList("");
                                                doc.setAuditorNames("");
                                                doc.setAudituser(user.getId());
                                                doc.setLastFlowOperation("8");
                                                doc.setLastmodified(actionTime);
                                                doc.setLastmodifier(user.getId());
                                                doc.setStateLabel(label);
                                                proxy.doCreateOrUpdate(doc, user);
                                                //更新图片
                                                st.updateImage(instance);
                                                println("st2222222222222222222222222222="+st);
                                        }
                                }
                                return "";
                                })()
回复

使用道具 举报

 楼主| youerwei 发表于 2015-6-11 20:27:50 | 显示全部楼层
感谢客服人员的辛苦汗水, 不过因为工作比较忙,这个功能还没有时间去实现和测试。或者先结贴, 等 我有时间再测试和咨询。谢谢!
回复

使用道具 举报

karrman 发表于 2015-7-3 17:48:43 | 显示全部楼层
感谢楼主反馈,可以结贴!
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-8-14 10:06

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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