2016-04-22 10 views
3

Ich habe das folgende Stück Code, das Transaktionen von einer Dynamics CRM (Abfrage mit OData) ruft:Dynamics CRM - Wie eine odata.nextlink Antwort in .Net behandeln

public async Task<IEnumerable<Transaccion>> GetTransactions() 
    { 
     var tableName = Transaccion.CrmTableName; 

     var request = new RestRequest($"/api/data/v8.0/{tableName}"); 
     request.AddHeader("Prefer", "odata.maxpagesize=500"); 
     var responseData = await client.ExecuteGetTaskAsync<ODataResponse<List<Transaccion>>>(request); 
     var transactions = responseData.Data.Value; 

     while (responseData.Data.NextLink != null) 
     { 
      request = new RestRequest(responseData.Data.NextLink); 
      request.AddHeader("Prefer", "odata.maxpagesize=500"); 
      responseData = await client.ExecuteGetTaskAsync<ODataResponse<List<Transaccion>>>(request); 
      transactions.AddRange(responseData.Data.Value); 
     } 

     return transactions; 
    } 

sobald ich das erste "execute ExecuteGetTaskAsync ", bekomme ich für mein Beispiel und wie erwartet ein NextLink-Attribut, das auf den nächsten Satz von Entitäten verweist, die ich abrufen muss. Wenn ich jedoch versuche, den nächsten RestRequest auszuführen, erhalte ich keine JSON als Antwort, sondern eine Html-Seite, die einer Weiterleitung entspricht, wo ich die Fehlermeldung "" lesen kann.

Es ist komisch, da der erste Aufruf korrekt erfolgen konnte, da der Restclient korrekt authentifiziert wurde.

Was ist los? Wie kann ich Paging mit Dynamics CRM in .Net durchführen und den NextLink verwenden?

Antwort

0

Der odada nextlink gibt die vollständige URL der nächsten Anfrage zurück, so dass Sie sie analysieren müssen, um nur den/api/** - Teil zu erhalten.

1

In meinem Fall war URL in @ odata.nextLink mit einem Fehler.

Wie es war:

http://[Organization URI]/api/data/v8.2/[entity]/(68e95f08-d372-e711-966b-defe0719ce9e)/[relation entity]?$select=ne_name 

Und das nicht funktionierte, aber das tat:

http://[Organization URI]/api/data/v8.2/[entity](68e95f08-d372-e711-966b-defe0719ce9e)/[relation entity]?$select=ne_name 

Es gibt keine "/" zwischen [Einheit] und (id)