Σημείωση
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να συνδεθείτε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Ανακτά μια συλλογή εγγραφών πίνακα.
Σύνταξη
Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);
Παράμετροι
| Όνομα | Δακτυλογραφώ | Απαραίτητο | Περιγραφή |
|---|---|---|---|
entityLogicalName |
Συμβλοσειρά | Ναι | Το λογικό όνομα πίνακα των εγγραφών που θέλετε να ανακτήσετε. Για παράδειγμα: account. |
options |
Συμβλοσειρά | Όχι | Επιλογές ερωτήματος συστήματος OData ή ερώτημα FetchXML για την ανάκτηση των δεδομένων σας. Ανατρέξτε στο θέμα Επιλογές |
maxPageSize |
Αριθμός | Όχι | Καθορίστε έναν θετικό αριθμό που υποδεικνύει τον αριθμό εγγραφών πίνακα που θα επιστραφούν ανά σελίδα. Εάν δεν καθορίσετε αυτή την παράμετρο, η τιμή ορίζεται από προεπιλογή στο μέγιστο όριο των 5.000 εγγραφών για τυπικούς πίνακες, 500 για ελαστικούς πίνακες. Εάν ο αριθμός εγγραφών που ανακτώνται είναι μεγαλύτερος από την καθορισμένη maxPageSize τιμή ή το μέγιστο όριο για τον τύπο πίνακα, η nextLink στήλη στο αντικείμενο υπόσχεσης που επιστρέφεται θα περιέχει μια σύνδεση για την ανάκτηση εγγραφών. |
successCallback |
Function | Όχι | Μια συνάρτηση για κλήση κατά την ανάκτηση εγγραφών πίνακα. Ανατρέξτε στο θέμα Τιμή επιστροφής |
errorCallback |
Function | Όχι | Μια λειτουργία για κλήση όταν αποτύχει η λειτουργία. Διαβιβάζεται ένα αντικείμενο με τις ακόλουθες ιδιότητες: - errorCode:Αριθμός. Ο κωδικός σφάλματος ως θετικός δεκαδικός αριθμός. Για παράδειγμα, ο κωδικός σφάλματος που τεκμηριώνεται ως 0x80040333 θα επιστραφεί ως 2147746611.- message:Σειρά. Ένα μήνυμα λάθους που περιγράφει το ζήτημα. |
Επιλογές
Υποστηρίζονται οι παρακάτω επιλογές ερωτήματος συστήματος: $select, $top, $filter, $expandκαι $orderby.
Χρησιμοποιήστε την $expand επιλογή ερωτήματος συστήματος για να ελέγξετε ποια δεδομένα από σχετικούς πίνακες επιστρέφονται. Εάν συμπεριλάβετε μόνο το όνομα της ιδιότητας περιήγησης, θα λάβετε όλες τις ιδιότητες για σχετικές εγγραφές. Μπορείτε να περιορίσετε τις ιδιότητες που επιστρέφονται για σχετικές εγγραφές χρησιμοποιώντας την $select επιλογή ερωτήματος συστήματος σε παρενθέσεις μετά το όνομα ιδιότητας περιήγησης. Χρησιμοποιήστε αυτήν την επιλογή τόσο για τις ιδιότητες περιήγησης μίας τιμής όσο και για τις ιδιότητες περιήγησης με αξία συλλογής . Σημειώστε ότι για εργασία χωρίς σύνδεση υποστηρίζουμε μόνο ένθετα $select επιλογή εντός του $expand.
Για να καθορίσετε ένα ερώτημα FetchXML, χρησιμοποιήστε τη fetchXml στήλη για να καθορίσετε το ερώτημα.
Σημείωμα
Πρέπει πάντα να χρησιμοποιείτε την $selectεπιλογή ερωτήματος συστήματος για να περιορίσετε τις ιδιότητες που επιστρέφονται για μια εγγραφή πίνακα, συμπεριλαμβάνοντας μια λίστα ονομάτων ιδιοτήτων διαχωρισμένων με κόμματα. Αυτή είναι μια σημαντική βέλτιστη πρακτική επιδόσεων. Εάν δεν καθοριστούν ιδιότητες με χρήση $selectτου , θα επιστραφούν όλες οι ιδιότητες.
Καθορίζετε τις επιλογές ερωτήματος που αρχίζουν με ?. Μπορείτε επίσης να καθορίσετε πολλές επιλογές ερωτήματος συστήματος, χρησιμοποιώντας & το για να διαχωρίσετε τις επιλογές ερωτήματος.
Όταν καθορίζετε μια συμβολοσειρά ερωτήματος OData για την options παράμετρο, το ερώτημα θα πρέπει να κωδικοποιηθεί για ειδικούς χαρακτήρες.
Όταν καθορίζετε ένα ερώτημα FetchXML για την options παράμετρο, το ερώτημα δεν πρέπει να κωδικοποιείται.
Ανατρέξτε στα Παραδείγματα για να δείτε πώς μπορείτε να ορίσετε την options παράμετρο για διάφορα σενάρια ανάκτησης πολλαπλών σεναρίων.
Τιμή επιστροφής
Με επιτυχία, επιστρέφει ένα αντικείμενο υπόσχεσης στο successCallback με τις ακόλουθες ιδιότητες:
| Όνομα | Δακτυλογραφώ | Περιγραφή |
|---|---|---|
entities |
Πίνακας αντικειμένων JSON | Κάθε αντικείμενο αντιπροσωπεύει την ανακτημένη εγγραφή πίνακα που περιέχει στήλες και τις τιμές τους ως key: value ζεύγη. Το αναγνωριστικό της εγγραφής πίνακα ανακτώνται από προεπιλογή |
nextLink |
Συμβλοσειρά | (προαιρετικό) Εάν ο αριθμός των εγγραφών που ανακτώνται είναι μεγαλύτερος από την τιμή που καθορίζεται στην maxPageSize παράμετρο στην αίτηση, επιστρέφει τη διεύθυνση URL για να επιστρέψει την επόμενη σελίδα εγγραφών. |
fetchXmlPagingCookie |
(προαιρετικό) Για μια λειτουργία που βασίζεται σε retrieveMultipleRecords fetchXml με σελιδοποίηση όπου το συνολικό πλήθος εγγραφών είναι μεγαλύτερο από την τιμή σελιδοποίησης, αυτό το χαρακτηριστικό επιστρέφει το cookie σελιδοποίησης που μπορεί να χρησιμοποιηθεί για μια μεταγενέστερη λειτουργία fetchXml για την ανάκτηση της επόμενης σελίδας εγγραφών. |
Μη υποστηριζόμενοι τύποι χαρακτηριστικών για επιλογές ερωτήματος OData στο Mobile Offline
Οι ακόλουθοι τύποι στηλών δεν υποστηρίζονται κατά την εκτέλεση μιας Xrm.WebApi.retrieveMultipleRecords λειτουργίας με επιλογές συμβολοσειράς ερωτήματος OData (για παράδειγμα, $select και $filter) σε λειτουργία κινητής σύνδεσης. Θα πρέπει να χρησιμοποιήσετε το FetchXML εάν ο τύπος χαρακτηριστικού με τον οποίο πρέπει να εργαστείτε βρίσκεται σε αυτή τη λίστα μη υποστηριζόμενων τύπων χαρακτηριστικών.
MultiSelectPicklistFileImageManagedPropertyCalendarRulesPartyListVirtual
Μη υποστηριζόμενες δυνατότητες στο Mobile Offline
Οι παρακάτω δυνατότητες δεν υποστηρίζονται στο Mobile Offline:
- Δυνατότητες ομαδοποίησης και συνάθροισης
Υποστηριζόμενες λειτουργίες φιλτραρίσματος ανά τύπο χαρακτηριστικού στο Mobile Offline με χρήση fetchXML
Οι ακόλουθες λειτουργίες υποστηρίζονται για όλους τους τύπους χαρακτηριστικών όταν εργάζεστε με FetchXML:
- Ισούται με (
eq) - Δεν ισούται με (
neq) - Null (
null) - Χωρίς τιμή Null (
not-null)
Ο παρακάτω πίνακας παραθέτει περισσότερες λειτουργίες που υποστηρίζονται για κάθε τύπο χαρακτηριστικού:
| Τύπος χαρακτηριστικού | Υποστηριζόμενες λειτουργίες |
|---|---|
| BigInt, Decimal, Double, Integer | Μεγαλύτερο από (gt)Μεγαλύτερο ή ίσο με ( gte)Μικρότερο από ( lt)Μικρότερο ή ίσο με ( lte) |
| Δυαδική τιμή, Πελάτης | Στο (in)Not In ( not-in) |
| EntityName, Picklist, State, Status | Like (like)Δεν μου αρέσει ( not-like)Αρχίζει με ( begins-with)Να μην αρχίζει με ( not-begin-with)Τελειώνει σε ( ends-with)Δεν τελειώνει σε ( not-end-with)Στο ( in)Not In ( not-in) |
| Guid, Lookup | Στο (in)Not In ( not-in)Ισούται με το Αναγνωριστικό χρήστη ( eq-userid)Δεν ισούται με το αναγνωριστικό χρήστη ( ne-userid) |
| Χρήματα | Μεγαλύτερο από (gt)Μεγαλύτερο ή ίσο με ( gte)Μικρότερο από ( lt)Μικρότερο ή ίσο με ( lte)Στο ( in)Not In ( not-in) |
| Ιδιοκτήτης | Στο (in)Not In ( not-in)Ισούται με το Αναγνωριστικό χρήστη ( eq-userid)Δεν ισούται με το αναγνωριστικό χρήστη ( ne-userid)Ισούται με χρήστη ή ομάδα ( eq-useroruserteams) |
| Συμβλοσειρά | Like (like)Δεν μου αρέσει ( not-like)Αρχίζει με ( begins-with)Να μην αρχίζει με ( not-begin-with)Τελειώνει σε ( ends-with)Δεν τελειώνει σε ( not-end-with) |
| Ημερομηνία/ώρα | Από ή μετά (on-or-after)Στις ( on)Στις ή πριν από ( on-or-before)Σήμερα ( today)Αύριο ( tomorrow)Χθες ( yesterday)Επόμενες επτά ημέρες ( next-seven-days)Τελευταίες επτά ημέρες ( last-seven-days)Επόμενη εβδομάδα ( next-week)Προηγούμενη εβδομάδα ( last-week)Αυτή την εβδομάδα ( this-week)Επόμενος μήνας ( next-month)Τελευταίος μήνας ( last-month)Αυτός ο μήνας ( this-month)Επόμενο έτος ( next-year)Τελευταίο έτος ( last-year)Αυτό το έτος ( this-year)Τελευταίες X ημέρες ( last-x-days)Επόμενες X ημέρες ( next-x-days)Τελευταίες X εβδομάδες ( last-x-weeks)Επόμενες X εβδομάδες ( next-x-weeks)Τελευταίοι X μήνες ( last-x-months)Επόμενοι X μήνες ( next-x-months)Τελευταία X έτη ( last-x-years)Επόμενα X έτη ( next-x-years)Μεγαλύτερο από ( gt)Μεγαλύτερο από ή ίσο με ( gte)Μικρότερο από ( lt)Μικρότερο από ή ίσο με ( lte) |
Παραδείγματα
Τα περισσότερα από τα σενάρια/παραδείγματα που αναφέρονται στα Δεδομένα ερωτήματος χρησιμοποιώντας το Web API μπορούν να επιτευχθούν χρησιμοποιώντας τη μέθοδο retrieveMultipleRecords . Ορισμένα από τα παραδείγματα παρατίθενται παρακάτω.
Βασική ανάκτηση πολλαπλών
Αυτό το παράδειγμα υποβάλλει ερώτημα στον πίνακα λογαριασμών και χρησιμοποιεί τις $select επιλογές ερωτήματος συστήματος και για $top να επιστρέψει την ιδιότητα ονόματος για τους τρεις πρώτους λογαριασμούς:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$top=3").then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Βασική ανάκτηση πολλαπλών με Το FetchXML
Αυτό το παράδειγμα υποβάλλει ερώτημα στην οντότητα χρησιμοποιώντας το account fetchXML.
var fetchXml = "?fetchXml=<fetch><entity name='account'><attribute name='accountid'/><attribute name='name'/></entity></fetch>";
Xrm.WebApi.retrieveMultipleRecords("account", fetchXml).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Ανάκτηση ή φιλτράρισμα κατά ιδιότητες αναζήτησης
Για τις περισσότερες ιδιότητες περιήγησης μίας τιμής, θα βρείτε μια υπολογισμημένη ιδιότητα μόνο για ανάγνωση που χρησιμοποιεί την ακόλουθη σύμβαση ονοματοθεσίας: _<name>_value όπου το είναι το <name> όνομα της ιδιότητας περιήγησης μίας τιμής. Για σκοπούς φιλτραρίσματος, μπορεί επίσης να χρησιμοποιηθεί η συγκεκριμένη τιμή της ιδιότητας περιήγησης μίας τιμής. Ωστόσο, για προγράμματα-πελάτες για κινητές συσκευές σε λειτουργία χωρίς σύνδεση, αυτές οι επιλογές σύνταξης δεν υποστηρίζονται και το όνομα ιδιότητας περιήγησης μίας τιμής θα πρέπει να χρησιμοποιείται τόσο για την ανάκτηση όσο και για το φιλτράρισμα. Επίσης, η σύγκριση των ιδιοτήτων περιήγησης σε null δεν υποστηρίζεται σε λειτουργία εκτός σύνδεσης.
Περισσότερες πληροφορίες: Ιδιότητες αναζήτησης
Ακολουθούν παραδείγματα κώδικα και για τα δύο σενάρια:
Για σενάριο online (συνδεδεμένο σε διακομιστή)
Αυτό το παράδειγμα υποβάλλει ερώτημα στο σύνολο πινάκων λογαριασμών και χρησιμοποιεί τις $select επιλογές ερωτήματος συστήματος και $filter για να επιστρέψει το όνομα και την ιδιότητα primarycontactid για λογαριασμούς που έχουν μια συγκεκριμένη κύρια επαφή:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name,_primarycontactid_value&$filter=primarycontactid/contactid eq a0dbf27c-8efb-e511-80d2-00155db07c77").then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Για σενάριο για κινητές συσκευές εκτός σύνδεσης
Αυτό το παράδειγμα υποβάλλει ερώτημα στο σύνολο πινάκων λογαριασμών και χρησιμοποιεί τις $select επιλογές ερωτήματος συστήματος και $filter για να επιστρέψει το όνομα και την ιδιότητα primarycontactid για λογαριασμούς που έχουν μια συγκεκριμένη κύρια επαφή όταν εργάζονται σε λειτουργία εκτός σύνδεσης:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name,primarycontactid&$filter=primarycontactid eq a0dbf27c-8efb-e511-80d2-00155db07c77").then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Χρήση fetchXML για ανάκτηση ή φιλτράρισμα κατά ιδιότητες αναζήτησης (σενάριο σύνδεσης και εκτός σύνδεσης)
Μπορείτε να χρησιμοποιήσετε την FetchXML παράμετρο ενώ είναι εντός ή εκτός σύνδεσης για να ανακτήσετε την name ιδιότητα και primarycontactid για εγγραφές λογαριασμού που έχουν μια κύρια επαφή που ταιριάζει με μια συνθήκη:
var fetchXml = `?fetchXml=
<fetch>
<entity name='account'>
<attribute name='name'/>
<attribute name='primarycontactid'/>
<link-entity name='contact' from='contactid' to='primarycontactid'>
<filter type='and'>
<condition attribute='lastname' operator='eq' value='Contoso'/>
</filter>
</link-entity>
</entity>
</fetch>`;
Xrm.WebApi.retrieveMultipleRecords("account", fetchXml).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Καθορισμός του αριθμού πινάκων προς επιστροφή σε μια σελίδα
Το παρακάτω παράδειγμα δείχνει τη χρήση της maxPageSize παραμέτρου για τον καθορισμό του αριθμού εγγραφών (3) που θα εμφανίζονται σε μια σελίδα.
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name", 3).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
console.log("Next page link: " + result.nextLink);
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Αυτό το παράδειγμα θα εμφανίσει τρεις εγγραφές και μια σύνδεση στην επόμενη σελίδα. Ακολουθεί ένα παράδειγμα εξόδου από την Κονσόλα στα εργαλεία προγραμματισμού του προγράμματος περιήγησης:
{@odata.etag: "W/"1035541"", name: "A. Datum", accountid: "475b158c-541c-e511-80d3-3863bb347ba8"}
@odata.etag: "W/"1035541""accountid: "475b158c-541c-e511-80d3-3863bb347ba8"name: "A. Datum"__proto__: Object
VM5595:4
{@odata.etag: "W/"947306"", name: "Adventure Works", accountid: "a8a19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5595:4
{@odata.etag: "W/"1033754"", name: "Alpine Ski House", accountid: "aaa19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5595:6
Next page link: [Organization URI]/api/data/v9.0/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257bAAA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257b475B158C-541C-E511-80D3-3863BB347BA8%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E
Χρησιμοποιήστε το τμήμα ερωτήματος στη διεύθυνση URL της nextLink ιδιότητας ως τιμή για την options παράμετρο στην επόμενη κλήση σας retrieveMultipleRecords για να ζητήσετε το επόμενο σύνολο εγγραφών. Μην αλλάξετε ή προσαρτήστε άλλες επιλογές ερωτήματος συστήματος στην τιμή. Για κάθε μεταγενέστερη αίτηση για περισσότερες σελίδες, θα πρέπει να χρησιμοποιείτε την ίδια maxPageSize τιμή που χρησιμοποιείται στην αρχική ανάκτηση πολλαπλών αιτήσεων. Επίσης, αποθηκεύστε στο cache τα αποτελέσματα που επιστρέφονται ή την τιμή της επόμενης ιδιότηταςLink, ώστε να μπορούν να επιστραφούν σελίδες που έχουν ανακτηθεί προηγουμένως.
Για παράδειγμα, για να λάβετε την επόμενη σελίδα εγγραφών, θα μεταβιβάσουμε το τμήμα ερωτήματος της διεύθυνσης nextLink URL στην options παράμετρο:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257bAAA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257b475B158C-541C-E511-80D3-3863BB347BA8%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E", 3).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
console.log("Next page link: " + result.nextLink);
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Αυτό θα επιστρέψει την επόμενη σελίδα του θέματος αποτελεσμάτων:
{@odata.etag: "W/"1035542"", name: "Blue Yonder Airlines", accountid: "aca19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:4
{@odata.etag: "W/"1031348"", name: "City Power & Light", accountid: "aea19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:4
{@odata.etag: "W/"1035543"", name: "Coho Winery", accountid: "b0a19cdd-88df-e311-b8e5-6c3be5a8b200"}
VM5597:6
Next page link: [Organization URI]/api/data/v9.0/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%223%22%20pagingcookie=%22%253ccookie%2520page%253d%25222%2522%253e%253caccountid%2520last%253d%2522%257bB0A19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520first%253d%2522%257bACA19CDD-88DF-E311-B8E5-6C3BE5A8B200%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E
Σημαντικό
Η τιμή της ιδιότητας nextLink είναι κωδικοποιημένη με URI. Εάν κωδικοποιήσετε την τιμή URI πριν την στείλετε, οι πληροφορίες cookie XML στη διεύθυνση URL θα προκαλέσουν σφάλμα.
Παράδειγμα FetchXML (online σενάριο)
Το παρακάτω παράδειγμα δείχνει τη χρήση της count παραμέτρου FetchXML για τον καθορισμό του αριθμού εγγραφών (3) που θα εμφανίζονται σε μια σελίδα.
Σημείωμα
Το cookie σελιδοποίησης FetchXML επιστρέφεται μόνο για ηλεκτρονικές retrieveMultipleRecords λειτουργίες. (Xrm.WebApi.online). Δεν υποστηρίζεται εκτός σύνδεσης.
var fetchXml = "?fetchXml=<fetch count='3'><entity name='account'><attribute name='accountid'/><attribute name='name'/></entity></fetch>";
Xrm.WebApi.online.retrieveMultipleRecords("account", fetchXml).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
console.log("Paging cookie: " + result.fetchXmlPagingCookie);
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Αυτό το παράδειγμα θα εμφανίσει τρεις εγγραφές και θα επιστρέψει ένα cookie σελιδοποίησης FetchXML για την ανάκτηση των αποτελεσμάτων της επόμενης σελίδας, εάν υπάρχουν περισσότερες εγγραφές που ανήκουν στο σύνολο αποτελεσμάτων. Ακολουθεί ένα παράδειγμα εξόδου από την Κονσόλα στα εργαλεία προγραμματισμού του προγράμματος περιήγησης:
{
"entities": [
{
"@odata.etag": "W/\"1035542\"",
"accountid": "aca19cdd-88df-e311-b8e5-6c3be5a8b200",
"name": "Blue Yonder Airlines"
},
{
"@odata.etag": "W/\"1031348\"",
"accountid": "aea19cdd-88df-e311-b8e5-6c3be5a8b200",
"name": "City Power & Light"
},
{
"@odata.etag": "W/\"1035543\"",
"accountid": "b0a19cdd-88df-e311-b8e5-6c3be5a8b200",
"name": "Coho Winery"
}
],
"fetchXmlPagingCookie": "<cookie pagenumber=\"2\" pagingcookie=\"%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b0748C6EC-55A8-EB11-B1B5-000D3AFEF6FA%257d%2522%2520first%253d%2522%257bFC47C6EC-55A8-EB11-B1B5-000D3AFEF6FA%257d%2522%2520%252f%253e%253c%252fcookie%253e\" istracking=\"False\" />"
}
Μπορούμε να χρησιμοποιήσουμε τον fetchXmlPagingCookie όπως φαίνεται στο παρακάτω παράδειγμα για να πάρουμε μεγάλα σύνολα αποτελεσμάτων με σελιδοποίηση.
function CreateXml(fetchXml, pagingCookie, page, count) {
var domParser = new DOMParser();
var xmlSerializer = new XMLSerializer();
var fetchXmlDocument = domParser.parseFromString(fetchXml, "text/xml");
if (page) {
fetchXmlDocument
.getElementsByTagName("fetch")[0]
.setAttribute("page", page.toString());
}
if (count) {
fetchXmlDocument
.getElementsByTagName("fetch")[0]
.setAttribute("count", count.toString());
}
if (pagingCookie) {
var cookieDoc = domParser.parseFromString(pagingCookie, "text/xml");
var innerPagingCookie = domParser.parseFromString(
decodeURIComponent(
decodeURIComponent(
cookieDoc
.getElementsByTagName("cookie")[0]
.getAttribute("pagingcookie")
)
),
"text/xml"
);
fetchXmlDocument
.getElementsByTagName("fetch")[0]
.setAttribute(
"paging-cookie",
xmlSerializer.serializeToString(innerPagingCookie)
);
}
return xmlSerializer.serializeToString(fetchXmlDocument);
}
function retrieveAllRecords(entityName, fetchXml, page, count, pagingCookie) {
if (!page) {
page = 0;
}
return retrievePage(entityName, fetchXml, page + 1, count, pagingCookie).then(
function success(pageResults) {
if (pageResults.fetchXmlPagingCookie) {
return retrieveAllRecords(
entityName,
fetchXml,
page + 1,
count,
pageResults.fetchXmlPagingCookie
).then(
function success(results) {
if (results) {
return pageResults.entities.concat(results);
}
},
function error(e) {
throw e;
}
);
} else {
return pageResults.entities;
}
},
function error(e) {
throw e;
}
);
}
function retrievePage(entityName, fetchXml, pageNumber, count, pagingCookie) {
var fetchXml =
"?fetchXml=" + CreateXml(fetchXml, pagingCookie, pageNumber, count);
return Xrm.WebApi.online.retrieveMultipleRecords(entityName, fetchXml).then(
function success(result) {
return result;
},
function error(e) {
throw e;
}
);
}
var count = 3;
var fetchXml =
'<fetch><entity name="account"><attribute name="accountid"/><attribute name="name"/></entity></fetch>';
retrieveAllRecords("account", fetchXml, null, count, null).then(
function success(result) {
console.log(result);
// perform additional operations on retrieved records
},
function error(error) {
console.log(error.message);
// handle error conditions
}
);
Ανάκτηση σχετικών πινάκων αναπτύσσοντας τις ιδιότητες περιήγησης
Χρησιμοποιήστε την επιλογή ερωτήματος συστήματος $expand στις ιδιότητες περιήγησης για να ελέγξετε τα δεδομένα που επιστρέφονται από σχετικούς πίνακες. Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να ανακτήσετε την επαφή για όλες τις εγγραφές λογαριασμού. Για τις σχετικές εγγραφές επαφών, ανακτάμε μόνο τα contactid και fullname:
Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$top=3&$expand=primarycontactid($select=contactid,fullname)", 3).then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
console.log(result.entities[i]);
}
// perform additional operations on retrieved records
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
Το παραπάνω τμήμα κώδικα επιστρέφει ένα αποτέλεσμα με ένα σχήμα όπως:
{
"entities": [
{
"@odata.etag": "W/\"1459919\"",
"name": "Test Account",
"accountid": "119edfac-19c6-ea11-a81a-000d3af5e732",
"primarycontactid": {
"contactid": "6c63a1b7-19c6-ea11-a81a-000d3af5e732",
"fullname": "Test Contact"
}
}
]
}
Σημείωμα
Παρόμοια με το σενάριο online, χρησιμοποιήστε την επιλογή ερωτήματος συστήματος $expand για να ανακτήσετε δεδομένα από σχετικούς πίνακες εκτός σύνδεσης. Ωστόσο, οι σχέσεις πολλά προς πολλά δεν υποστηρίζονται εκτός σύνδεσης.
Υπό απόσυρση μέθοδος για σενάριο για κινητές συσκευές εκτός σύνδεσης
Σημείωμα
Η @odata.nextLink είναι υπό απόσυρση για σενάρια mobile offline. Παρόλο που εξακολουθεί να υποστηρίζεται για υπάρχουσες προσαρμογές, δεν συνιστάται να χρησιμοποιείται πλέον.
Μια λειτουργία $expand εκτός σύνδεσης επιστρέφει ένα @odata.nextLink σχόλιο που περιέχει πληροφορίες σχετικά με τον τρόπο λήψης των πληροφοριών της σχετικής εγγραφής. Χρησιμοποιούμε την idπαράμετρο , entityTypeκαι options αυτού του σχολίου για τη δημιουργία μίας ή περισσότερων πρόσθετων Xrm.WebApi.offline.retrieveRecord αιτήσεων. Το παρακάτω τμήμα κώδικα παρέχει ένα πλήρες παράδειγμα για το πώς μπορείτε να το κάνετε αυτό:
Xrm.WebApi.offline.retrieveMultipleRecords("account", "?$select=name&$top=3&$expand=primarycontactid($select=contactid,fullname)").then(function(resultSet) {
/**
* resultSet has a structure like:
* {
* "entities": [
* {
* "accountid": "119edfac-19c6-ea11-a81a-000d3af5e732",
* "name": "Test Account",
* "primarycontactid@odata.nextLink": {
* "API": "{Xrm.Mobile.offline}.{retrieveRecord}",
* "id": "119edfac-19c6-ea11-a81a-000d3af5e732",
* "entityType": "account",
* "options": "?$select=accountid&$expand=primarycontactid($select=contactid,fullname)&$getOnlyRelatedEntity=true"
* },
* "primarycontactid": {}
* }
* ]
* }
*
* Notice the empty `primarycontactid` property but an additional `primarycontactid@odata.nextLink`
* annotation that lets us know how to get to the linked data that we need.
**/
var promises = resultSet.entities.map(function(outerItem) {
// We do a retrieveRecord() for every item in the result set of retrieveMultipleRecords() and then
// combine the results into the retrieveMultipleRecords() result set itself.
return Xrm.WebApi.offline.retrieveRecord(
outerItem["primarycontactid@odata.nextLink"].entityType,
outerItem["primarycontactid@odata.nextLink"].id,
outerItem["primarycontactid@odata.nextLink"].options
).then(function(innerResult) {
if (innerResult.value.length === 0) {
return outerItem;
}
outerItem.primarycontactid = innerResult.value[0];
return outerItem;
});
});
return Promise.all(promises);
}).then(function(allResults) {
for (var i = 0; i < allResults.length; i++) {
console.log(allResults[i]);
}
// perform additional operations on retrieved records
}, function(error) {
console.error(error);
// handle error conditions
});
Για περισσότερα παραδείγματα ανάκτησης πολλών εγγραφών με χρήση του Web API, ανατρέξτε στο θέμα Δεδομένα ερωτήματος με χρήση του API Web.
Σχετικά άρθρα
Υποβολή ερωτημάτων για δεδομένα με χρήση του Web API
Xrm.WebApi.retrieveRecord
Xrm.WebApi