使用c#检索引用详细信息

时间:2013-11-28 12:54:59

标签: visual-studio-2010 sdk dynamics-crm-2011 workflow

我正在尝试创建一个自定义工作流程(适用于Dynamics CRM 2011),该工作流程必须从报价中发送包含详细报价信息的电子邮件。 我使用sdk在Visual Studio 2010中创建它。

工作流程是从报价中手动触发的。 我能够检索customerid的值,但是当我启动工作流程时,我无法获得附加文档或引用的引用细节:

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at Microsoft.Xrm.Sdk.Entity.get_Item(String attributeName)
   at CPageCRM.Workflow.QuoteSendMailNotificationRIP.Execute(CodeActivityContext executionContext)

我的代码是:

//to get the current Quote
 Entity preImageEntity = context.PreEntityImages.Values.FirstOrDefault();
 //preImageEntity is a Quote because I trigger the workflow from a Quote
 //the next two lines work, I can retrieve the good value of the Quote
 string natureDevis = Utils.GetOptionSetValueLabel(service, preImageEntity, "new_nature", (OptionSetValue)preImageEntity["new_nature"]);
 string prospectDevis = ((EntityReference)preImageEntity["customerid"]).Name;
 //I get the exception after that :
 List<QuoteDetail> listQuoteDetail = new List<QuoteDetail>();
 listQuoteDetail = preImageEntity["quote_details"] as List<QuoteDetail>; //I get the exception

我不明白为什么quote_details在dictionnary中不存在,因为当我这样做时:

    Quote devis = new Quote();

   devis.quote_details //<= (the autocompletion is working)

当我尝试获取sharepointdocumentlocation

时遇到同样的问题

有人有解释吗?如何从代码中检索报价详细信息和附加到报价的文档?

由于

2 个答案:

答案 0 :(得分:1)

评论和潜在答案。

我的评论是从图像中检索东西我经常发现让编译器抓住正确的类型并且只使用'var'更容易。

我的回答是,quote_details不仅仅是一个字段,而是一个实际的1-n关系(通过查看元数据浏览器)。您可能需要在单独的检索中获取相关实体。

修改 例如:_service.Retrieve(“quote”,quoteId,new ColumnSet(“quote_details”))
将从服务中检索报价详细信息。但是,您还可以检查并查看是否从PreImage传递quote_details属性。

答案 1 :(得分:1)

我用linq查询成功了 我必须搜索与引用链接的quote_detail:

var queryQuoteDetail = from r in orgServiceContext.CreateQuery("quotedetail")
                       where ((EntityReference)r["quoteid"]).Id.Equals(context.PrimaryEntityId)
                       select r;