跳转至

创建表单并启动流程

创建表单并启动流程的两种实现方法。

第一种方法

使用 formProcess.doViewByFormNamedocProcess.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 对象
  • 需要设置 formidformname
  • 使用 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"): 创建序列对象生成ID
  • new Packages.cn.myapps.core.dynaform.document.ejb.Document(): 直接创建文档对象
  • docProcess.doStartFlow(doc, params, user): 启动流程

文档属性设置

两种方法都需要设置以下文档属性:

  • setId(): 文档ID(可选,不设置则系统自动生成)
  • setAuthor(): 作者
  • setState(""): 状态
  • setStateInt(256): 状态整数
  • setIstmp(false): 是否临时文档
  • setApplicationid(): 应用ID
  • setDomainid(): 域ID
  • setStateLabel(): 状态标签
  • setParent(): 父文档ID(可选)

流程启动参数

var params=createParamsTable();
params.setParameter("_flowid","流程ID");  //流程ID,可从系统表 t_bL... 查询

重要注意事项

⚠️ 流程启动的时候要注意一点,那就是启动流程的人必须在第一个节点内.请注意

  • 启动流程的用户必须在流程的第一个节点中
  • 流程ID可以从系统表 t_bL... 中查询
  • 第一种方法需要注入和还原文档对象到当前环境
  • 第二种方法必须使用随机生成的ID,不能使用固定ID
  • doStartFlow() 用于第二个节点启动流程
  • doStartFlowOrUpdate() 用于第一个节点启动流程

使用场景

  • 根据当前文档创建新表单并启动流程
  • 批量创建表单并启动流程
  • 流程自动流转
  • 表单关联创建

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a3t15nagq1
文档更新时间: 2023-09-16 04:55 作者:admin