DocuSign多单选组条件限制问询:仅允许选中一个Yes
解决方案:DocuSign多Radio Group仅允许一个Yes的实现
针对你遇到的多Radio Group每组含Yes/No、仅允许选中一个Yes的需求,提供两种可行方案,均无需替换控件类型:
方案一:实时锁定(基于触发规则)
通过给每个Yes单选按钮添加触发规则,实现选中一个Yes后自动锁定其他组的Yes选项,取消选中时自动解锁。
实现步骤
- 为每个Radio Group的Yes按钮分配唯一
TabId(批量生成时动态命名,如ActionX_Yes) - 为每个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
相关产品推荐
相关产品推荐

