Dynamics crm 2011 Dynamics CRM-访问自定义产品选项值
是否有方法以编程方式访问已在MS CRM Dynamics中创建为自定义字段的标签和值字段 我添加了一个名为“new_producttypesubcode”的自定义字段,例如,它有两个选项,Trophy=1000000和Kit=10000001 我正在编写一个导入实用程序,用于在客户网站和他们的CRM之间镜像产品,我希望获得CRM中所有可能的产品选项的列表,以查看它们在网站中是否匹配 所以,本质上我想Dynamics crm 2011 Dynamics CRM-访问自定义产品选项值,dynamics-crm-2011,Dynamics Crm 2011,是否有方法以编程方式访问已在MS CRM Dynamics中创建为自定义字段的标签和值字段 我添加了一个名为“new_producttypesubcode”的自定义字段,例如,它有两个选项,Trophy=1000000和Kit=10000001 我正在编写一个导入实用程序,用于在客户网站和他们的CRM之间镜像产品,我希望获得CRM中所有可能的产品选项的列表,以查看它们在网站中是否匹配 所以,本质上我想 获取可能的新\u ProductTypeSubcode及其相应值的列表 反复浏览网站中的产品变
谢谢是的,这些数据都存储在属性()的元数据中。您必须检索实体的实体元数据,然后在列表中查找属性。然后将该属性强制转换为PicklistAttributeMetadata对象,它将包含一个选项列表。我要提到的是,通常从CRM检索元数据是一项昂贵的操作,所以请考虑缓存
私有静态选项SetMetadata RetrieveOptionSet(IOOrganizationService orgService,
字符串entityName,字符串attributeName)
{
var entityResponse=(RetrieveEntityResponse)orgService.Execute(
新检索实体请求
{LogicalName=entityName,EntityFilters=EntityFilters.Attributes});
var entityMetadata=entityResponse.entityMetadata;
for(int i=0;i
下面是如何使用上述调用将选项写入控制台
var optionSetMD=retrieveoptionstart(orgService,“account”,“accountcategorycode”);
var options=optionSetMD.options;
for(int i=0;i
我相信这也适用于全局选项集属性,但如果您知道它是一个全局选项集,则会有一条不同的消息,这可能会更有效一些()。此函数将检索一个可能的值字典,这些值是当前用户的局部值。摘自:
静态字典GetNumericValues(IOOrganizationService服务、字符串实体、字符串属性)
{
RetrieveAttributeRequest请求=新建RetrieveAttributeRequest
{
EntityLogicalName=实体,
LogicalName=属性,
RetrieveAsIfPublished=true
};
RetrieveAttributeResponse响应=(RetrieveAttributeResponse)服务。执行(请求);
开关(response.AttributeMetadata.AttributeType)
{
案例属性Specode.Picklist:
案例属性Specode.State:
案例属性Specode.状态:
return((EnumAttributeMetadata)response.AttributeMetadata.OptionSet.Options
.ToDictionary(key=>key.Label.UserLocalizedLabel.Label,option=>option.Value.Value);
case AttributeTypeCode.Boolean:
字典值=新字典();
BooleanOptionSetMetadata元数据=((BooleanAttributeMetadata)response.AttributeMetadata).OptionSet;
值[metaData.TrueOption.Label.UserLocalizedLabel.Label]=metaData.TrueOption.Value.Value;
值[metaData.FalseOption.Label.UserLocalizedLabel.Label]=metaData.FalseOption.Value.Value;
返回值;
违约:
抛出新ArgumentOutOfRangeException();
}
}
因此,您需要执行以下操作:
Dictionary values=GetNumericValues(代理,“您的实体”、“新的产品类型子代码”);
if(价值观。容器(“奖杯”))
{
//做一些有价值的事情
OptionSetValue OptionSetValue=值[“奖杯”];
int value=optionSetValue.value;
}
optionset是全局的还是本地的?对于全局optionset,必须使用RetrieveOptionSetRequest类;对于本地optionset,还可以使用RetrieveAttributeRequest类。另外,如果只检查代码中的一种语言,最好通过LocalizedLabels属性检查所有标签。RetrieveAttributeRequest更合适。我忘了。但是,我刚刚验证了具有全局选项集的属性在上面的代码中是否有效。是的,您是对的,RetrieveOptionSetRequest对于全局optionset不是必需的,很抱歉我的不准确,因为我总是将该类用于全局optionset。