D365 UCI动态添加多选选项集保存时触发验证错误求助
问题描述
在Dynamics 365 UCI中,尝试通过addOption()为多选选项集字段abc_multiselect动态构建选项。当联系人查找字段变更时,代码已成功填充选项,但用户选择选项后点击Ribbon保存按钮,系统触发验证错误,提示选项值不在有效范围内。
环境版本
- Server version: 9.2.22081.00182
- Client version: 1.4.4647-2208.1
代码示例
初始代码
function polulate(executionContext){ var formContext = executionContext.getFormContext(); var multiselect = formContext.getControl("abc_multiselect"); var high = {value : 895390001, text : "High"}; multiselect.addOption(high); }
Update 1代码
function polulate(executionContext){ var formContext = executionContext.getFormContext(); var multiselect = formContext.getControl("abc_multiselect"); multiselect.clearOptions(); var high = {value : 895390001, text : "High"}; multiselect.addOption(high); }
错误信息
弹窗提示:One or more of the option values for this picklist are not in the range of allowed values.
详细错误:Exception Message: A validation error occurred. The value 895390001 of 'abc_multiselect' on record of type 'abc_ENTITY' is outside the valid range. Accepted Values:
ErrorCode: -2147204326
HexErrorCode: 0x8004431a
已尝试方案
- 将选项集值硬编码到字段定义中,保存无异常;
- 修改代码添加
clearOptions(); - 更换选项值为895390000、100、101;
- 参考多个相关方案,均未解决问题。
解决方案
Dynamics 365的选项集合法性校验由后端完成,前端通过addOption()添加的未定义选项值仅在客户端临时显示,无法通过后端验证。解决步骤如下:
预先在字段定义中添加选项值
登录Power Apps Maker门户,找到abc_multiselect字段(本地选项集或全局选项集),将需要动态添加的选项值(如895390001)预先添加到选项列表中。如果不需要默认显示这些选项,可后续通过代码或业务规则隐藏。前端动态控制选项显示
表单加载时可通过clearOptions()移除默认显示的选项,在联系人查找字段变更时,再用addOption()添加已预先定义好的选项值,确保value与字段定义中的值完全一致。禁止使用未定义的选项值
所有通过addOption()添加的选项值必须是字段定义中已存在的合法值,否则后端验证必然失败。
内容的提问来源于stack exchange,提问作者Muhammad

