CRM 2016 Web API

CRM SDK, Dynamics CRM, Web API

Jednym z najciekawszych „ficzerów” w najnowszej edycji wersji systemu Dynamics CRM jest nowy interfejs programistyczny, umożliwiający dostęp do danych i funkcjonalności systemu z poziomu kodu. Mowa oczywiście o dość głośno reklamowanym przez producenta CRM 2016 Web API. W tekście tym postaram się wyjaśnić Wam, dlaczego Web API jest obecnie rekomendowanym interfejsem dostępnym dla programistów JavaScript (zastępując tym samym wysłużoną „końcówkę” OrganizationData.svc) oraz (docelowo) również .NET.

ASP.NET Web API jest frameworkiem programistycznym stworzonym przez Microsoft, pozwalającym na tworzenie w prosty sposób usług sieciowych wykorzystujących wzorzec architektoniczny REST. Jest on obecny na rynku już od kilku lat i stopniowo zdobywa coraz większą popularność. Tworzenie web service’ów opartych o ASP.NET Web API jest stosunkowo proste, zwłaszcza dla programistów ASP.NET MVC, z którego to twórcy Web API zapożyczyli wiele konceptów (Kontrolery, Routing, itp.). Niektórzy twierdzą wręcz, że Web API to po prostu ASP.NET MVC, pozbawione warstwy interfejsu użytkownika (osobiście uważam to za zbyt duże uproszczenie). Więcej informacji nt. omawianego frameworka oraz tego w jaki sposób w oparciu o niego budować usługi sieciowe znajdziecie pod adresem: http://www.asp.net/web-api. Tymczasem Microsoft postanowił zbudować nowy interfejs programistyczny zapewniający dostęp do danych i funkcjonalności systemu Dynamics CRM, właśnie w oparciu o Web API.

Jaka jest przewaga nowego interfejsu nad wysłużonym i przetestowanym w bojach OrganizationData.svc, który został zbudowany również jako usługa w architekturze REST? Po pierwsze, Web API działa w oparciu o najnowszą wersję protokołu OData (tzn. v4, w przeciwieństwie do OData v2, na którym oparte jest działanie poprzednika). Informacje nt. nowości wprowadzanych w tej wersji protokołu znajdziecie tutaj. Po drugie – zbiór operacji na systemie, które developerzy mogą wykonać za pomocą usługi, został w znaczący sposób rozbudowany w stosunku do web service’u OrganizationData.svc, który tak naprawdę poza standardowym „CRUD-em” nie oferował dużo więcej. Za pomocą CRM Web API możemy budować zapytania korzystając m.in. z języka FetchXML lub widoków na dane zbudowanych wcześniej w systemie, decydować o limicie zwracanych rekordów, policzyć ilość zwracanych rekordów za pomocą operatora „count” (w końcu), zwracać informacje o obiektach powiązanych, tworzyć i usuwać relacje między encjami, uruchamiać operacje „batchowe” oraz funkcje i akcje systemowe (więcej o nich w kolejnym akapicie).

Właśnie możliwość uruchamiania akcji systemowych oraz funkcji stanowi jedną z podstawowych przewag Web API nad poprzednikiem. Zgodnie z definicją Microsoftu – funkcje CRM są to operacje pozwalające na pobieranie danych, ale jednocześnie takie, które nie modyfikują danych w systemie. Przykłady takich operacji to: CalculateTotalTimeIncidentRequest, WhoAmIRequest lub RetrieveProductPropertiesRequest (szczegółową listę dostępnych funkcji znajdziecie na stronie Web API Function Reference). W związku z powyższym, do wykonywania ww. operacji nie musimy już używać usługi CRM OrganizationService i zapytań w formacie SOAP (co, jak wiadomo, z poziomu kodu JavaScript była często, delikatnie mówiąc, kłopotliwe). Akcje CRM pozwalają na modyfikację danych w systemie. Przykłady tego typu requestów to z kolei: AddItemCampaignRequest, CloneContractRequest lub CloseQuoteRequest (pełną listę znajdziecie tutaj). Dodatkowo interfejs pozwala na uruchamiania customowych requestów (po polsku: przepływów pracy o typie „akcja”), stworzonych przez developerów lub administratorów systemu. Jak dla mnie jest to świetna sprawa, która prowadzi do tego, że wzorcowi programistycznemu „crm-command”, opartemu na pluginie, mówimy: „baj, baj!”.

Szczegółowe informacje nt. możliwości oferowanych przez interfejs CRM Web API znajdziecie pod adresem: https://msdn.microsoft.com/en-us/library/mt607901.aspx.

Ostatnią kwestią, o której chciałbym wspomnieć, jest możliwość korzystania z interfejsu Web API z poza zasobów sieciowych. W związku z powyższym, omawianej usługi sieciowej możemy używać z poza bibliotek zarejestrowanych w systemie Dynamics CRM.

Tworzymy własną aplikację SPA i chcemy skorzystać z danych w systemie CRM? Za pomocą Web API jest to jak najbardziej możliwe.

Własna aplikacja .NET? Nie ma problemu (o ile problemem nie jest dla kogoś używanie obiektu HttpClient lub modelu encji w formacie EDMX).

Jakikolwiek inny język programowania? O ile rozumie on protokoły OData i Json, nie powinno być z tym problemu.

W przypadku CRM-a w wersji On-Line lub IFD (Internet-Face Deployment), rzecz jest nieco bardziej skomplikowana z uwagi na wymaganą rejestrację aplikacji zewnętrznej w Azure Active Directory oraz konieczność wykorzystywania bibliotek Azure Active Directory Authentication Libraries lub adal.js, ale w dalszym ciągu jak najbardziej możliwa.

Na koniec informacja o tym, czy i kiedy powinniśmy używać nowego interfejsu CRM Web API. Po pierwsze – obowiązkowo przy tworzeniu zasobów sieciowych dla systemu CRM 2016. „Stara” usługa REST (tj. OrganizationData.svc) została w tym momencie oznaczona jako „deprecated” (w systemie obecna jest jedynie ze względu na wsteczną kompatybilność), jej dokumentacja została usunięta w najnowszej wersji CRM SDK a Microsoft między wierszami wspomina, że może ona zniknąć zupełnie w kolejnych release’ach systemu. Systemy CRM, aktualizowane ze starszych wersji do wersji 2016, również docelowo powinny mieć przepisany kod zasobów sieciowych w taki sposób, aby korzystał on z nowego interfejsu.

W przypadku programów .NET temat jest nieco bardziej skomplikowany. Web Service OrganizationService, udostępniający dane w formacie SOAP, pozostaje na razie w pełni wspieraną częścią systemu. Biorąc jednak pod uwagę informacje płynące z Redmond (plany, które zakładają ujednolicenie sposobu dostępu do danych i funkcji systemu CRM właśnie za pomocą Web API) oraz ogólnoświatowe trendy (odejście od standardów SOAP/XML, na rzecz OData/Json) – być może powinniśmy rozważyć właśnie użycie „końcówki” CRM Web API budując kolejną .NET-ową aplikację komunikującą się z CRM-em…

Total Views: 894 ,

2 comments

Comments are closed.