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

使用Dataverse Client更新联系人后,CRM选择列表未显示对应文本

问题解决:Dataverse更新选项集后不显示对应文本

问题原因

Dataverse中的address1_stateorprovince和address1_country属于选项集(Picklist)字段,这类字段的存储逻辑是后台保存选项对应的整数值,前端显示关联的文本。你直接赋值文本缩写(如"OR"、"USA"),系统无法将其映射到对应选项的整数值,因此前端选择列表无法识别并显示对应文本。

解决步骤

1. 获取选项集对应的整数值

你需要先确定目标选项的整数ID:

  • 手动获取:登录Dataverse后台,进入高级设置 > 自定义 > 自定义系统,找到contact实体的address1_stateorprovince/address1_country字段,查看选项集里的选项值(每个选项都有对应的整数ID)。
  • 代码动态获取:
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;

// 获取address1_stateorprovince字段的选项集元数据
var attributeRequest = new RetrieveAttributeRequest
{
    EntityLogicalName = "contact",
    LogicalName = "address1_stateorprovince",
    RetrieveAsIfPublished = true
};
var attributeResponse = (RetrieveAttributeResponse)serviceClient.Execute(attributeRequest);
var picklistMetadata = (PicklistAttributeMetadata)attributeResponse.AttributeMetadata;

// 遍历选项找到俄勒冈州对应的整数值
int orStateValue = picklistMetadata.OptionSet.Options
    .First(o => o.Label.UserLocalizedLabel.Label == "俄勒冈州")
    .Value.Value;

// 同理获取美国对应的国家选项值
int usaCountryValue = picklistMetadata.OptionSet.Options
    .First(o => o.Label.UserLocalizedLabel.Label == "美国")
    .Value.Value;

2. 修改更新代码,使用整数值赋值

将原代码中的文本替换为对应的整数ID:

var contactUpdate = retrievedContact.Entities[0];

// 替换为实际获取到的整数值
contactUpdate["address1_stateorprovince"] = orStateValue; 
contactUpdate["address1_country"] = usaCountryValue;
 
serviceClient.Update(contactUpdate);

3. 更简洁的方式:使用早期绑定类

如果项目启用了Dataverse早期绑定(通过CrmSvcUtil生成实体类),可以直接用枚举值赋值,避免手动查找ID:

var contactUpdate = retrievedContact.Entities[0].ToEntity<Contact>();

contactUpdate.Address1_StateOrProvince = new OptionSetValue((int)StateProvince.Oregon);
contactUpdate.Address1_Country = new OptionSetValue((int)Country.UnitedStates);

serviceClient.Update(contactUpdate);

内容的提问来源于stack exchange,提问作者GaryProthero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:52