Делите путем


ретриевеМултиплеРецордс (референца клијентског АПИ-ја)

Преузима збирку табела записа.

Синтакса

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

Параметре

Име Тип Потребно Опис
entityLogicalName String Да Табела логичко име записа које желите да преузмете. На пример: account
options String Не ОДата опције системског упита или ФетцхXМЛ упит за преузимање података. Погледајте опције
maxPageSize Број Не Наведите позитиван број који указује на број записа табеле који ће бити враћени по страници. Ако не наведете овај параметар, вредност је подразумевана на максимално ограничење од 5.000 записа за стандардне табеле, 500 за еластичне табеле.

Ако је број записа који се преузимају већи од maxPageSize наведене вредности или максималног ограничења за тип табеле, колона nextLink у враћеном објекту обећања ће садржати везу за преузимање записа.
successCallback Function Не Функција за позивање када се преузму записи табеле. Погледајте повратну вредност
errorCallback Function Не Функција за позивање када операција не успе. Објекат са следећим особинама је прошао:
- errorCode:Број. Код грешке као позитиван децимални број. На пример, код грешке документован као 0x80040333 ће бити враћен као 2147746611.
- message:Ниске. Порука о грешци која описује проблем.

Опције

Подржане су следеће опције системског упита $select: , $top, , $filter$expand, и $orderby.

Користите опцију системског упита $expand да бисте контролисали који се подаци из повезаних табела враћају. Ако укључите само име особине навигације, добићете све особине за сродне записе. Можете ограничити особине враћене за сродне записе користећи опцију системског упита $select у заградама иза имена особине навигације. Користите ово и за навигацијске особине са једном вредношћу и за колекцију . Имајте на уму да за офлајн подржавамо само угнежђену $select опцију $expand унутар .

Да бисте одредили ФетцхXМЛ упит, користите колону fetchXml да бисте одредили упит.

Белешка

Увек морате да користите опцију системског упита $select да ограничите особине враћене за запис табеле укључивањем листе имена особина раздвојених зарезима. Ово је важна најбоља пракса перформанси. Ако особине нису специфициране коришћењем $select, све особине ће бити враћене.

Ви одредите опције упита почевши од ?. Такође можете одредити више опција системског упита користећи & да раздвојите опције упита.

Када специфицирате ОДата низ упита за options параметар, упит треба да буде кодиран за специјалне знакове.

Када специфицирате ФетцхXМЛ упит за options параметар, упит не би требало да буде кодиран.

Погледајте Примери да видите како можете дефинисати параметар options за различите преузимање више сценарија.

Повратна вредност

На успех, враћа објекат обећања на следећим successCallback својствима:

Име Тип Опис
entities Низ ЈСОН објеката Сваки објекат представља преузете запис табеле који садржи колоне и њихове вредности као key: value парове. ИД записа табеле се преузима подразумевано
nextLink String (опционо) Ако је број записа који се преузимају већи од вредности наведене у параметру maxPageSize у захтеву, ово враћа УРЛ да врати следећу страницу записа.
fetchXmlPagingCookie (опционо) За операцију засновану retrieveMultipleRecords на фетцхXмл-у са страничењем где је укупан број записа већи од вредности страничења, овај атрибут враћа пејџингов колачић који се може користити за наредну фетцхXмл операцију за преузимање следеће странице записа.

Неподржани типови атрибута за опције упита ОДата у Мобиле Оффлине

Следећи типови колона нису подржани када се ради операција Xrm.WebApi.retrieveMultipleRecords са опцијама низа упита ОДата (на пример, $select и $filter) у мобилном оффлине режиму. Требало би да користите ФетцхXМЛ ако тип атрибута са којим треба да радите је у овој листи неподржаних типова атрибута.

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

Неподржане функције у Мобиле Оффлине

Следеће функције нису подржане у Мобиле Оффлине:

  • Функције груписања и агрегације

Подржане операције филтрирања по типу атрибута у Мобиле Оффлине користећи ФетцхКСМЛ

Следеће операције су подржане за све типове атрибута када се ради са ФетцхКСМЛ:

  • Једнако ( eq)
  • Није једнако ( neq)
  • Билтен ( null)
  • Није нула ( not-null)

Следећа табела наводи више операција подржаних за сваки тип атрибута:

Тип атрибута Подржане операције
БигИнт , Децимални, Дупли, Цео број Веће од ( 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)
Једнако ИД корисника ( eq-userid)
Није једнако ИД корисника ( ne-userid)
Новац Веће од ( gt)
Веће од или једнако ( gte)
Мање од ( lt)
Мање од или једнако ( lte)
У ( in)
Није у ( not-in)
Власник У ( in)
Није у ( not-in)
Једнако ИД корисника ( eq-userid)
Није једнако ИД корисника ( ne-userid)
Једнака кориснику или тиму ( eq-useroruserteams)
String Свиђа ми се ( 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)

Примери

Већина сценарија / примера наведених у подацима о упитима помоћу Веб АПИ-ја може се постићи коришћењем методе ретриевеМултиплеРецордс . Неки од примера су наведени у наставку.

Основно преузимање више

Овај пример упита скуп табела рачуна и користи $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
    }
);

Основно преузимање више са ФетцхКСМЛ

Овај пример упита 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> је име једновредне навигационе особине. За потребе филтрирања, може се користити и специфична вредност једновредне навигационе особине. Међутим , за мобилне клијенте у оффлине режиму, ове опције синтаксе нису подржане, а име особине навигације са једном вредношћу треба да се користи и за преузимање и за филтрирање. Такође , поређење својстава навигације са нулом није подржано у оффлине режиму.

Више информација: Својства претраге

Ево примера кода за оба сценарија:

За онлине сценарио (повезан са сервером)

Овај пример упитује скуп табеле налога и користи $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
    }
);

За мобилни оффлине сценарио

Овај пример упитује скуп табеле налога и користи $select$filter опције и системски упит да врати име и примарно контактид својство за рачуне који имају одређени примарни контакт када раде у оффлине режиму:

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 док сте онлине или оффлине да бисте преузели nameprimarycontactid и својство за записе рачуна који имају примарни контакт који одговара услову:

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

Користите део упита у УРЛ-у у особини nextLink као вредност за параметар options у вашем наредном позиву ретриевеМултиплеРецордс да бисте затражили следећи скуп записа. Немојте мењати или додавати више опција системског упита вредности. За сваки наредни захтев за више страница, требало би да користите исту maxPageSize вредност која се користи у оригиналном захтеву за преузимање вишеструког захтева. Такође , кеширајте враћене резултате или вредност нектЛинк особине тако да претходно преузете странице могу бити враћене.

На пример, да бисмо добили следећу страницу записа, проследићемо део упита 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 је УРИ кодирана. Ако УРИ кодирате вредност пре него што га пошаљете, информације о КСМЛ колачићима у УРЛ-у ће изазвати грешку.

ФетцхXМЛ пример (онлине сценарио)

Следећи пример демонстрира коришћење count параметра ФетцхXМЛ да одреди број записа (3) који ће бити приказани на страници.

Белешка

ФетцхXМЛ пејџинг колачић се враћа само за онлине retrieveMultipleRecords операције. (Xрм.WебАпи.онлине). Није подржан ван мреже.

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

Овај пример ће приказати три записа и вратити ФетцхXМЛ Пејџинг колачић за преузимање резултата следеће странице ако има више записа који припадају скупу резултата. Ево примера излаза из конзоле у алатима за програмере претраживача:

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

Користите опцију $ еxпанд системски упит у својствима навигације да бисте контролисали податке који се враћају из повезаних табела. Следећи пример показује како да преузмете контакт за све записе налога. За сродне записе о контактима, преузимамо само и contactidfullname:

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"
         }
      }
   ]
}

Белешка

Слично онлине сценарију, користите опцију $ еxпанд системски упит да бисте преузели податке из повезаних табела у офлајн-у. Међутим , многи-на-много односи нису подржани у офлајн.

Застарела метода за мобилни оффлине сценарио

Белешка

То @odata.nextLink је застарело за мобилне оффлине сценарије. Иако је још увек подржан за постојеће прилагођавања, не препоручује се да га више користите.

Оффлине $ еxпанд операција враћа напомену @odata.nextLink која садржи информације о томе како доћи до информација о повезаном запису. Ми користимо id, , и options параметар те напомене да конструишемо један или више додатних Xrm.WebApi.offline.retrieveRecordentityType захтева. Следећи део кода даје комплетан пример како то урадити:

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

За више примера преузимања више записа помоћу Веб АПИ-ја, погледајте Упит података помоћу Веб АПИ-ја .

Упитни подаци помоћу Веб АПИ-ја
Кстрм.ВебАпи.ретриевеРецорд
Српскохрватски / српскохрватски