跳转至

表单按钮生成子表数据

表单按钮生成子表数据示例代码:

(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() 保存或更新文档。

脚本功能

  1. 创建参数表: 使用 createParamsTable() 创建参数表
  2. 设置字段值: 通过 params.setParameter() 设置子表字段值
  3. 构建文档: 使用 DOC.buileDocument() 根据表单名称和参数构建文档对象
  4. 设置父文档: 使用 doc.setParent(getId()) 设置父文档ID,建立主子表关系
  5. 保存文档: 使用 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("字段名", "数字字符串")
  • 日期字段: params.setParameter("字段名", "2024-01-01") 或日期对象
  • 用户字段: params.setParameter("字段名", "用户ID")

注意事项

  • ⚠️ 表单名称必须正确: formName 必须与实际表单名称完全匹配
  • ⚠️ 字段名称必须匹配: setParameter 中的字段名必须与子表表单中的字段名称完全一致
  • ⚠️ 必须设置父文档: 使用 setParent() 设置父文档ID,否则无法建立主子表关系
  • DOC.buileDocument() 中的 buileDocument 是拼写(应为 buildDocument),但代码中需要使用 buileDocument
  • DOC.createOrUpdate() 会自动判断文档是否存在,存在则更新,不存在则创建
  • 批量生成时注意性能,避免一次生成过多数据
  • 字段值类型需要与字段定义的类型匹配
  • 确保有创建子表文档的权限

主子表关系

  • 子表文档通过 setParent() 方法设置父文档ID
  • 父文档ID通常是当前主表文档的ID,使用 getId() 获取
  • 建立主子表关系后,可以在视图中通过 parent 字段关联查询

常见应用

  1. 按钮生成子表: 点击按钮时生成子表记录
  2. 自动生成子表: 根据主表数据自动生成对应的子表数据
  3. 数据导入: 将外部数据导入为子表数据
  4. 数据复制: 从其他表单复制数据生成子表
  5. 批量生成: 批量生成多条子表记录

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f20q66al7o6j
文档更新时间: 2023-09-25 09:28 作者:john