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

DocuSign多单选组条件限制问询:仅允许选中一个Yes

解决方案:DocuSign多Radio Group仅允许一个Yes的实现

针对你遇到的多Radio Group每组含Yes/No、仅允许选中一个Yes的需求,提供两种可行方案,均无需替换控件类型:

方案一:实时锁定(基于触发规则)

通过给每个Yes单选按钮添加触发规则,实现选中一个Yes后自动锁定其他组的Yes选项,取消选中时自动解锁。

实现步骤

  1. 为每个Radio Group的Yes按钮分配唯一TabId(批量生成时动态命名,如ActionX_Yes)
  2. 为每个Yes按钮添加两类触发规则:
    • 选中当前Yes时,锁定所有其他组的Yes按钮
    • 取消选中当前Yes(即选中No)时,解锁所有其他组的Yes按钮

代码示例(C#)

// 批量生成多个操作项的Radio Group
var actionNames = new List<string> { "Action1", "Action2", "Action3" };
var radioGroups = new List<RadioGroup>();

foreach (var actionName in actionNames)
{
    var yesTabId = $"{actionName}_Yes";
    var radioGroup = new RadioGroup
    {
        GroupName = $"Accepted_{actionName}", // 每个组用唯一GroupName避免冲突
        DocumentId = "1",
        Radios = new List<Radio>(),
        Tabs = new Tabs() // 承载触发规则的容器
    };

    // 添加Yes单选按钮(带唯一TabId)
    var yesRadio = new Radio 
    { 
        AnchorString = actionName, 
        PageNumber = "2", 
        Value = "Yes", 
        AnchorXOffset = "282", 
        AnchorYOffset = "-02",
        TabId = yesTabId,
        Locked = false
    };
    radioGroup.Radios.Add(yesRadio);

    // 添加No单选按钮
    radioGroup.Radios.Add(new Radio 
    { 
        AnchorString = actionName, 
        PageNumber = "2", 
        Value = "No", 
        AnchorXOffset = "323", 
        AnchorYOffset = "-02" 
    });

    // 为当前Yes按钮添加触发规则
    foreach (var otherAction in actionNames.Where(a => a != actionName))
    {
        var otherYesTabId = $"{otherAction}_Yes";
        
        // 规则1:选中当前Yes时,锁定其他组的Yes按钮
        radioGroup.Tabs.RadioGroupTabs.Add(new RadioGroup
        {
            Trigger = new Trigger
            {
                TriggerOn = "TabStatusChanged",
                TriggerType = "Lock",
                TabId = yesTabId,
                TargetTabId = otherYesTabId,
                Condition = "Equals",
                Value = "Yes"
            }
        });

        // 规则2:取消选中当前Yes时,解锁其他组的Yes按钮
        radioGroup.Tabs.RadioGroupTabs.Add(new RadioGroup
        {
            Trigger = new Trigger
            {
                TriggerOn = "TabStatusChanged",
                TriggerType = "Unlock",
                TabId = yesTabId,
                TargetTabId = otherYesTabId,
                Condition = "NotEquals",
                Value = "Yes"
            }
        });
    }

    radioGroups.Add(radioGroup);
}

方案二:提交时校验(基于信封级验证)

通过DocuSign的信封级自定义校验规则,在用户提交信封时检查Yes选项的选中数量,若超过1个则触发错误提示。

实现步骤

在创建信封时,添加自定义校验规则,统计所有选中的Yes选项数量,限制数量≤1。

代码示例(C#)

var envelopeDefinition = new EnvelopeDefinition
{
    // 信封基础配置(收件人、文档等)
    Status = "sent",
    Recipients = new Recipients { /* 配置收件人 */ },
    Documents = new List<Document> { /* 配置文档 */ },
    
    // 添加信封级校验规则
    EnvelopeValidation = new EnvelopeValidation
    {
        Rules = new List<EnvelopeValidationRule>
        {
            new EnvelopeValidationRule
            {
                RuleId = "SingleYesLimit",
                ErrorDetails = new ErrorDetails
                {
                    ErrorMessage = "仅允许选择一个操作项的Yes选项,请修改后重新提交"
                },
                ValidationType = "Custom",
                Expression = @"count(tabs.radiogroups[?(@.value == 'Yes')]) <= 1"
            }
        }
    }
};

// 通过API发送信封
var envelopesApi = new EnvelopesApi();
var envelopeId = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);

方案对比

  • 方案一:实时交互,用户操作时即时反馈,体验更流畅,但操作项较多时触发规则数量会线性增长,适合操作项少的场景。
  • 方案二:实现逻辑简单,无需大量触发规则,适合操作项较多的场景,但错误提示在提交时才出现,用户需要回溯修改。

内容的提问来源于stack exchange,提问作者T.kowshik Yedida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:35:41