Microsoft Silverlight i Dynamics CRM Online 8.1

Dynamics CRM, Silverlight, top5

Starsi* czytelnicy bloga pamiętają na pewno framework Microsoft Silveright. Omawiana technologia umożliwiała tworzenie dedykowanych, „bogatych” aplikacji (tzw. RIA – Rich Internet Applications) działających w oknie przeglądarki internetowej. Silverlight podobnie jak Adobe Flash wymagał instalacji specjalnej wtyczki do przeglądarki internetowej i w czasach CRM 2011 (tzn. przed inwazją bibliotek i frameworków tworzonych w języku JavaScript) był najpopularniejszą metodą rozszerzania standardowego interfejsu systemu Dynamics CRM.

Minęło 5 lat. Aktualnie Silverlight praktycznie zniknął z Internetu. Poza serwisami udostępniającymi streaming video mało kto o nim pamięta. W przypadku aplikacji opartych o platformę Dynamics CRM/XRM również został on praktycznie wyeliminowany. Jak się jednak domyślacie – nie wszędzie :). Na rynku istnieje jeszcze całkiem sporo systemów, w których kontrolki Silverlight przetrwały kolejne migracje i aktualizacje systemów i mają się dobrze do dzisiaj.

Właściwie, to miały się dobrze… Kilka dni temu komponent Silverlight, który był intensywnie wykorzystywany przez użytkowników jednego ze znanych mi systemów CRM, po prostu przestał działać. Na czym polegał problem? Do tej pory chcąc stworzyć kontrolkę SL uruchamianą wewnątrz formatki konkretnego rekordu CRM – z poziomu kodu C# odczytywaliśmy wartość jego identyfikatora w następujący sposób:

Guid objectId = new Guid(HtmlPage.Document.QueryString["id"]);

 

Niestety w najnowszej, używanej przez nas wersji OnLine systemu metoda ta przestała działać, co spowodowało masowy crash wszystkich komponentów SL w omawianym systemie.

Dlaczego tak się stało? W wersji systemu CRM on-premise (8.1.0.359 lub starsze) adres dostępny za pomocą właściwości HtmlPage.Document.DocumentUri wewnątrz kontrolki osadzonej na formatce rekordu CRM wyglądał następująco:

http://AdresSerweraCrm/Organizacja/_forms/read/page.aspx?create=False&etc=10014&id={2E1EE59E-EF7B-E611-80D0-00155D000A3D}&pagemode=iframe&theme=Outlook15White

Podłączając się debuggerem Visual Studio mogliśmy bez problemu odczytać wartość atrybutu „id”:

sl1

Niestety w najnowszej wersji systemu CRM Online coś się zmieniło. Adres URL dostępny z poziomu formatki Silverlight ma formę:

https://OrganizacjaCrm.crm4.dynamics.com/form/page.aspx?lcid=1045&themeId=f499443d-2082-4938-8842-e7ee62de9a23&tstamp=648568&updateTimeStamp=636095039100762842&userts=131196953286961697&ver=-891640877#create=False&etc=10016&id={4008DBB9-4486-E611-80DA-C4346BACCC44}&pagemode=iframe&theme=Outlook15White&counter=1475221838874

Powoduje to niestety, że wartość identyfikatora obiektu CRM nie jest już dostępna za pośrednictwem właściwości QueryString.

sl2

Do identyfikatora rekordu możemy dostać się za pomocą HtmlPage.Document.DocumentUri.Fragment. Niestety, ponieważ powyższy atrybut jest po prostu łańcuchem znaków musimy samodzielnie zadbać o wyekstrahowanie z niego wartości interesującego nas parametru.

string[] queryFragments = HttpUtility.UrlDecode(HtmlPage.Document.DocumentUri.Fragment);
foreach(var fragment in queryFragments.Split('&'))
{
   if (fragment.Contains("id"))
   {
      string id = fragment.Replace("id={", String.Empty).Replace("}", String.Empty);
      objectId = new Guid(id);
   }
}

Wszystko bardzo fajnie, tylko że Microsoft zapomniał poinformować kogokolwiek o tym, że jakaś zmiana w tym obszarze będzie miała miejsce. Testowana przez nas wersja buildu ma numer 8.1.0.512. Starsze wersje działały prawidłowo, tzn. „po staremu”. Prawdopodobnie w najbliższym czasie nastąpi więc wysyp zgłoszeń od klientów, które będą związane z nieprawidłowo działającymi komponentami stworzonymi w SL. Niestety takie podejście firmy odpowiedzialnej za stworzenie omawianej technologii jest tylko kolejnym jej gwoździem do trumny. I nikt nie ma na pewno wątpliwości, że trumna leży już dawno w ziemi i jest prawie cała pokryta piachem.

*jeżeli stworzyłeś kiedyś aplikację w Microsoft Silverlight, tzn. że wg. kryteriów rynku IT jesteś już stary, tzn. po trzydziestce 😉

Total Views: 499 ,