Разработка
19
Сен
3

CrmRestKit

CrmRestKit это фреймворк, который позволяет упростить разработку CRUD-операций через REST Веб-сервис.

Поддерживаются следующий операции (как синхронные, так и асинхронные):

  • Retrieve;
  • RetrieveMultiple;
  • Create;
  • Update;
  • Delete.

Для ее использования Вам потребуется загрузить в CRM в качестве Веб-ресурсов следующие библиотеки:

Также их потребуется подключить ко всем формам, где будет использован данный фреймворк.

Сам CrmRestKit использовать довольно просто:

  • Качаем CrmRestKit и загружаем в CRM в качестве Веб-ресурса;
  • … затем этот Веб-ресурс подключаем к нужной форме;
  • И пишем код для вызова функций этого фреймворка:
    • Создание записи:
      var contact = CrmRestKit.Create('Contact', { FirstName: 'Foo', LastName: 'Bar' });
      
    • Получение записи:
      CrmRestKit.Retrieve('Contact', contact.ContactId, ['ContactId', 'ParentCustomerId'], function (contact) {
          var contactId = contact.ContactId;
          // ...
      });
      
    • Получение множества записей:
      var columns = ['ContactId'];
      var filter = "startswith(FirstName, 'Foo') eq true ";
      var collection = CrmRestKit.RetrieveMultiple('Contact', columns, filter);
      
      for (var i = 0; i < collection.results.length; i++) {
          var contactId = collection.results[i].ContactId;
      }
      
    • Получение множества записей пакетами:
      var columns = ['ContactId'];
      var filter = "startswith(FirstName, 'Foo') eq true ";
      
      var collection = CrmRestKit.RetrieveMultiple('Contact', columns, filter);
      
      for (var i = 0; i < collection.results.length; i++) {
          var contactid = collection.results[i].ContactId;
          // ...
      }
      
      if (collection.next) {
      
          // Загрузка следующий 50 записей
          var nextCollection = collection.LoadNext();
      }
      

      P.S. REST веб-сервис CRM 2011 за раз возвращает максимум 50 записей 🙂

    • Обновление записи:
      CrmRestKit.Update("Contact", contact.ContactId, contact, function (contactid) {
          var id = contactid;
          //...
      });
      
    • Удаление записи:
      var columns = ['ContactId'];
      var filter = "startswith(FirstName, 'Foo') eq true " + "&$top=1";
      var first = CrmRestKit.RetrieveMultiple('Contact', columns, filter).results[0];
      
      CrmRestKit.Delete('Contact', first.ContactId);
      
  • А вот разница между синхронным и асинхронным запросом (получение множества записей):
    • Синхронный:
      var columns = ['new_attributeId', 'new_attributeName'];
      var filter = "new_attributeName eq 'WOW'";
      var collection = CrmRestKit.RetrieveMultiple('EntityName', columns, filter);
      
      if (collection != null && collection.results != null && collection.results.length > 0) {
          var valId = "{" + collection.results[0].new_attributeId + "}";
          var name = collection.results[0].new_attributeName;
          var attribute =Xrm.Page.getAttribute("new_attribute1");
          attribute.setValue([{ id: valId, name: name, entityType: "EntityName"}]);
      }
      
    • Асинхронный:
      var columns = ['new_attributeId', 'new_attributeName'];
      var filter = "new_attributeName eq 'WOW'";
      
      CrmRestKit.RetrieveMultiple('EntityName', columns, filter, function (collection) {
          if (collection != null && collection.results != null && collection.results.length > 0) {
              var valId = "{" + collection.results[0].new_attributeId + "}";
              var name = collection.results[0].new_attributeName;
              var attribute =Xrm.Page.getAttribute("new_attribute1");
              attribute.setValue([{ id: valId, name: name, entityType: "EntityName"}]);
          }
      });
      



Комментарии (3)
  • Greg 19.09.2011

    Спасибо. Полезная вещь. Но не могу разобраться как в фильтр передать GUID. Еслия хочу получить все строки заказа для данного заказа к примеру? Заранее спасибо.

  • slivka_83 19.09.2011

    Сам я этой библиотекой досконально не разбирался, но без этой библиотеки записи по GUID’у фильтруются так (может это натолкнет Вас на мысли):

    http://<CRM Address>/CRM/XRMServices/2011/OrganizationData.svc/AccountSet?$filter=parentaccountid eq <guid>
    

    или так:

    http://<CRM Address>/CRM/XRMServices/2011/OrganizationData.svc/AccountSet(guid'<guid>')
    
  • Greg 19.09.2011

    Спасибо. я нашёл ответ.

    var filter = «parentaccountid/Id eq guid'» + Xrm.Page.data.entity.getId() + «‘»;

    После имени поля необходимо поставить /Id

*

code