2012-11-09 40 views
0

我正在创建实体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增加了一个基于解决方案的哈希数字,所以实际的“零”具有数值如“846000000000”,实际的“一”具有“846000000001”等。

如何以编程方式获取该值?

现在,我有一个丑陋的解决办法获得所有beep小号并从第一次他们的价值。不要让我开始了解我有多少睡眠,知道它看起来有多尴尬,有人会花时间给我一些反馈。 :(

回答

3

你有两个选择。

  1. 可以使用CrmSrvcUtil来生成OptionSetValues如枚举...这将创建一个pickaboo枚举,你可以然后在代码 参考entity.Attributes.Add("pickaboo", new OptionSetValue((int)pickaboo.YourEnumValue);

  2. 您也可以使用RetrieveOptionSetRequest消息获得所有值的列表的特定选项设置你感兴趣,见this SO question

+0

此特殊客户不会让我在没有监督的情况下登录。我认为在控制台上运行任何东西都会导致心脏骤停,呵呵。我会给选项2一个摆动,并希望它能解决我的小问题。谢谢,哥们,特别是如果它有效! –

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); 
  1. NB - 我假设你已经有了通过一个称为proxy代理工作连接。
  2. 围绕整个代码设置一个try/catch,以防发生超出界限的异常。
  3. 请务必处理-1的选项,因为返回的Value是可以为空的整数。
1

这个问题激发了我的博客。

如果你看看我的帖子下面有一个函数,可以用来查找选择列表(全局和本地选项集),状态码,状态码和布尔(两个选项)字段的int值。

CRM 2011 Programatically Finding the Values of Picklists, Optionsets, Statecode, Statuscode and Boolean (Two Options)

+2

Darn - 我的老板实际上是唠叨我应该多写博客,我会写一篇关于这个主题的文章,就像你一样。现在,它会感觉像一个敲门声。但我仍然要这样做。需要让老板高兴... –