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 का उपयोग करके mobile offline में प्रति विशेषता प्रकार समर्थित फ़िल्टर ऑपरेशन

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

उदाहरण

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

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

यह उदाहरण खाता तालिका सेट क्वेरी करता है और पहले तीन खातों के लिए नाम गुण वापस करने के लिए और सिस्टम $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 के साथ मूल पुनर्प्राप्त एकाधिक

यह उदाहरण 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 गुण वापस करने के लिए और सिस्टम $select क्वेरी विकल्पों का $filter उपयोग करता है:

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

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

निम्न उदाहरण दिखाता है कि प्रत्येक पृष्ठ तीन रिकॉर्ड प्रदर्शित करता है यह निर्दिष्ट करने के लिए पैरामीटर का उपयोग कैसे 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

रिकॉर्ड के अगले सेट का अनुरोध करने के लिए अपने अगले पुनर्प्राप्ति में पैरामीटर के मान options के रूप में गुण में URL में क्वेरी nextLink भाग का उपयोग करेंMultipleRecords कॉल. मान में कोई और सिस्टम क्वेरी विकल्प न बदलें या न जोड़ें. अधिक पृष्ठों के लिए प्रत्येक अनुवर्ती अनुरोध के लिए, उसी मान 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 उदाहरण (ऑनलाइन परिदृश्य)

निम्न उदाहरण दिखाता है कि प्रत्येक पृष्ठ तीन रिकॉर्ड प्रदर्शित करता है यह निर्दिष्ट करने के लिए 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 सिस्टम क्वेरी विकल्प का उपयोग करें. निम्न उदाहरण दिखाता है कि सभी खाता रिकॉर्ड के लिए संपर्क को पुनर्प्राप्त करने का तरीका कैसे है. संबंधित संपर्क रिकॉर्ड के लिए, आप केवल और फ़ील्ड fullname पुनर्प्राप्त करते contactid हैं:

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

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