2012-07-09 87 views
2

我试图使用fetchxml从另一个记录中获取值以创建一个新的记录。除了从选项集或查找字段获取任何值之外,我已经设法实现所有工作。选项设置的人不会给出任何错误,但只是不设置字段,并且查找表示GUID的格式不正确,可能是因为它没有通过GUID。从CRM 2011中的FetchXml获取选项集和查找字段值

任何人都可以帮我弄清楚如何获得这些值吗?

谢谢

编辑:我的代码如下。选项集是评分(ts_grading)和我需要从提取中获得的qualityStatement Guid(ts_quality_statement_id)。

string fetchXml = @"<fetch distinct='false' mapping='logical' output-format='xml-platform' version='1.0'> 
          <entity name='ts_self_assessment_item'> 
          <attribute name='ts_evidence_of_areas_of_improvement'/><attribute name='ts_evidence_of_strengths'/><attribute name='ts_expected_completion_date'/> 
          <attribute name='ts_grading'/><attribute name='ts_quality_statement_id'/> 
          <filter type='and'> 
          <condition attribute='ts_self_assessment_id' uitype='ts_self_assessment' operator='eq' value='" + selfAssessmentID + "'/></filter></entity></fetch>"; 

     // Execute Fetch xml 
     EntityCollection selfAssessmentItemResult = Service.RetrieveMultiple(new FetchExpression(fetchXml)); 

     foreach (var selfAssessment in selfAssessmentItemResult.Entities) 
     {     
      string areasOfImprovement = selfAssessment["ts_evidence_of_areas_of_improvement"].ToString(); 
      string strengths = selfAssessment["ts_evidence_of_strengths"].ToString(); 
      DateTime completionDate = Convert.ToDateTime(selfAssessment["ts_expected_completion_date"].ToString()); 
      string grading = selfAssessment["ts_grading"].ToString(); 
      Guid qualityStatement = new Guid(selfAssessment["ts_quality_statement_id"].ToString()); 
      Guid parentSelfAssessment = new Guid(entity.Attributes["ts_self_assessmentid"].ToString());    

     } 

    } 
+2

你能发布一些不适合你的代码吗? – 2012-07-09 16:51:32

+0

Optionset值是数字而不是guid - 同意@PeterMajeed,代码会有帮助! – glosrob 2012-07-09 21:35:56

+0

我已经在我原来的帖子中发布了代码 – jimminybob 2012-07-10 07:52:09

回答

5

OptionSet属性返回为OptionSetValues和foriegn键返回实体引用。尝试使用Entity.GetAttributeValue而不是做所有的ToString铸造工作:

foreach (var selfAssessment in selfAssessmentItemResult.Entities) 
    {     
     string areasOfImprovement = selfAssessment.GetAttributeValue<String>("ts_evidence_of_areas_of_improvement"); 
     string strengths = selfAssessment.GetAttributeValue<string>("ts_evidence_of_strengths"); 
     DateTime completionDate = selfAssessment.GetAttributeValue<DateTime>("ts_expected_completion_date"); 
     var grading = selfAssessment.GetAttributeValue<OptionSetValue>("ts_grading"); 
     Guid qualityStatement = selfAssessment.GetAttributeValue<EntityReference>("ts_quality_statement_id").Id; 

    } 

如果你想在OptionSetValue文本价值,你需要看看它使用OptionSet元数据服务呼叫或寻找在Entity.FormattedAttributes属性。

另外使用早期绑定的对象可以避免出现这些类型的投射问题。

+0

很好,工作非常感谢。作为一个侧面问题,你如何使用CRM的早期绑定对象? – jimminybob 2012-07-10 13:09:36

+1

@jimminybob您必须使用SDK中的工具创建它们。基本上,您只需将该工具指向您的CRM终端,它就会为您生成对象,这样您就可以获得所有智能感知,并且它允许您甚至使用LINQ而不是Fetch XML。 http://msdn.microsoft.com/en-us/library/gg327844.aspx – Daryl 2012-07-10 13:13:29

相关问题