CRM 2011 – stwórzmy sobie konto …

Pierwsze spojrzenie na usługi już za nami – trzeba zacząć z nich korzystać. Na pierwszy ogień idzie nowość w CRM2011 czyli Organization.svc, która to dostępna jest pod adresem:

Aby móc z niej skorzystać zapewne sobie pomyślisz “ok – to jest WCF więc po prostu dodam sobie referencję do usługi w VS i będzie ok” – tak – będzie ok, ale nie do końca. Wygeneruje się poprawna namiastka w VS, ale będzie ona bardzo dziwnie wyglądać. Obiekty nie będą dziedziczyć po odpowiednich klasach, trzeba będzie korzystać z pliku konfiguracyjnego, aby poprawnie definiować ABC WCF wymaganego przez usługi – można tak pracować, ale nie trzeba …. na szczęście – jest o wiele więcej ciekawszych rzeczy niż walka z plikiem konfiguracyjnym.

Spróbujmy następującego podejścia:

  1. Pobierzmy SDK dla CRM 2011 Beta ze strony: Microsoft Dynamics CRM 2011 Software Development Kit (SDK)  (* tutaj uwaga – ostatnio pobierałem SDK, które NIE DZIAŁAŁO poprawnie – szczególnie narzędzia opisane niżej)
  2. Rozpakujmy SDK do dowolnej lokalizacji
  3. Sprawdźmy zawartość katalogu sdk\bin i zwróćmy uwagę na dwa elementy:
    1. microsoft.xml.sdk.dll – jeśli w VS przed dodaniem referencji do usługi dodamy referencję do tej DLL to klasy namiastki będą dziedziczyć po Entity – nowa klasa bazowa dla klas takich jak Account (w CRM 4 było to DynamicEntity czy też BusinessEntity)
    2. CrmSvcUtil.exe – nazwa tego narzędzia wskazuje, że mamy do czynienia z czymś co ma coś wspólnego z SvcUtil znanym z WCF. Tak, to prawda – jest to narzędzie specjalne zrobiona dla CRM, które wygeneruje nam ładną namiastkę z metadanych CRM. Dzięki temu co jest wynikiem działania tego narzędzia (plik *.cs) możemy dołączyć do elementów projektu namiastkę CRM (Add Existing Item w VS).

Mając namiastkę usługi CRM oraz referencję do biblioteki microsoft.xml.sdk.dll możemy napisać nasz pierwszy kod:Nowy obraz (8) Co robi ten kod ? Tworzy nam instancję usługi, która chce połączyć się do organizacji przekazywanej w URL – element <organization>. Nie musimy tutaj tworzyć wcześniej znany token, w którym wskazywaliśmy, gdzie chcemy nawiązać połączenie. Autentykacja użytkownika następuje na podstawie jego aktualnego konta – stąd ustawienie ClientCredential na DefaultNetworkCredentials – można tutaj wskazać przy pomocy loginu oraz hasła inne konto, którym chcemy się zalogować.

Co jest jeszcze ważne – ten kod nie pozwoli nam korzystać z klas takich jak Account – wszystko z powodu tzw. wczesnego wiązania co jest związane z procesem serializacji oraz deserializacji wiadomości przesyłanych do/z usługi CRM. Aby móc w pełni korzystać z dobrodziejstw CRM musimy wpisać następujący kod:

_client.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());

Dzięki temu możemy dalej korzystać z kodu, który będzie działać:

Account _test = new Account { Name = "test" };
_client.Create(_test);

Klasa: OrganizationServiceProxy jest dostępna w DLL: microsoft.xml.sdk.dll – jest o wiele fajniejsza niż klasa, która byśmy dostali ze zwykłej namiastki w VS :)

Jest jeszcze jedna ważna sprawa. Usługi pozwalają na to, że będziemy mogli korzystać z CRM nie tylko z serwera, gdzie jest on zainstalowany. Jednakże jest tutaj mały problem. Aby korzystać z usług CRM (tych nowych) należy mieć na maszynie klienckiej zainstalowany Windows Identity Foundation, który dostępny jest dla Windows Vista, 7, Server 2008. Inne maszyny nie są wspierane.

Windows Identity Foundation jest dostępny pod adresem: http://msdn.microsoft.com/en-us/evalcenter/dd440951.aspx