2017-05-24 2 views
1

CRMからOrganizationServiceProxyを使用してレコードを取得しています。最初からいくつかのレコードをスキップします。シナリオは、例えば、2つのエンティティがAとBと呼ばれています。私はOrganizationServiceProxyのRetrieveMultipleメソッドを使用しています。CRMからのリトリーブ中にOrganizationServiceProxyを使用してCRMレコードをスキップする

Aは、27のレコード

を有する

Bは、最初の優先順位は、エンティティA、次いでエンティティB.が今仮定59

とIの両方からレコードをフェッチする1つの方法を持っている32のレコード

合計で=ましたページサイズは=エンティティAから10最初の呼び出しで

10レコードが返さある

第2の呼び出しで

、3コール内のエンティティA

から 別の10のレコード、エンティティAから 7レコードとエンティティBから3つのレコード4コールで

10レコードエンティティB から(ただし、3番目の呼び出しをスキップして、3番目の呼び出しで既にフェッチしているため、4番目のレコードから開始します)

CRMからデータを取得しながらレコードをスキップします。私はたくさんの検索をしていますが、何も得られませんでした。私は、CRMからすべてのレコードを取得し、LINQからページネーションを実行する方法です。

+0

待機中、2つのRetrieveMultiple結果セット(エンティティA + B)の和集合を使用して、メソッド内でマージされたデータセットを取得できます。ただし、ページングCookieはRetreiveMultiple呼び出し自体のページング用です。LINQを使用してローカルマージしたデータセットでページ番号を設定する必要があります。 –

答えて

2

ページングCookiesを使用するように思えます。例と詳細についてはリンクを参照してください。

https://msdn.microsoft.com/en-us/library/gg328046.aspx

編集

あなたは、ループの各反復のためのページングクッキーを再作成するが、既存のページングクッキーの上に、それをベースにする必要があります。

以下のコードは、私がリンクしている例です。

public string CreateXml(string xml, string cookie, int page, int count) 
    { 
     StringReader stringReader = new StringReader(xml); 
     XmlTextReader reader = new XmlTextReader(stringReader); 

     // Load document 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(reader); 

     return CreateXml(doc, cookie, page, count); 
    } 

この最初の方法では、FetchXml、ページングクッキー、現在のページ、および1ページあたりの項目数が必要です。これは、順番に次のように呼び出します:

public string CreateXml(XmlDocument doc, string cookie, int page, int count) 
    { 
     XmlAttributeCollection attrs = doc.DocumentElement.Attributes; 

     if (cookie != null) 
     { 
      XmlAttribute pagingAttr = doc.CreateAttribute("paging-cookie"); 
      pagingAttr.Value = cookie; 
      attrs.Append(pagingAttr); 
     } 

     XmlAttribute pageAttr = doc.CreateAttribute("page"); 
     pageAttr.Value = System.Convert.ToString(page); 
     attrs.Append(pageAttr); 

     XmlAttribute countAttr = doc.CreateAttribute("count"); 
     countAttr.Value = System.Convert.ToString(count); 
     attrs.Append(countAttr); 

     StringBuilder sb = new StringBuilder(1024); 
     StringWriter stringWriter = new StringWriter(sb); 

     XmlTextWriter writer = new XmlTextWriter(stringWriter); 
     doc.WriteTo(writer); 
     writer.Close(); 

     return sb.ToString(); 
    } 

これは、結果の次のページを返すために、あなたの新しいFetchXmlを構築、しかし返却する必要が次のページであるかを決定するために、現在のページングクッキーを使用しています。

次に、結果を得るために次のように呼び出すだけです。

​​

リンクの完全なコードサンプルを読み、その内容を理解していることを確認してください。それはすべてそこにある。

+0

ページCookieから最後の要素の一意の識別子を取得できますが、最後のレコードの後に​​レコードをフェッチする方法はありますか? –

関連する問題