2016-12-12 30 views
0

私はこのクエリでフェッチするレコードが5,000を超えていますが、毎回null値を持つクッキーを取得します。私はリンクされたエンティティがここで問題であることを認識しました。なぜなら、私はそれを削除すると毎回クッキーを取得するからです。CRM FetchXMLが5000レコードをフェッチする

<fetch version="1.0" mapping="logical" distinct="true" page="1" count="2000" > 
    <entity name="listmember" > 
     <link-entity name="contact" from="contactid" to="entityid" alias="c" > 
      <attribute name="contactid" /> 
      <attribute name="telephone1" /> 
      <link-entity name="phonecall" from="ic_customer" to="contactid" alias="pc" link-type="outer" distinct="true"> 
       <attribute name="activityid" /> 
       <filter type="and" > 
        <filter type="or" > 
         <condition attribute="statuscode" operator="eq" value="1" /> 
         <condition attribute="ic_end" operator="on-or-after" value="2016-11-12" /> 
        </filter> 
       </filter> 
      </link-entity> 
      <filter type="and" > 
       <condition attribute="statecode" operator="eq" value="0" /> 
       <condition attribute="telephone1" operator="not-null" /> 
       <condition attribute="donotphone" operator="eq" value="0" /> 
      </filter> 
     </link-entity> 
     <filter type="and" > 
      <condition attribute="listid" operator="in" > 
       <value> 
        {f89087ef-7017-e611-80e3-5065f38a3951} 
       </value> 
      </condition> 
      <condition entityname="pc" attribute="activityid" operator="null" /> 
     </filter> 
    </entity> 
</fetch> 

誰もがこの要求にページングクッキーを取得する方法を知っていますか?

答えて

0

この特定の問題の解決策は、ルートエンティティにID列を指定する必要があることです。この例では、listmemberid属性をルートlistmemberエンティティに追加する必要があります。

<fetch version="1.0" mapping="logical" distinct="true" page="1" count="2000" > 
    <entity name="listmember" > 
     <attribute name="listmemberid" /> 
     <link-entity name="contact" from="contactid" to="entityid" alias="c" > 
      <attribute name="contactid" /> 
      <attribute name="telephone1" /> 
      <link-entity name="phonecall" from="ic_customer" to="contactid" alias="pc" link-type="outer" distinct="true"> 
       <attribute name="activityid" /> 
       <filter type="and" > 
        <filter type="or" > 
         <condition attribute="statuscode" operator="eq" value="1" /> 
         <condition attribute="ic_end" operator="on-or-after" value="2016-11-12" /> 
        </filter> 
       </filter> 
      </link-entity> 
      <filter type="and" > 
       <condition attribute="statecode" operator="eq" value="0" /> 
       <condition attribute="telephone1" operator="not-null" /> 
       <condition attribute="donotphone" operator="eq" value="0" /> 
      </filter> 
     </link-entity> 
     <filter type="and" > 
      <condition attribute="listid" operator="in" > 
       <value> 
        {f89087ef-7017-e611-80e3-5065f38a3951} 
       </value> 
      </condition> 
      <condition entityname="pc" attribute="activityid" operator="null" /> 
     </filter> 
    </entity> 
</fetch> 
0

あなたのポストを読んで、これまで私がこれまで聞いたことがあることを思い出しました。私は自分のメモに行き、 "リンク可能なFetchxmlはページングをサポートしていません"と見ました。しかし、私は奇妙に感じる制限に関する正式な情報を見つけることができないようです。

とにかく、リンクエンティティを持つクエリをフェッチするのがページングをサポートしていないことは間違いありません。代わりにQueryExpressionを使用して実行してみてください。

-1
using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Pipeline.Wrapper; 
using Microsoft.SqlServer.Dts.Runtime.Wrapper; 
using Microsoft.Xrm.Sdk; 
using System.ServiceModel.Description; 
using Microsoft.Xrm.Sdk.Client; 
using Microsoft.Xrm.Sdk.Query; 

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] 
public class ScriptMain : UserComponent 
{ 
    IOrganizationService organizationservice; 

    public override void PreExecute() 
    { 
     base.PreExecute(); 

     ClientCredentials credentials = new ClientCredentials(); 

     credentials.UserName.UserName = "username"; 

     credentials.UserName.Password = "password"; 


     credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 

     organizationservice = new OrganizationServiceProxy(
      new Uri("_your org service_Organization.svc"), null, credentials, null); 
    } 

    public override void PostExecute() 
    { 
     base.PostExecute(); 
    } 

    public override void CreateNewOutputRows() 
    { 
     QueryExpression query = new QueryExpression("account") 
     { 
      ColumnSet = new ColumnSet(new string[] { "accountnumber" }), 
      PageInfo = new PagingInfo() 
      { 
       Count = 250, 
       PageNumber = 1, 
       ReturnTotalRecordCount = false, 
       PagingCookie = null 
    } 
     }; 

     EntityCollection results = null; 

     while (true) 
     { 



      results = organizationservice.RetrieveMultiple(query); 

      foreach (Entity record in results.Entities) 
      { 
       accountBuffer.AddRow(); 


       if (record.Contains("accountnumber")) 
        accountBuffer.accountnumber = record.GetAttributeValue<string>("accountnumber"); 


      } 



      if (results.MoreRecords) 
      { 
       query.PageInfo.PageNumber++; 
       query.PageInfo.PagingCookie = results.PagingCookie; 
      } 
      else 
      { 
       break; 
      } 
     } 

    } 




} 
+0

コードを説明しよう。 – Gahan

関連する問題