SDK 4.0.12 – kolejna rewolucja!
Maj 15, 2010 3 komentarzy
Zazwyczaj informowałem o nowych wersjach SDK za pomocą krótkiego opisu. W przypadku CRM SDK 4.0.12 opis nie może być krótki. Takie SDK u innych producentów systemów CRM nazywałoby się “major platform upgrade” i kosztowałoby tyle, co kolejna wersja systemu. SDK 4.0.12 to zmiana spojrzenia na platformę Microsoft Dynamics CRM! To również totalne przełączenie na koncepcję xRM! Ja osobiście jestem w szoku
. Nowe SDK przygotowuje nas po prostu do gładkiego przejścia do CRM 5 i daje już teraz dostęp do funkcjonalności SDK CRM 5.
David Jennaway już sporo opisał na swoim blogu, ale myślę, że można by napisać ciągle więcej o tej rewolucji po polsku. Tak więc… ;P:
SDK 4.0.12 wprowadza pojęcia “Advanced Developer Extensions” czyli “Zaawansowanych rozszerzeń programistycznych”, które technicznie nazwane są po prostu xRM’em. W skrócie polegają na tym, że możemy korzystać z platformy Dynamics CRM w zupełnie nowy sposób. I tak:
- nowe SDK pozwala na korzystanie z danych w Dynamics CRM za pomocą LINQ!!! Niech ten piękny kod powie sam za siebie:
var marketingListsWithCalculations =
from marketingList in crm.lists
select new { marketingList.listname, Cost = marketingList.cost + 100 }; - nowe SDK pozwala na używanie natywnych typów .NET!!! W tym typów nullowalnych (o których nota bene pisałem ostatni projekt w szkole
), czyli np. short? a nie short, dzięki czemu unikamy konieczności ustawiania IsNullSpecified - możemy budować źródła danych za pomocą klasy DataContext
- nowe SDK dostarcza narzędzie CrmSvcUtil, które pozwala budować lokalne i silnie typowane odzwierciedlenia bazy CRM, czyli klasy reprezentujące obiekty i DTO (Data Transfer Object). Dzięki temu można pisać kod oparty o LINQ
- nowe SDK daje wsparcie dla WCF! poprzez generowanie klas kontekstowych za pomocą CrmSvcUtil
- z nowym SDK możemy robić tzw. batch updates!!! To z kolei znaczy, że nie musimy już robić tysiąca wywołań Update(). Zamiast tego możemy modyfikować dane “lokalnie”, cache’ować je i dopiero za jednym wywołaniem aktualizować wszystkie na raz! Tutaj przykład:
contact.Email emailaddress1 = "janko@x.com";
contact.contact_customer_accountsParentCustomerAccount = account;
contact1.Firstname firstname = "Jakub";crm.UpdateObject(contact);
crm.UpdateObject(contact1);// zapisywanie do bazy
crm.SaveChanges();
- nowe SDK pozwala pobierać obiekty powiązane za pomocą gotowych metod. Dzięki temu zamiast budować QueryExpression i podawać GUID’y możemy po prostu wywołać metodę GetRelatedEntities()
- nowe SDK daje zupełnie nowe możliwości budowania relacji między obiektami z poziomu kodu (poprzez metodę SetLink() albo aktuzalizację klucza obcego). Wystarczy zerknąć na przykłady poniżej, żeby zobaczyć dlaczego mówię o rewolucji
:
crm.SetLink(contact, "contact_customer_accounts", account);
crm.SaveChanges();
albo:
contact.contact_customer_accounts = account;
crm.UpdateObject(contact);
crm.SaveChanges();
- nowe SDK zawiera informacje o budowaniu tzw. Visual Charts, czyli dynamicznych wykresów z danych w CRM. W CRM 5 wykresy te będą mogły być wyświetlane na listach rekordów, aktualnie udostępnia je w ograniczonej postaci tylko CRM Online R4.
- nowe SDK zawiera zupełnie nowe rozdziały o uwierzytelnianiu w modelach serwer-serwer i impersonacji
- nowe SDK zawiera mnóstwo nowych rozdziałów, w tym rozdziały opisujące dokładnie dlaczego należy korzystać z DynamicEntity, z klasy IsvReadiness i kilkunastu innych
- nowe SDK zawiera rozdziały o dobrych praktykach w pisaniu zewnętrznych aplikacji korzystających z CRM i o sugestiach związanych z wydajnością takich aplikacji
Na razie nikt nie wie, czy ukaże się CRM SDK 4.0.13. A to dlatego, że 4.0.12 zbliża nas wielkimi krokami do CRM 5. Już teraz Microsoft przyzwyczaja programistów do rozwiązań, które w gotowej platformie zobaczymy za kilka miesięcy. SDK 4.0.12 to jest coś pięknego. To dla takich chwil warto kochać Dynamics CRM’a! I w takich chwilach wiem, czemu kocham MS a nie Google’a, który za major update uważa nowy kształt guzika “szukaj”
.
PS. SDK 4.0.12 jest do ściągnięcia tutaj: http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en

Wydaje mi się, że wersji 13 nie będzie bo MS nie korzysta z tej liczby przy innych produktach
Nie wiadomo jednak czy ta konwencja ma zastosowanie i tutaj
Nowe SDK faktycznie wprowadza wiele nowości, w tym chyba największą – natywne wsparcie dla LINQ – dostępne wcześniej jedynie jako komercyjne rozwiązania firm trzecich oraz jakieś tam darmowe półprodukty.
Nie ma jednak róży bez kolców. Warto wspomnieć choćby o kilku z nich:
- Implementacja LINQ tłumaczy zapytania na wywołania standardowych CRM’owych web serwisów. Wynikają z tego ogromne ograniczenia, jak choćby brak możliwości “selekcenia” wartości z encji “zjoinowanych”.
Przyznam, że jak przeczytałem o wsparciu LINQ to była to pierwsza zaleta jaka przyszła mi do głowy, a tu niestety d*pa.
Samo pisanie zapytań w formie LINQ zamiast QueryExpression, czy FetchXML jest przejemnie, ale nic ponad to. Parę linijek kodu mniej i tyle. Dla wprawnego klepacza kodu nie jest to wielka zaleta.
- Oficjalnie, według dokumentacji LINQ może być używany tylko w rozwiązaniach zewnętrznych. Bez manipulacji w miejscach gdzie nie powinno się manipulować nie użyjemy tego w pluginach, customowych przepływach itp.
W skrócie – początkowo się zachwyciłem. Po ochłonięciu i poznaniu szczegółów doszedłem jednak do wniosku, ze to bardziej bajer niż rewolucja.
Akurat masz rację tutaj
MS (ani ja) nie mówi na razie, że do CRM’a da się dostać bezpośrednio przez LINQ. Oczywiście buduje się DataContext, wszystko jest jak w LINQ, ale na poziomie platformy mamy ograniczenia FecthXML’a oraz aktualnych web services, które nie pozwolą zrobić selecta z kolumn z encji połączonych JOIN’em. I wbrew obiegowej opinii, jaką słyszałem ostatnio, LinkEntity NIE służy do tego
.