C# 获取拾取列表中选项的值

C# 获取拾取列表中选项的值,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我正在创建实体的虚假实例beep。它有一个类型为picklist的必填字段,名为pickaboo。首先我省略了它,但随后应用程序开始抱怨向我抛出错误消息,因为某些业务逻辑要求所有新创建的beep实例都分配该字段 Entity entity = new Entity { LogicalName = "beep" }; Guid guid = proxy.Create(entity); proxy.Delete("beep", guid); 我没有给出关于这个需求的啮齿动物的尾巴部分,因为在我创建

我正在创建实体的虚假实例
beep
。它有一个类型为
picklist
的必填字段,名为
pickaboo
。首先我省略了它,但随后应用程序开始抱怨向我抛出错误消息,因为某些业务逻辑要求所有新创建的
beep
实例都分配该字段

Entity entity = new Entity { LogicalName = "beep" };
Guid guid = proxy.Create(entity);
proxy.Delete("beep", guid);
我没有给出关于这个需求的啮齿动物的尾巴部分,因为在我创建了这个实例之后,我正在删除它。然而,CRM给了一个巨大的啮齿动物,不让我做我的魔术。因此,我聪明地为缺少的属性添加了一个属性

OptionSetValue option = new OptionSetValue(0);
Entity entity = new Entity { LogicalName = "beep" };
entity.Attributes.Add("pickaboo", option);
Guid guid = proxy.Create(entity);
proxy.Delete("beep", guid);
当然,它不起作用,因为零不是有效值。显然,CRM基于解决方案添加了一个散列数,因此实际的“零”具有类似“84600000000”的数值,实际的“一”具有“846000000001”等

如何以编程方式获得该值


现在我有一个难看的解决办法,就是获取所有的
哔哔声
s,然后从第一个中获取值。别让我知道我失去了多少睡眠,知道这看起来有多尴尬,有人会花时间给我一些反馈吗(

您有两个选择

  • 您可以使用CrmSrvcUtil生成OptionSetValues作为枚举…这将创建一个pickaboo枚举,然后您可以在代码中引用它
    entity.Attributes.Add(“pickaboo”,新选项setvalue((int)pickaboo.YourEnumValue);

  • 您还可以使用
    RetrieveOptionSetRequest
    消息获取您感兴趣的特定选项集的所有值的列表。请参阅


  • 你有两个选择

  • 您可以使用CrmSrvcUtil生成OptionSetValues作为枚举…这将创建一个pickaboo枚举,然后您可以在代码中引用它
    entity.Attributes.Add(“pickaboo”,新选项setvalue((int)pickaboo.YourEnumValue);

  • 您还可以使用
    RetrieveOptionSetRequest
    消息获取您感兴趣的特定选项集的所有值的列表。请参阅

  • 因为我知道所有CRM程序员都是懒猪(以我自己的经验,哈哈),所以我知道你更喜欢一个简短而全面的解决方案。我意识到你正在寻找一个快速访问的方法,只需一个有效值。如果我错了,请停止阅读-使用@Daryl的建议-他为你找到了一个好答案

    但是,如果我是对的,请使用此代码获取第一个有效选项值(前提是它存在)。以防万一,请记住用
    try/catch
    包围它,这样,如果拼写错误或诸如此类,您就不会挠头了

    RetrieveAttributeRequest request = new RetrieveAttributeRequest
    {
      EntityLogicalName = "beep",
      LogicalName = "pickaboo",
      RetrieveAsIfPublished = true
    };
    RetrieveAttributeResponse response 
      = proxy.Execute(request) as RetrieveAttributeResponse;
    PicklistAttributeMetadata metaData 
      = response.AttributeMetadata as PicklistAttributeMetadata;
    OptionSetValue option 
      = new OptionSetValue(metaData.OptionSet.Options[0].Value ?? -1);
    
  • 注意-我假设您通过名为
    proxy
    的代理建立了工作连接
  • 在整个代码周围设置一个
    try/catch
    ,以防发生越界异常
  • 确保处理
    -1
    选项,因为返回的
    是可为空的整数
  • 因为我知道所有CRM程序员都是懒猪(以我自己的经验,哈哈),所以我知道你更喜欢一个简短而全面的解决方案。我意识到你正在寻找一个快速访问的方法,只需一个有效值。如果我错了,请停止阅读-使用@Daryl的建议-他为你找到了一个好答案

    但是,如果我是对的,请使用此代码获取第一个有效选项值(前提是它存在)。以防万一,请记住用
    try/catch
    包围它,这样,如果拼写错误或诸如此类,您就不会挠头了

    RetrieveAttributeRequest request = new RetrieveAttributeRequest
    {
      EntityLogicalName = "beep",
      LogicalName = "pickaboo",
      RetrieveAsIfPublished = true
    };
    RetrieveAttributeResponse response 
      = proxy.Execute(request) as RetrieveAttributeResponse;
    PicklistAttributeMetadata metaData 
      = response.AttributeMetadata as PicklistAttributeMetadata;
    OptionSetValue option 
      = new OptionSetValue(metaData.OptionSet.Options[0].Value ?? -1);
    
  • 注意-我假设您通过名为
    proxy
    的代理建立了工作连接
  • 在整个代码周围设置一个
    try/catch
    ,以防发生越界异常
  • 确保处理
    -1
    选项,因为返回的
    是可为空的整数

  • 这个问题启发了我写博客

    如果你看了下面我的帖子,你会发现一个函数,可以用来查找picklists(全局和本地选项集)、statecode、statuscode和boolean(两个选项)字段的int值


    这个问题激发了我写博客的灵感

    如果你看了下面我的帖子,你会发现一个函数,可以用来查找picklists(全局和本地选项集)、statecode、statuscode和boolean(两个选项)字段的int值


    这个特定的客户不会让我在没有监督的情况下登录。我认为在控制台中运行任何东西都会导致心脏骤停,呵呵。我会给选项2一个机会,希望它能解决我的小问题。谢谢,伙计,特别是如果它能工作的话!这个特定的客户不会让我在没有监督的情况下登录。我想运行任何东西在控制台中会导致心脏骤停,呵呵。我会给选项2一个秋千,希望它能解决我的小问题。谢谢,伙计,特别是如果它有效的话!该死的-我的老板实际上一直在唠叨我应该多写博客,我打算写一篇关于这个主题的文章,就像你一样。现在,这感觉像是一个冒牌货。但我要做的是无论如何。需要让老板高兴…该死-我的老板实际上一直在唠叨我应该多写博客,我打算写一篇关于这个主题的文章,就像你做的那样。现在,这感觉像是一个冒牌货。但我无论如何都要这么做。需要让老板高兴。。。