문제

내가 피할 작업 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을 사용하려면이 샘플은 다음과 같습니다.

http://msdn.microsoft.com/en-us/library/ms914457.aspx

다른 팁

나는 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도 존재합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top