表单按钮生成子表数据¶
表单按钮生成子表数据示例代码:
(function(){
var formName = "测试导入百分号";
var params = createParamsTable();
params.setParameter("单行文本框1", "hello world!");
var doc = DOC.buileDocument(formName, params);
doc.setParent(getId());
DOC.createOrUpdate(doc);
})()
脚本说明¶
该脚本用于在表单按钮中生成子表数据。通过 DOC.buileDocument() 创建子表文档,并设置父文档关系,然后使用 DOC.createOrUpdate() 保存或更新文档。
脚本功能¶
- 创建参数表: 使用
createParamsTable()创建参数表 - 设置字段值: 通过
params.setParameter()设置子表字段值 - 构建文档: 使用
DOC.buileDocument()根据表单名称和参数构建文档对象 - 设置父文档: 使用
doc.setParent(getId())设置父文档ID,建立主子表关系 - 保存文档: 使用
DOC.createOrUpdate(doc)创建或更新文档
使用场景¶
- 表单按钮点击时生成子表数据
- 根据主表数据自动生成子表记录
- 批量生成子表数据
- 子表数据初始化
扩展示例¶
示例1:生成单条子表数据¶
(function(){
var doc = getCurrentDocument();
var formName = "子表表单名";
var params = createParamsTable();
// 设置子表字段值
params.setParameter("字段1", doc.getItemValueAsString("主表字段1"));
params.setParameter("字段2", doc.getItemValueAsString("主表字段2"));
params.setParameter("字段3", "固定值");
// 构建子表文档
var subDoc = DOC.buileDocument(formName, params);
subDoc.setParent(doc.getId()); // 设置父文档ID
// 保存子表文档
DOC.createOrUpdate(subDoc);
})();
示例2:批量生成多条子表数据¶
(function(){
var doc = getCurrentDocument();
var formName = "子表表单名";
var dataArray = ["数据1", "数据2", "数据3"];
for(var i = 0; i < dataArray.length; i++){
var params = createParamsTable();
params.setParameter("字段名", dataArray[i]);
params.setParameter("序号", i + 1);
var subDoc = DOC.buileDocument(formName, params);
subDoc.setParent(doc.getId());
DOC.createOrUpdate(subDoc);
}
})();
示例3:根据条件生成子表数据¶
(function(){
var doc = getCurrentDocument();
var condition = doc.getItemValueAsString("条件字段");
if(condition != null && condition === "生成"){
var formName = "子表表单名";
var params = createParamsTable();
params.setParameter("字段1", doc.getItemValueAsString("主表字段1"));
params.setParameter("字段2", format(new Date(), "yyyy-MM-dd"));
var subDoc = DOC.buileDocument(formName, params);
subDoc.setParent(doc.getId());
DOC.createOrUpdate(subDoc);
}
})();
示例4:从其他表单查询生成子表数据¶
(function(){
var doc = getCurrentDocument();
var mainId = doc.getId();
var formName = "子表表单名";
// 查询其他表单数据
var sql = "select domainid,item_字段1,item_字段2 from tlk_源表单 where parent='"+mainId+"'";
var datas = queryBySQL(sql);
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext(); ){
var data = it.next();
var params = createParamsTable();
params.setParameter("字段1", data.getItemValueAsString("字段1"));
params.setParameter("字段2", data.getItemValueAsString("字段2"));
var subDoc = DOC.buileDocument(formName, params);
subDoc.setParent(mainId);
DOC.createOrUpdate(subDoc);
}
}
})();
示例5:生成子表并设置更多属性¶
(function(){
var doc = getCurrentDocument();
var formName = "子表表单名";
var params = createParamsTable();
params.setParameter("字段1", "值1");
params.setParameter("字段2", "值2");
var subDoc = DOC.buileDocument(formName, params);
subDoc.setParent(doc.getId());
subDoc.setAuthor(getWebUser().getId()); // 设置作者
subDoc.setApplicationid(getApplication()); // 设置应用ID
subDoc.setDomainid(getWebUser().getDomainid()); // 设置域ID
DOC.createOrUpdate(subDoc);
})();
关键函数说明¶
createParamsTable(): 创建参数表对象params.setParameter("字段名", "值"): 设置字段参数值DOC.buileDocument(formName, params): 根据表单名称和参数构建文档对象- 参数1: 表单名称(字符串)
- 参数2: 参数表对象
doc.setParent(parentId): 设置父文档ID,建立主子表关系DOC.createOrUpdate(doc): 创建或更新文档(如果文档已存在则更新,不存在则创建)getId(): 获取当前文档ID(主表文档ID)
参数设置说明¶
设置字段值¶
- 字段名: 子表表单中的字段名称,必须与实际字段名称完全匹配
- 字段值: 要设置的字段值,可以是字符串、数字等
字段类型对应¶
- 字符串字段:
params.setParameter("字段名", "字符串值") - 数字字段:
params.setParameter("字段名", 数字值)或params.setParameter("字段名", "数字字符串") - 日期字段:
params.setParameter("字段名", "2024-01-01")或日期对象 - 用户字段:
params.setParameter("字段名", "用户ID")
注意事项¶
- ⚠️ 表单名称必须正确:
formName必须与实际表单名称完全匹配 - ⚠️ 字段名称必须匹配:
setParameter中的字段名必须与子表表单中的字段名称完全一致 - ⚠️ 必须设置父文档: 使用
setParent()设置父文档ID,否则无法建立主子表关系 DOC.buileDocument()中的buileDocument是拼写(应为buildDocument),但代码中需要使用buileDocumentDOC.createOrUpdate()会自动判断文档是否存在,存在则更新,不存在则创建- 批量生成时注意性能,避免一次生成过多数据
- 字段值类型需要与字段定义的类型匹配
- 确保有创建子表文档的权限
主子表关系¶
- 子表文档通过
setParent()方法设置父文档ID - 父文档ID通常是当前主表文档的ID,使用
getId()获取 - 建立主子表关系后,可以在视图中通过
parent字段关联查询
常见应用¶
- 按钮生成子表: 点击按钮时生成子表记录
- 自动生成子表: 根据主表数据自动生成对应的子表数据
- 数据导入: 将外部数据导入为子表数据
- 数据复制: 从其他表单复制数据生成子表
- 批量生成: 批量生成多条子表记录
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f20q66al7o6j
文档更新时间: 2023-09-25 09:28 作者:john