retrieveMultipleRecords (क्लाइंट API संदर्भ)

तालिका रिकॉर्ड का एक संग्रह पुनर्प्राप्त करता है।

सिंटैक्स

Xrm.WebApi.retrieveMultipleRecords(entityLogicalName, options, maxPageSize).then(successCallback, errorCallback);

पैरामीटर

नाम Type आवश्य विवरण
entityLogicalName तार हाँ उन रिकॉर्ड्स की तालिका तार्किक नाम जिन्हें आप पुनर्प्राप्त करना चाहते हैं. उदाहरण के लिए: account.
options तार No OData सिस्टम क्वेरी विकल्प या FetchXML क्वेरी आपके डेटा को पुनर्प्राप्त करने के लिए. विकल्प देखें
maxPageSize नंबर No एक धनात्मक संख्या निर्दिष्ट करें जो प्रति पृष्ठ लौटाए जाने वाले तालिका रिकॉर्ड्स की संख्या को इंगित करती है. यदि आप इस पैरामीटर को निर्दिष्ट नहीं करते हैं, तो मान मानक तालिकाओं के लिए 5,000 रिकॉर्ड्स, लोचदार तालिकाओं के लिए 500 की अधिकतम सीमा तक डिफ़ॉल्ट है.

यदि पुनर्प्राप्त किए जा रहे रिकॉर्ड्स की संख्या निर्दिष्ट maxPageSize मान या तालिका प्रकार के लिए अधिकतम सीमा से अधिक है, nextLink तो लौटाए गए वादा ऑब्जेक्ट में स्तंभ में रिकॉर्ड पुनर्प्राप्त करने के लिए एक लिंक होगा.
successCallback फ़ंक्शन No तालिका रिकॉर्ड पुनर्प्राप्त होने पर कॉल करने के लिए एक फ़ंक्शन. रिटर्न वैल्यू देखें
errorCallback फ़ंक्शन No ऑपरेशन विफल होने पर कॉल करने के लिए एक फ़ंक्शन। निम्न गुणों के साथ एक ऑब्जेक्ट पास किया जाता है:
- errorCode:संख्या। त्रुटि कोड एक धनात्मक दशमलव संख्या के रूप में। उदाहरण के लिए, के रूप में 0x80040333 प्रलेखित त्रुटि कोड के रूप में 2147746611लौटाया जाएगा।
- message:तार। समस्या का वर्णन करने वाला एक त्रुटि संदेश.

विकल्प

निम्न सिस्टम क्वेरी विकल्प समर्थित हैं: $select, , $top$filter, $expand, और $orderby.

संबंधित तालिकाओं से कौन सा डेटा दिया जाए, यह नियंत्रित करने के लिए सिस्टम क्वेरी विकल्प का $expand उपयोग करें. यदि आप केवल नेविगेशन प्रॉपर्टी का नाम शामिल करते हैं, तो आपको संबंधित रिकॉर्ड के लिए सभी गुण प्राप्त होंगे। आप नेविगेशन गुण नाम के बाद कोष्ठक में सिस्टम क्वेरी विकल्प का $select उपयोग करके संबंधित रिकॉर्ड के लिए लौटाए गए गुणों को सीमित कर सकते हैं. एकल-मूल्य और संग्रह-मूल्यवान नेविगेशन गुणों दोनों के लिए इसका उपयोग करें। ध्यान दें कि ऑफ़लाइन के लिए हम केवल नेस्टेड $select विकल्प का समर्थन करते हैं $expand

FetchXML क्वेरी निर्दिष्ट करने के लिए, क्वेरी निर्दिष्ट करने के लिए स्तंभ का fetchXml उपयोग करें.

नोट

आप हमेशा गुण नामों की अल्पविराम से अलग सूची को शामिल करके तालिका रिकॉर्ड के लिए दिए गए गुणों को सीमित करने के लिए सिस्टम क्वेरी विकल्प का उपयोग करना $selectचाहिए। यह एक महत्वपूर्ण प्रदर्शन सर्वोत्तम अभ्यास है। यदि गुणों का उपयोग करके $selectनिर्दिष्ट नहीं किया गया है, तो सभी गुण वापस कर दिए जाएंगे।

आप इससे प्रारंभ होने वाले क्वेरी विकल्प निर्दिष्ट करते हैं ?. आप क्वेरी विकल्पों को अलग करने के लिए उपयोग करके & एकाधिक सिस्टम क्वेरी विकल्प भी निर्दिष्ट कर सकते हैं.

जब आप पैरामीटर के लिए options कोई OData क्वेरी स्ट्रिंग निर्दिष्ट करते हैं, तो क्वेरी को विशेष वर्णों के लिए एन्कोड किया जाना चाहिए .

जब आप पैरामीटर के लिए options कोई FetchXML क्वेरी निर्दिष्ट करते हैं, तो क्वेरी को एन्कोड नहीं किया जाना चाहिए

यह देखने के लिए उदाहरण देखें कि आप विभिन्न पुनर्प्राप्त एकाधिक परिदृश्यों के लिए पैरामीटर को options कैसे परिभाषित कर सकते हैं.

वापसी मान

सफलता पर, निम्नलिखित गुणों के साथ एक वादा ऑब्जेक्ट successCallback लौटाता है:

नाम Type विवरण
entities JSON ऑब्जेक्ट्स की सरणी प्रत्येक ऑब्जेक्ट पुनर्प्राप्त तालिका रिकॉर्ड का प्रतिनिधित्व करता है जिसमें कॉलम और जोड़े के रूप में key: value उनके मान होते हैं। तालिका रिकॉर्ड की ID डिफ़ॉल्ट रूप से पुनर्प्राप्त की जाती है
nextLink तार (वैकल्पिक) यदि पुनर्प्राप्त किए जा रहे रिकॉर्ड्स की संख्या अनुरोध में पैरामीटर में निर्दिष्ट maxPageSize मान से अधिक है, तो यह रिकॉर्ड के अगले पृष्ठ को वापस करने के लिए URL लौटाता है.
fetchXmlPagingCookie (वैकल्पिक) पेजिंग के साथ एक fetchXml-आधारित retrieveMultipleRecords कार्रवाई के लिए जहाँ कुल रिकॉर्ड गणना पेजिंग मान से अधिक है, यह विशेषता पेजिंग कुकी देता है जिसका उपयोग रिकॉर्ड के अगले पृष्ठ को पुनर्प्राप्त करने के लिए बाद के fetchXml कार्रवाई के लिए किया जा सकता है।

मोबाइल ऑफ़लाइन में OData क्वेरी विकल्पों के लिए असमर्थित विशेषता प्रकार

मोबाइल ऑफ़लाइन मोड में OData क्वेरी स्ट्रिंग विकल्पों (उदाहरण के लिए, और $select ) $filterके साथ कोई कार्रवाई करते Xrm.WebApi.retrieveMultipleRecords समय निम्न स्तंभ प्रकार समर्थित नहीं होते हैं. यदि आपको जिस विशेषता प्रकार के साथ कार्य करने की आवश्यकता है, वह असमर्थित विशेषता प्रकारों की इस सूची में है, तो आपको FetchXML का उपयोग करना चाहिए.

  • MultiSelectPicklist
  • File
  • Image
  • ManagedProperty
  • CalendarRules
  • PartyList
  • Virtual

मोबाइल ऑफ़लाइन में असमर्थित सुविधाएँ

मोबाइल ऑफ़लाइन में निम्न सुविधाएँ समर्थित नहीं हैं:

  • समूहीकरण और एकत्रीकरण सुविधाएँ

FetchXML का उपयोग करके मोबाइल ऑफ़लाइन में प्रति विशेषता प्रकार समर्थित फ़िल्टर ऑपरेशन

FetchXML के साथ काम करते समय सभी विशेषता प्रकारों के लिए निम्न कार्रवाई समर्थित हैं:

  • बराबर ()eq
  • बराबर नहीं ()neq
  • शून्य ()null
  • शून्य नहीं ()not-null

निम्न तालिका प्रत्येक विशेषता प्रकार के लिए समर्थित अधिक कार्रवाइयों को सूचीबद्ध करती है:

विशेषता प्रकार समर्थित संचालन
BigInt, दशमलव, डबल, पूर्णांक ()gt से बड़ा
से बड़ा या बराबर ()gte
()lt से कम
से कम या बराबर ()lte
बूलियन, ग्राहक में ()in
में नहीं (not-in)
निकाय नाम, पिकलिस्ट, राज्य, स्थिति जैसे ()like
पसंद नहीं ()not-like
()begins-with से शुरू होता है
()not-begin-with से शुरू नहीं करें
() के साथ समाप्त होता हैends-with
के साथ समाप्त नहीं ()not-end-with
में ()in
में नहीं (not-in)
गाइड, लुकअप में ()in
में नहीं (not-in)
उपयोगकर्ता ID ()eq-userid के बराबर करता है
उपयोगकर्ता आईडी के बराबर नहीं है ()ne-userid
Money ()gt से बड़ा
से बड़ा या बराबर ()gte
()lt से कम
से कम या बराबर ()lte
में ()in
में नहीं (not-in)
मालिक में ()in
में नहीं (not-in)
उपयोगकर्ता ID ()eq-userid के बराबर करता है
उपयोगकर्ता आईडी के बराबर नहीं है ()ne-userid
उपयोगकर्ता या टीम के बराबर ()eq-useroruserteams
तार जैसे ()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

उदाहरण

वेब एपीआई का उपयोग करके क्वेरी डेटा में उल्लिखित अधिकांश परिदृश्यों/उदाहरणों को पुनर्प्राप्ति बहु-रिकॉर्ड्स विधि का उपयोग करके प्राप्त किया जा सकता है। कुछ उदाहरण नीचे सूचीबद्ध हैं।

मूल पुनर्प्राप्त एकाधिक

यह उदाहरण खाता तालिका सेट क्वेरी करता है और पहले तीन खातों के लिए नाम गुण वापस करने के लिए और सिस्टम $top क्वेरी विकल्पों का $select उपयोग करता है:

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 के साथ मूल पुनर्प्राप्त एकाधिक

यह उदाहरण fetchXML का उपयोग करके निकाय से account क्वेरी करता है.

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> एकल-मान नेविगेशन प्रॉपर्टी का नाम है. फ़िल्टरिंग उद्देश्यों के लिए, एकल-मूल्यवान नेविगेशन संपत्ति के विशिष्ट मूल्य का भी उपयोग किया जा सकता है। हालाँकि, ऑफ़लाइन मोड में मोबाइल क्लाइंट के लिए, ये सिंटैक्स विकल्प समर्थित नहीं हैं, और एकल-मान नेविगेशन गुण नाम का उपयोग पुनर्प्राप्ति और फ़िल्टरिंग दोनों के लिए किया जाना चाहिए। साथ ही, नेविगेशन गुणों की शून्य से तुलना ऑफ़लाइन मोड में समर्थित नहीं है.

अधिक जानकारी: लुकअप गुण

यहां दोनों परिदृश्यों के लिए कोड उदाहरण दिए गए हैं:

ऑनलाइन परिदृश्य के लिए (सर्वर से कनेक्टेड)

यह उदाहरण खाता तालिका सेट क्वेरीज़ करता है और किसी विशेष प्राथमिक संपर्क वाले खातों के लिए नाम और primarycontactid गुण वापस करने के लिए और सिस्टम $filter क्वेरी विकल्पों का $select उपयोग करता है:

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
    }
);

मोबाइल ऑफ़लाइन परिदृश्य के लिए

यह उदाहरण खाता तालिका सेट क्वेरीज़ करता है और ऑफ़लाइन मोड में कार्य करते समय किसी विशेष प्राथमिक संपर्क वाले खातों के लिए नाम और primarycontactid गुण वापस करने के लिए और सिस्टम $filter क्वेरी विकल्पों का उपयोग करता $select है:

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 उपयोग उन खाता रिकॉर्ड के लिए और प्रॉपर्टी primarycontactid को पुनर्प्राप्त name करने के लिए कर सकते हैं, जिनमें एक प्राथमिक संपर्क है जो एक शर्त से मेल खाता है:

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
    }
);

किसी पृष्ठ में वापस जाने के लिए तालिकाओं की संख्या निर्दिष्ट करें

निम्न उदाहरण किसी पृष्ठ में प्रदर्शित किए जाने वाले रिकॉर्ड (3) की संख्या निर्दिष्ट करने के लिए पैरामीटर के उपयोग maxPageSize को प्रदर्शित करता है।

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

रिकॉर्ड्स के अगले सेट का अनुरोध करने के लिए अपने बाद के पुनर्प्राप्ति MultipleRecords कॉल में पैरामीटर के मान options के रूप में गुण में URL में क्वेरी nextLink भाग का उपयोग करें. मान में कोई और सिस्टम क्वेरी विकल्प न बदलें या जोड़ें। अधिक पृष्ठों के लिए प्रत्येक अनुवर्ती अनुरोध के लिए, आपको उसी मान maxPageSize का उपयोग करना चाहिए जिसका उपयोग मूल पुनर्प्राप्ति एकाधिक अनुरोध में किया गया था. साथ ही, दिए गए परिणामों या nextLink गुण के मान को कैश करें ताकि पहले पुनर्प्राप्त किए गए पृष्ठ वापस किए जा सकें।

उदाहरण के लिए, रिकॉर्ड का अगला पृष्ठ प्राप्त करने के लिए, हम URL के nextLink क्वेरी भाग को पैरामीटर में पास 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 एन्कोड करते हैं, तो URL में XML कुकी जानकारी एक त्रुटि का कारण बनेगी।

FetchXML उदाहरण (ऑनलाइन परिदृश्य)

निम्न उदाहरण किसी पृष्ठ में प्रदर्शित किए जाने वाले रिकॉर्ड (3) की संख्या निर्दिष्ट करने के लिए FetchXML के पैरामीटर के count उपयोग को प्रदर्शित करता है.

नोट

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
    }
);

यह उदाहरण तीन रिकॉर्ड प्रदर्शित करेगा और परिणाम सेट से संबंधित अधिक रिकॉर्ड होने पर अगले पृष्ठ के परिणामों को पुनर्प्राप्त करने के लिए एक 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"
         }
      }
   ]
}

नोट

ऑनलाइन परिदृश्य के समान, ऑफ़लाइन में संबंधित तालिकाओं से डेटा पुनर्प्राप्त करने के लिए $expand सिस्टम क्वेरी विकल्प का उपयोग करें। हालाँकि, कई से कई रिश्ते ऑफ़लाइन में समर्थित नहीं हैं।

मोबाइल ऑफ़लाइन परिदृश्य के लिए बहिष्कृत विधि

नोट

@odata.nextLink मोबाइल ऑफ़लाइन परिदृश्यों के लिए बहिष्कृत किया गया है। हालाँकि यह अभी भी मौजूदा अनुकूलन के लिए समर्थित है, लेकिन अब इसका उपयोग करने की अनुशंसा नहीं की जाती है।

ऑफ़लाइन $expand कार्रवाई एक @odata.nextLink एनोटेशन लौटाती है जिसमें संबंधित रिकॉर्ड की जानकारी प्राप्त करने के तरीके के बारे में जानकारी होती है. हम एक या अधिक अतिरिक्त Xrm.WebApi.offline.retrieveRecord अनुरोध (अनुरोधों) का निर्माण करने के लिए उस एनोटेशन के , और optionsentityTypeपैरामीटर का उपयोग करते idहैं। कोड का निम्नलिखित टुकड़ा यह कैसे करना है इसका एक पूर्ण उदाहरण प्रदान करता है:

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 का उपयोग करके एकाधिक रिकॉर्ड पुनर्प्राप्त करने के अधिक उदाहरणों के लिए, Web API का उपयोग करके क्वेरी डेटा देखें.

वेब API का उपयोग करके क्वेरी डेटा
Xrm.WebApi.retrieveRecord
एक्सआरएम.वेबएपीआई