A:对于系统现有的功能,终止流程是在流程图-审批人设置中,勾选“允许审批人终止流程”,但是无法做到终止流程后,触发针对终止的操作,触发流程,当审批通过后,才允许流程被终止;
在表单中,需要添加操作按钮类型为“无”,在动作执行脚本中放如下代码,主要传当前文档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 "";
})()
|