CRM 2011–Dashboard “Restrict cross-frame scripting”

W CRM 2011 wbudowana została nowa funkcjonalność, pozwalająca na tworzenie tzw. dashboard’ów dla użytkowników końcowych. Wszystko to ma na celu udostępnienie użytkownikom jak najbogatszego pakietu, który może być przez nich samych dostosowywany. Mając tę funkcjonalność dostępną “z pudełka” każdy może ustawić sobie jako panel startowy dowolny raport/wykres/listę – w zależności od upodobań.

Dashboard

W takiej tablicy można umieścić wykres, element iframe, listę czy też dowolny Web Resource. Jako element iframe można umieścić odnośnik do raportu, który zbudowany jest w organizacji i już od dawna wykorzystywany. Jednakże tutaj powstaje problem. Element iframe może mieć włączone zabezpieczenie związane z cross-site scripting. Użytkownik biznesowy nie może tej opcji wyłączyć:

image

Jest to dobre podejście, gdyż jeśli każdy użytkownik by miał możliwość dodawania linków na tablicy do dowolnego źródła w Internecie to by miało to wpływ na bezpieczeństwo systemu CRM – po co ryzykować pomyślał Microsoft i tę opcję wyłączył. Jednak co z przypadkiem, który opisałem wyżej – co kiedy chcemy w CRM pokazać raport, który organizacja od dawna wykorzystuje i jest do niego przyzwyczajona tak bardzo, że brak jego w CRM to poważna strata ?

Na szczęście tablice tworzone przez Administratora z poziomu Solution pozwala na wyłączenie opcji cross-site scripting:

cross-site scripting

Wierzymy, że administrator jest świadomy tego co robi :)

CRM 2011–wysyłanie widomości email–zatwierdzanie adresów email

Jeśli spojrzymy sobie na dwa aspekty nowego CRM: Ustawienia systemowe oraz formatkę użytkownika to zobaczymy tam dwie nowe rzeczy, których nie było w CRM 4.0:

E-mailApprove/Reject E-mail

Obie rzeczy dotyczą wysyłki wiadomości email z wykorzystaniem Email routera. W ustawieniach systemowych można wymóc, aby CRM e-mail router procesował tylko te wiadomości email, których nadawcy mają zatwierdzony przez administratora adres. Drugi zrzut ekranu pokazuje dwa przyciski na formatce użytkownika “Approve E-mail” oraz “Reject E-mail”. Przy ich pomocy administrator może zatwierdzić lub też odrzucić adres email przy pomocy, którego będzie odbywać się wysyłka wiadomości email.

Jeśli użytkownikowi ustawimy opcję dostępu do poczty email jako E-mail Router to jeśli jego adres mailowy nie zostanie zatwierdzony zostanie zaprezentowany na jego formatce następujący komunikat:

Informacja

CRM 2011–Pluginy i namiastka z CrmSvcUtil

Korzystamy sobie z usługi sieciowej CRM 2011, budujemy własną strukturę obiektów, generujemy z tego namiastkę, wrzucamy wszystko do pluginu i …. patrzymy na błąd:
Unable to cast object of type 'Microsoft.Xrm.Sdk.Entity' to type 'Netwise.Crm.Sdk.Account'.
I co teraz ? Czy wszystko muszę przerobić na Entity i bawić się indekserami ? To tylko jedno podejście. Inne podejście, które może nas uchronić od tego pierwszego to wykorzystanie generycznej metody ToEntity<>. Zamiast kodu:
return (Account)service.Retrieve(Account.EntityLogicalName, accountId, new ColumnSet(Attributes.accountnumber));
Napiszemy kod:
return service.Retrieve(Account.EntityLogicalName, accountId, new ColumnSet(Attributes.accountnumber)).ToEntity<Account>();
Wtedy nasza początkowa praca nie pójdzie na marne i nie będziemy oglądać wyjątku.
Z kolei jak chcemy tworzyć obiekty przy pomocy IOrganizationService w pluginie nie musimy korzystać z Entity tylko możemy korzystać z wygenerowanych klas. Przykładowo tworząc nowego klienta zamiast pisać kod:
service.Create(_account);
Musimy zrobić:
service.Create(_account.ToEntity<Entity>());
W przypadku pierwszego kodu otrzymamy podobny błąd o rzutowaniu Account na Entity. Drugi kod zadziała bez problemu Uśmiech

CRM 2011 RC–czas ma znaczenie :)

Przesiadka ze środowiska Beta na RC spowodowała, że uruchomienie kodu narzędzia korzystającego z usług CRM 2011 zakończyło się następującym komunikatem błęduZmieszanie

System.ServiceModel.Security.MessageSecurityException : An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. System.ServiceModel.FaultException : An error occurred when verifying security for the message.

Szukam powodu tego błędu: generuję namiastkę dla wersji RC, przebudowuję projekt, itd, a okazuje się, że CRM nie ma z tym nic wspólnego – błąd ten jest związany z WCF. Wynika z tego, iż maszyna, na której znajduje się serwer przez przypadek nie posiada poprawnie ustawionego czasu :) – naprawienie tej prostej zależności rozwiązało problem narzędzia i przesiadki na nową wersję.

CRM 2011–skrypty i FormType

Pisząc skrypty JScript do obsługi zdarzeń OnLoad, OnSave czy też OnChange możemy korzystać również z dobrze znanej w CRM 4 referencji do crmForm. To podejście zostało pozostawione w CRM 2011 w celu zachowania kompatybilności. Zaleca się jednak korzystanie z referencji do Xrm.Page.

Pisząc jeden skrypt potrzebowałem informacji na temat tego jakiego typu formatka jest prezentowana. W CRM 4.0 wystarczyło skorzystać z następującego kodu: crmForm.FormType. W CRM 2011 jest inaczej (oczywiście jeśli będziemy korzystać z Xrm.Page). W CRM 2011 trzeba wykonać następujący kod: Xrm.Page.ui.getFormType(). Argumentem zwracanym przez tą metodę jest liczba całkowita, podobnie jak crmForm.FormType.

CRM–koncepcja 360 stopni

Nie raz można trafić na publikacje, które wskazują Dynamics CRM jak system, który pozwala na tzw. 360 view. Oznacza to, iż pracując z danymi klienta mamy w dowolnym momencie szybki dostęp do wszystkich danych powiązanych z klientem. Skąd to się wzięło ? Jak wiele rzeczy mogło to zostać zaobserwowane i przeniesione na bity w naturze. Przemierzając ostatnio Tanzanię zaobserwowałem następujące 360 view:

widok 360 stopni

Jednakże tutaj celem takiego widoku jest przetrwanie, zwierzaki chcą monitorować konkurencję a nie dane klienta, aby nie zostać przez nich wyeliminowanym z rynku :)

CRM 2011–pierwsze spojrzenie na możliwości Silverlight

W poście poświęconych usługom nowego CRM wspomniałem o dwóch usługach dostępnych pod adresami:

  1. IOrganizationService - http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
  2. IDiscoveryService  - http://<servername>/<organizationname>/XRMServices/2011/Discover.svc

Jest tam jeszcze jedna, o której nie pisałem, a mianowicie http://<servername>/<organizationname>/XRMServices/2011/OrganizationData.svc

Właśnie z tej usługi korzystać należy, jeśli chcemy stworzyć coś fajnego, łącząc CRM z Silverlight czy też Ajax.

Co to jest za usługa ?

Jest to usługa oparta o protokół OData, zbudowana z wykorzystaniem WCF Data Service. Zasada działania tej usługi jest taka, że tworząc żądanie HTTP dostajemy w odpowiedzi dane w postaci feed’u. Po stronie klienta rezultat będzie przekonwertowany na obiekty :) Usługa, którą udostępnia CRM jest zbudowana w oparciu o architekturę REST (Representational State Transfer), które umożliwia dostęp do zasobów poprzez przypisane im unikalne URI. Architektura ta umożliwia wykonywanie operacji synchronicznych oraz asynchronicznych, a dzięki tej drugiej cesze może być w pełni wykorzystana przez Ajax bądź też Silverlight – osobiście bardziej mnie interesuje Silverlight ;)

Usługa jest alternatywą dla usług WCF, jednakże trzeba mieć na uwadze kilka ograniczeń, które ona posiada:

  1. Przy jej pomocy można tylko wykonywać operacje CRUD (Create, Retrieve, Update, Delete) – brak wsparcia dla wiadomości, które wymagają wykorzystania wyłączenie metody Execute w przypadku korzystania ze standardowych usług WCF
  2. Uwierzytelnienie jest możliwe tylko w kontekście aplikacji, chociaż możliwe jest podanie nazwy użytkownika oraz hasła. Jednakże jeśli będziemy komponent Silverlight umieszczać na formatce CRM, to informacje o użytkowniku będą brane z elementu, w którym nasz komponent jest osadzony.
  3. Nie jest zaimplementowany pełny protokół OData – niektóre zapytania nie są możliwe do zrealizowania – więcej informacji w SDK

Jak sprawdzić jak to działa ?

np. wejdz na strone:  http://<servername>/<organizationname>/XRMServices/2011/OrganizationData.svc/AccountSet a w rezultacie otrzymasz listę 50 kont, które masz zdefiniowane w systemie w postaci np. takiej:

image

A jeśli interesuje Cię konkretne konto możesz się do niego dobrać przy pomocy adresu:

http://<servername>/<organizationname>/XRMServices/2011/OrganizationData.svc/AccountSet(guid'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')

W ten sposób “dobierać” się możemy do obiektów standardowych w CRM jak również do obiektów niestandardowych. Ważne jest aby w URI podawać informacje o obiekcie dokładnie, tzn. nawet wielkość liter ma znaczenie.

Sama usługa opisywana jest przez metadane, które dostępne są pod adresem tym samym co końcówka, ale ze specjalnym dodatkiem:

image

Jak wykorzystać te metadane ? O tym w kolejnym odcinku :)