You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DocuSign API实现勾选复选框B自动控制组A全选/取消

当然可以实现!两种方案适配你的需求

针对你用DocuSign Java SDK创建的组A必填复选框,想要添加复选框B实现一键全选/取消的场景,DocuSign eSignature REST API(以及对应的Java SDK)提供了两种可行方案,分别适合不同的交互需求:

方案一:纯API配置(Formula Tabs)—— 限制手动修改组A选项

这种方式利用DocuSign内置的公式功能,让组A的复选框自动跟随复选框B的状态,适合需要禁止用户单独修改组A选项的场景。

具体实现(Java SDK代码示例):

  1. 先创建主控复选框B:
    定义一个普通复选框,给它设置唯一的tabLabel(比如MasterCheckbox_B),其他属性按你的布局需求配置即可。

  2. 配置组A的每个复选框:
    对组A里的每个复选框,做这几个关键配置:

    • 把formula设为复选框B的tabLabel(MasterCheckbox_B),这样它的状态会自动同步B的勾选状态
    • 设置locked为true,禁止用户手动修改这个复选框,只能通过B来控制
    • 保留你原来的required和validator配置,确保必填验证正常生效

    代码片段参考:

    // 创建主控复选框B
    Checkbox masterCheckbox = new Checkbox()
        .setTabLabel("MasterCheckbox_B")
        .setXPosition("100")
        .setYPosition("100")
        .setDocumentId("1")
        .setPageNumber("1");
    
    // 组A复选框示例(重复此逻辑创建所有组A复选框)
    Checkbox groupACheckbox1 = new Checkbox()
        .setTabLabel("GroupA_Checkbox1")
        .setXPosition("200")
        .setYPosition("100")
        .setDocumentId("1")
        .setPageNumber("1")
        .setRequired("true")
        // 关联主控复选框,同步状态
        .setFormula("MasterCheckbox_B")
        // 锁定,禁止手动修改
        .setLocked("true")
        // 保留你的必填验证配置
        .setValidationMessage("此复选框为必填项")
        .setValidator(new Validator()
            .setValidatorType("CheckboxValidator")
            .setComparison("equals")
            .setValue("true"));
    

    ✅ 优势:无需前端代码,纯API配置即可完成;
    ❌ 限制:组A的复选框无法手动单独修改,只能通过B控制。

方案二:自定义JavaScript——支持灵活交互

如果需要允许用户手动修改组A的复选框,同时保留B的一键全选/取消功能,推荐用这种方式:在收件人签名页面注入自定义JS,监听B的点击事件来同步组A的状态。

具体实现(Java SDK代码示例):

  1. 正常创建所有复选框:
    按照你原来的逻辑创建组A的必填复选框(保留required和validator),以及复选框B,不需要设置formula或locked。

  2. 生成收件人视图时注入自定义JS:
    调用createRecipientView接口时,通过自定义字段注入JS代码,实现状态同步逻辑:

    // 编写同步逻辑的JS代码
    String syncCheckboxJs = "document.addEventListener('DOMContentLoaded', function() {" +
        "  // 定位主控复选框B" +
        "  const masterCb = document.querySelector('[data-tab-label=\"MasterCheckbox_B\"]');" +
        "  // 定位组A所有复选框(用tabLabel前缀匹配)" +
        "  const groupACbs = document.querySelectorAll('[data-tab-label^=\"GroupA_\"]');" +
        "  " +
        "  // 同步组A状态到B的函数(可选,让B的状态跟随组A全选/取消)" +
        "  function syncMasterState() {" +
        "    masterCb.checked = Array.from(groupACbs).every(cb => cb.checked);" +
        "  }" +
        "  " +
        "  // 同步B的状态到组A的函数" +
        "  function syncGroupAState() {" +
        "    groupACbs.forEach(cb => {" +
        "      cb.checked = masterCb.checked;" +
        "      // 触发change事件,确保DocuSign的必填验证实时生效" +
        "      cb.dispatchEvent(new Event('change'));" +
        "    });" +
        "  }" +
        "  " +
        "  // 监听B的点击事件" +
        "  masterCb.addEventListener('change', syncGroupAState);" +
        "  " +
        "  // 监听组A复选框的点击,同步B的状态(可选功能,可删除)" +
        "  groupACbs.forEach(cb => cb.addEventListener('change', syncMasterState));" +
        "});";
    
    // 构建收件人视图请求
    RecipientViewRequest viewReq = new RecipientViewRequest()
        .setClientUserId("your_client_user_id")
        .setReturnUrl("https://your-app.com/return")
        .setAuthenticationMethod("email")
        // 注入自定义JS
        .setCustomFields(new CustomFields()
            .setTextCustomFields(List.of(
                new TextCustomField()
                    .setName("ds_custom_js")
                    .setValue(syncCheckboxJs)
                    .setRequired("false")
                    .show(false)
            )));
    
    // 调用API生成收件人视图
    ViewUrl viewUrl = envelopesApi.createRecipientView(accountId, envelopeId, viewReq);
    

    ✅ 优势:完全灵活,用户既可以手动修改组A的单个复选框,也可以通过B一键控制;
    ❌ 注意:需要确保JS选择器能正确定位到复选框,所以tabLabel的命名要规范(比如组A的复选框统一用GroupA_前缀)。

额外提示

  • 如果你选择方案一,要注意:当复选框B未勾选时,组A的所有复选框都会处于未勾选状态,这会触发你设置的必填验证,符合你原来的“组A必填”需求;
  • 方案二中的ds_custom_js是DocuSign支持的特殊自定义字段,用于注入前端JS代码,无需额外配置即可生效。

内容的提问来源于stack exchange,提问作者Aaron.SHAO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:07:27