创建表单并启动流程¶
创建表单并启动流程的两种实现方法。
第一种方法¶
使用 formProcess.doViewByFormName 和 docProcess.doNew 创建表单:
var doc=getCurrentDocument();
var webUser=getWebUser().getId();
var docProcess = getDocumentProcess();
var formProcess = getFormProcess();
var nForm = formProcess.doViewByFormName("到账",getApplication()); //必须的
var nDoc = docProcess.doNew(nForm,getWebUser(),createParamsTable()); //必须的
nDoc.setParent(newDocId);
nDoc.setId(记录id); //这个id可以不加入.直接使用系统默认生成<不添加这个set即可>
nDoc.setAuthor(webUser);
nDoc.setState("");
nDoc.setStateInt(256);
nDoc.setIstmp(false);
nDoc.setApplicationid(getApplication());
nDoc.setDomainid(getWebUser().getDomainid());
nDoc.setStateLabel("部门收入员认领到账");
//内容添加
nDoc.addDateItem("到账日期",doc.getItemValueAsDate("到账日期"));
nDoc.addDoubleItem("到账金额",doc.getItemValueAsDouble("到账金额"));
nDoc.addStringItem("付款单位",doc.getItemValueAsString("付款单位"));
//创建表单
docProcess.doCreate(nDoc);
var params=createParamsTable();
params.setParameter("_flowid","11e4-adc4-fb24905a-b517-695d7f9ea8d3");//流程id 去系统表 t_bL....查询
//根据记录id获取文档对象
var noDoc=findDocument(记录id);
//把对象注入当前环境.
var sessionid = $WEB.getParamsTable().getParameterAsString("sessionid");
var currDocJsUtil = new Packages.cn.myapps.core.macro.util.CurrDocJsUtil(noDoc);
var scriptRunner = Packages.cn.myapps.core.macro.runner.JavaScriptFactory.
getInstance(sessionid, getApplication());
scriptRunner.declareBean("$CURRDOC", currDocJsUtil, currDocJsUtil.getClass());
//保存并启动流程.
docProcess.doStartFlow(noDoc,params,getWebUser()); //第二个节点
//保存并启动流程
docProcess.doStartFlowOrUpdate(noDoc,params,getWebUser());//启动流程 在第一个节点
//把对象还原.
var sessionid = $WEB.getParamsTable().getParameterAsString("sessionid");
var currDocJsUtil = new Packages.cn.myapps.core.macro.util.CurrDocJsUtil(doc);
var scriptRunner = Packages.cn.myapps.core.macro.runner.JavaScriptFactory.
getInstance(sessionid, getApplication());
scriptRunner.declareBean("$CURRDOC", currDocJsUtil, currDocJsUtil.getClass());
第二种方法¶
直接创建 Document 对象:
//生成流程代办!
var webUser=getWebUser();
var docProcess = getDocumentProcess();
//随机生成id
var sequence=createObject("cn.myapps.util.sequence.Sequence");
var newDocId=sequence.getSequence();
var nDoc = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
nDoc.setFormid("11e3-3f7f-6be939a0-91cc-5120eb2e5dd3"); //必须的
nDoc.setFormname("JSPTPD OA System/项目管理/到账/到账"); //必须的
nDoc.setId("记录id"); //必须使用随机生成id,插入此id,否者出错.
nDoc.setAuthor(webUser.getId());
nDoc.setState("");
nDoc.setStateInt(256);
nDoc.setIstmp(false);
nDoc.setApplicationid(getApplication());
nDoc.setDomainid(webUser.getDomainid());
nDoc.setStateLabel("部门收入员认领到账");
//内容添加
nDoc.addDateItem("钱","1亿");
nDoc.addStringItem("name","name");
var params=createParamsTable();
params.setParameter("_flowid","11e4-adc4-fb24905a-b517-695d7f9ea8d3");//到帐认领流程id
docProcess.doStartFlow(nDoc,params,webUser);
脚本说明¶
该脚本提供了两种创建表单并启动流程的方法:
第一种方法特点¶
- 使用
formProcess.doViewByFormName()根据表单名称获取表单对象 - 使用
docProcess.doNew()创建新文档 - 需要注入文档对象到当前环境才能启动流程
- 支持
doStartFlow()和doStartFlowOrUpdate()两种启动方式
第二种方法特点¶
- 直接创建
Document对象 - 需要设置
formid和formname - 使用
Sequence生成随机ID - 直接调用
doStartFlow()启动流程
关键函数说明¶
第一种方法使用的函数¶
formProcess.doViewByFormName("表单名", getApplication()): 根据表单名称获取表单对象docProcess.doNew(form, user, params): 创建新文档docProcess.doCreate(doc): 保存文档findDocument(id): 根据ID查找文档docProcess.doStartFlow(doc, params, user): 启动流程(第二个节点)docProcess.doStartFlowOrUpdate(doc, params, user): 启动流程(第一个节点)
第二种方法使用的函数¶
createObject("cn.myapps.util.sequence.Sequence"): 创建序列对象生成IDnew Packages.cn.myapps.core.dynaform.document.ejb.Document(): 直接创建文档对象docProcess.doStartFlow(doc, params, user): 启动流程
文档属性设置¶
两种方法都需要设置以下文档属性:
setId(): 文档ID(可选,不设置则系统自动生成)setAuthor(): 作者setState(""): 状态setStateInt(256): 状态整数setIstmp(false): 是否临时文档setApplicationid(): 应用IDsetDomainid(): 域IDsetStateLabel(): 状态标签setParent(): 父文档ID(可选)
流程启动参数¶
重要注意事项¶
⚠️ 流程启动的时候要注意一点,那就是启动流程的人必须在第一个节点内.请注意
- 启动流程的用户必须在流程的第一个节点中
- 流程ID可以从系统表
t_bL...中查询 - 第一种方法需要注入和还原文档对象到当前环境
- 第二种方法必须使用随机生成的ID,不能使用固定ID
doStartFlow()用于第二个节点启动流程doStartFlowOrUpdate()用于第一个节点启动流程
使用场景¶
- 根据当前文档创建新表单并启动流程
- 批量创建表单并启动流程
- 流程自动流转
- 表单关联创建
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a3t15nagq1
文档更新时间: 2023-09-16 04:55 作者:admin