당신은 어떻게 처리 fetchxml 결과 데이터?
-
06-07-2019 - |
문제
내가 피할 작업 fetchxml 로 잘 모르는 최고의 방법을 처리하는 결과 데이터를 호출한 후에 crmService.Fetch(fetchXml).에서의 몇 가지 상황에서,나는 사용 XDocument LINQ 데이터를 검색하에서 이 데이터 구조와 같은:
XDocument resultset = XDocument.Parse(_service.Fetch(fetchXml));
if (resultset.Root == null || !resultset.Root.Elements("result").Any())
{
return;
}
foreach (var displayItem in resultset.Root.Elements("result").Select(item => item.Element(displayAttributeName)).Distinct())
{
if (displayItem!= null && displayItem.Value != null)
{
dropDownList.Items.Add(displayItem.Value);
}
}
는 가장 좋은 방법은 무엇입 취급하 fetchxml 결과 데이터를,그래서 그것은 쉽게 사용할 수 있습니다.응용 프로그램과 같은 지나가는 이러한 기록으로 ASP.NET datagrid 것은 매우 유용합니다.
해결책
나는 일반적으로 바로이 이유 때문에 fetchxml을 피합니다. 검색을 사용하여 강력하게 입력 한 비즈니스 객체를 얻고 기본적으로 동일한 작업을 수행 할 수 있습니다.
그러나 FetchXML을 사용하려면이 샘플은 다음과 같습니다.
다른 팁
나는 FetchXML의 유연성을 즐기고 그리드 및 리피터 등에 바인딩하는 데 사용하기 위해 데이터 가능을 반환하는 다음 기능을 개발했습니다.
/// <summary>
/// Takes a CRM FetchXML query and returns a DataTable
/// </summary>
/// <param name="fetchXml">The FetchXML query</param>
/// <param name="requiredFields">A array of columns you'd expect returned. This is required as if there is no data for a field/column CRM will not return it which could impact databinding</param>
/// <returns>A datatable containing the results of the FetchXML</returns>
public static DataTable FetchXML2DataTable(string fetchXml, string[] requiredFields)
{
CrmService tomService = new CrmService();
tomService = CrmWebService;
string result = tomService.Fetch(fetchXml);
DataSet ds = new DataSet();
System.IO.StringReader reader = new System.IO.StringReader(result);
ds.ReadXml(reader);
DataTable dt = ds.Tables[1];
//check all required columns are present otherwise add them to make life easier for databinding at the top level
//caused by CRM not returning fields if they contain no data
foreach (string field in requiredFields)
{ //Check for column names and nested tables
if ((dt.Columns.IndexOf(field) < 0) && (dt.DataSet.Tables.IndexOf(field) <0))
{
//Add column to datatable even though it is empty for reason stated above
dt.Columns.Add(new DataColumn(field));
}
}
return dt;
}
결과 세트가 해당 열에 데이터가 포함되어 있지 않으면 열이 반환되지 않기 때문에 필요한fields 문자열 배열이 있습니다. 그러나 DataGrids 등에 바인딩하는 정확한 이유로 열을 제자리에 원할 수 있습니다.
Crmservice는 웹 서비스를 시작하는 싱글 톤 클래스입니다.
바라건대 이것은 당신에게 사용되기를 바랍니다.
로다를 쿼리할 수 없습니다 많은 많은 엔터티를 검색할 수 없습니다.속성에서보다 더 하나의 엔티티에서는 한,그래서 당신이 사용해야 합 FetchXML.
불행하게도 LinqToCRM 의 codeplex 프로젝트가 설정되었습 폐기(1year 없이 새로운 해제이지만,그것을 구현보다 더 나은,마이크로소프트 자료)의 출시와 함께 4.0.12 의 CRM 의 SDK 를 포함된 linq 공급자에 대한 dynamics crm 지만,저는 읽어 일부에 대한 문서 이 새로운 버전과,아주 좋지 않을 것 같다는"가난한 구현으로"많은 제약이(강제 캐시 etc.).
내가 참 많이 사용하는 사람들의 LinqToXML 과에 대한 데이터 집합 지도 FetchXML 결과,하지만 내가 말을 할 수 없었는 가장 좋은 방법은 무엇인지를 처리해 드리겠습니다.당신은 무엇을 생각하겠어요?
크리스토프 Trevisani Chavey.
LinqTocrm으로 갈 수도 있습니다. XML 파싱을 처리합니다.http://codeplex.com/linqtocrm
FetchXML을 사용하고 BusinessEntityType의 리턴 세트를 얻으려면 fetchxmltoQueryExpression 메소드를 사용하여 FetchXML에서 쿼리 표현식을 얻은 다음 쿼리 표현식을 다시 검색 방법으로 적용 할 수 있습니다.
FetchXmlToQueryExpressionResponse qe = (FetchXmlToQueryExpressionResponse) service.Execute(fetch);
리버스 메소드 queryexpressiontofetchxml도 존재합니다