Uprawnienia CRM (Create)

Każde wdrożenie Dynamics CRM wiąże się z konfiguracją ról. Idealne podejście to takie kiedy użytkownik otrzymuje minimalne uprawnienia jakie są mu potrzebne do pracy. Jednakże kiedy konfiguracja ról zmienia się wraz z życiem systemu, może dojść do sytuacji kiedy role konfigurowaną są “na czuja”, przywileje nadawane są “aby działało”.

Poniższy wpis dla niektórych może być powtórką z rozrywki a dla niektórych stanowić może podsumowanie wiedzy, którą posiada. O czym będzie ? Odpowiemy sobie na pytanie: Co oznacza w matrycy uprawnień uprawnienie Create? Czy aby utworzyć komuś rekord muszę mieć możliwość przypisania rekordu (Append, Append To) do użytkownika ? Czy aby zmienić właściciela muszę mieć uprawnienie przypisania rekordu do użytkownika ? Itd. Być może odpowiedź jest trywialna, ale jak pokazuje doświadczenie i przegląd gotowych wdrożeń – nie zawsze tak jest :).

Zacznijmy więc od początku – czym jest rola w Dynamics CRM ? Rola to zbiór uprawnień wraz z poziomem uprawnień. Uprawnienie określa co możemy zrobić w kontekście danej encji (np. tworzenie Kontaktu). Poziom uprawnień określa zakres działania uprawnienia (np. możemy czytać tylko te kontakty, których jesteśmy właścicielem lub też możemy czytać wszystkie z całej organizacji).

Dynamics CRM udostępnia następujące uprawnienia oraz poziomy uprawnień:

Uprawnienia Poziomy Uprawnień
  • Create
  • Read
  • Write
  • Delete
  • Append
  • Append To
  • Assign
  • Share
  • None
  • User
  • Business Unit
  • Parent/Child Business Unit
  • Organization

Dla jednej encji możemy zatem mieć baaaaardzo dużo możliwości ustawienia roli. Zacznijmy od prostego przypadku – chcemy nadać użytkownikowi uprawnienia do tego, aby mógł tworzyć rekordy encji Account dla innych użytkowników.

Uprawnienie Create samego nie można nadać – bo aby móc w interfejsie użytkownika Dynamics CRM zobaczyć SubArea Account należy mieć prawo odczytu. Ustalamy zatem, że rola ma “na dzień dobry” odczyt na poziomie jednostki biznesowej. Idąc dalej chcemy nadać uprawnienia do tworzenia w połączeniu z uprawnieniami dla encji SystemUser (poniższa tabela nie przedstawia wszystkich kombinacji):

Poziom

Opis

Uprawnienia Read dla encji SystemUser (pozostałe ustawione na None)

Rezultat

None Użytkownik nie będzie miał praw do tworzenia rekordów encji Account. Brak przycisku utworzenia nowego rekordu w Dynamics CRM n.d. n.d.
User Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. n.d. Niezależnie od ustawień poziomu uprawnień dla odczytu encji SystemUser próba zapisania kończy się komunikatem: brak uprawnień do wykonania tej akcji …
Business Unit Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. None Nie można odczytać użytkowników – nie można wybrać innego
Business Unit Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. Business Unit Próba kończy się sukcesem. Wskazać można tylko użytkowników ze swojej jednostki biznesowej
Business Unit Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. Parent/Child Business Unit
Organization
Dla użytkowników z tej samej jednostki biznesowej sukces

Dla użytkowników z jednostek podrzędnych próba zapisania kończy się komunikatem: brak uprawnień do wykonania tej akcji …
Parent/Child Business Unit Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. Parent/Child Business Unit Jeśli właściciel jest z jednostki podrzędnej próba kończy się sukcesem, ale występuje błąd bo chcemy odczytać Account, którego nie możemy odczytać bo uprawnienia Read mamy na poziomie swojej jednostki biznesowej.
Parent/Child Business Unit Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. Organization Jeśli właściciel jest z jednostki podrzędnej próba kończy się sukcesem, ale występuje błąd bo chcemy odczytać Account, którego nie możemy odczytać bo uprawnienia Read mamy na poziomie swojej jednostki biznesowej.

Jeśli właściciel jest z niepowiązanej jednostki biznesowej to próba kończy się komunikatem: brak uprawnień do wykonania tej akcji …
Organization Użytkownik ma prawo do tworzenia rekordów encji Account. Przycisk “New” jest widoczny w Dynamics CRM. Na formularzu pole Owner jest edytowalne. n.d. Próba kończy się sukcesem. Wskazać można tylko użytkowników, do których ma się prawo odczytu.

Wnioski: Uprawnienie Create daje możliwość stworzenia rekordu “komuś” – ten ktoś określany jest na podstawie tego jakich użytkowników możemy odczytać a nie do jakich użytkowników mamy uprawnienia Append To albo czy mamy uprawnienia Append na encji Account czy też nie. Minimalny zestaw uprawnień, na których powinniśmy się skupić to Read (dla encji SystemUser oraz Account) oraz Create (dla encji Account). Dodatkowo: nowy właściciel musi mieć co najmniej prawo do odczytu Account aby móc stać się właścicielem. Dynamics CRM nie pozwoli przypisać konta użytkownikowi, który nie ma do tej encji żadnych uprawnień – kiedy nie ma w roli lub kiedy jest dezaktywowany.

image 

Powyższa tabela przedstawia w formie kolorystycznej to co wcześniejsza tabela opisuje ;) Kolor żółty przedstawia sytuacje kiedy odpowiedzią na pytanie “czy zadziała” będzie odpowiedź “to zależy … jakiego użytkownika wybierzesz”.

Importowanie notatek

Jedną z rzeczy, które mi osobiście się podobają w CRM 2011 jest opcja importu danych z plików. Funkcjonalność ta, która jest oczywiście dostępna w wersji 4.0, tutaj nabrała nowego kształtu. Jest to narzędzie intuicyjne, proste w obsłudze (szczególnie przez użytkowników biznesowych) oraz posiadające duże możliwości.

To co chciałbym dzisiaj opisać to możliwość importu notatek, która posiadają dokument w formie załącznika. Na początku kilka słów o samych notatkach.

Encja annotation jest powiązana z większością standardowych obiektów w CRM. Może być też wykorzystywana w powiązaniu z encjami niestandardowymi. Dodając notatkę mamy możliwość wpisania notatki tekstowej oraz dołączenia do niej dokumentu. Zawartość dokumentu (jego body) jest w bazie CRM przechowywane jako łańcuch znaków zakodowanych w Base64, w kolumnie typu varchar(max). W czasie dodawania dokumentu CRM sam określa jaki jest rozmiar pliku, content type, itd i zapisuje te informacje w bazie CRM.

Jednakże dokument taki jest obarczony ograniczeniami CRM jeśli chodzi o rozmiar pliku jaki może być w nim przechowywany.

Dokumenty w postaci notatek mogą być importowane z wykorzystaniem standardowego mechanizmu importu w Dynamics CRM 2011. Aby to zrobić musimy przygotować następujące archiwum *.zip:

image

  • katalog o nazwie attachments, który zawierać będzie dokumenty, które chcemy dodać do CRM (ważne aby zwrócić uwagę na polskie znaki w nazwie pliku).
  • plik (np. csv lub txt), który przykładowo będzie zawierać następujące kolumny (większej liczby nie trzeba)
    • Tytuł – jest to wymagane w czasie tworzenia notatki
    • Opis – treść notatki, np. krótki opis dołączanego dokumentu. Nie jest to zwartość dokumentu.
    • Nazwa pliku – treść jaka będzie prezentowana w CRM jako link do dokumentu. Nie musimy tego wypełniać, jednakże w CRM zobaczymy zamiast prawdziwej nazwy pliku np. Untitled.txt
    • Nazwa dokumentu – nazwa dokumenty z katalogu attachments, który będzie do notatki przypisany. To musimy wskazać
    • Właściciel – nie musimy tego wskazywać, ale można tutaj określić kto ma być właścicielem notatki w CRM
    • Rekord powiązany – do jakiego rekordu chcemy dowiązać notatki – np. klient, kontakt, itp

Mając przygotowane takie archiwum można wykonać standardowy import. Jak już zostało to wcześniej zaznaczone w momencie importu danych z pliku, który został umieszczony w archiwum, Dynamics CRM będzie szukał w katalogu attachments plików określonych w kolumnie Nazwa dokumentu. Jeśli dokument nie zostanie znaleziony to notatka nie zostanie utworzona w CRM. Zostanie zarejestrowany błąd informujący to braku możliwości znalezienia odwołania do pliku.

Na co należy jeszcze zwrócić uwagę ? Na to, że nie należy wskazywać w pliku kolumny, w której określać będziemy typ pliku, jego rozmiaru, ,rozszerzenia, itd – wszystko to wykona za nas CRM – dzięki temu użytkownicy biznesowi nie przestraszą się tego narzędzia.

Dodatkowa rzecz to taka, iż importowane archiwum nie może przekraczać limitu jaki nałożony jest na importowany plik (ok 8MB). Jeśli chcemy wykonać import dużych plików lub dużej liczby małych plików to musimy przygotować się na konieczność tworzenia wielu archiwów.

Xrm.Utility.openEntityForm

Update Rollup 8 dla Dynamics CRM 2011 przyniósł meeeega fajną funkcjonalność JScript. Do tej pory aby, korzystając z JS, otworzyć formularz obiektu trzeba było zbudować odpowiedni URL a następnie wykorzystać metodę window.open(….).

Obecnie jest dostępna fajniejsza metoda polegająca na wywołaniu funkcji: Xrm.Utility.openEntityForm. Funkcja ta ma następujące możliwości:

  • Jeśli wykonany zostanie następujący kod: Xrm.Utility.openEntityForm(“account”); zostanie zaprezentowany formularz tworzenia rekordu encji account
  • Jeśli wykonany zostanie następujący kod: Xrm.Utility.openEntityForm(“account”, “<identyfikator klienta>”); zostanie zaprezentowany formularz wskazanego rekordu encji account.

Funkcja ta działa zarówno dla encji systemowych jak również dla encji niestandardowych. Wygląd formularza jest identyczny gdybyśmy otworzyli rekord z listy rekordów lub kliknęli przycisk Nowy w celu utworzenia nowego rekordu (nie jest prezentowane menu przeglądarki, nie jest wyświetlany komunikat o tym, że chcemy zamknąć okno przeglądarki kiedy chcemy zamknąć formularz, itd – same zalety :) ). Wystarczy tylko zainstalować UR8.

Publikowanie (niedużego) rozwiązania i … timeout :/

Kiedy serwery są obciążone dojść może do sytuacji kiedy próba publikacji lub importu rozwiązania w Dynamics CRM zakończy się niepowodzeniem. Dokładne sprawdzenie w logach CRM (/Program Files/Microsoft Dynamics CRM/Trace) uświadomi nas, że mamy do czynienia z timeout’em. Na szczęście CRM pozwala na modyfikację niektórych parametrów związanym z czasem wykonania operacji. Niestety niektóre z opisanych poniżej modyfikacji jest niewspieranych, ale niestety bez nich nie uda się problemu rozwiązać.

Pierwsze miejsce (wspierane) gdzie należy ustawić parametry to rejestr. W kluczu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM ustawić należy następujące klucze

  • OLEDBTimeout – określa wartość dla pojedynczego zapytania SQL. Wartość wyrażona w sekundach. Domyślnie 30 sekund
  • ExtendedTimeout – określa wartość dla ASP.NET. Wartość wyrażona w milisekundach. Domyślnie 1 000 000 milisekund
  • NormalTimeout – określa wartość dla SOAP. Wartość wyrażona w milisekundach. Domyślnie 300 000 milisekund

Jeśli to nie pomoże należy zmodyfikować plik web.config (niewspierane) znajdujący się w katalogu CRMWeb (u mnie: /Program Files/Microsoft Dynamics CRM/CRMWeb)

Zmienić należy wartość domyślną (300) parametru executionTimeout na inną – ja ustawiłem 3600 – sekund. Parametr ten określa po jakim czasie żądanie ASP.NET zostanie “zabite”.

Jeśli i to nie pomoże pozostaje nam ostatni parametr (niewspierane), który modyfikuje się w bazie MSCRM_CONFIG w tabeli DeploymentProperties. W tabeli tej szukamy rekordu, który w kolumnie ColumnName ma wartość SqlCommandTimeout

Wartość domyślna tego parametru to 30. Wartość wyrażona jest w sekundach.

CRM 2011–przenoszenie Plugin’ów

Jedną z wielkich zalet Dynamics CRM jest możliwość tworzenia pluginów. Nie jest to nowością w CRM 2011, ale w nowej wersji platformy mamy nowe możliwości “zabawy” z nimi.

Zabawa związana jest z przenoszeniem pluginów pomiędzy organizacjami. Plugin może być częścią rozwiązania w Dynamics CRM:

image

  1. Plugin-in Assemblies
  2. Sdk Message Processing Steps

Do solucji można dodać to, co wcześniej zarejestruje się przy pomocy Plugin Registration Tool (PRT). Niby oczywiste, ale nie zawsze jest oczywiste co się dzieje z krokiem (stepem) kiedy jest on uruchamiany w konktekście konkretnego użytkownika (inny niż Calling User) ? W momencie importu rozwiązania do organizacji szukany jest użytkownik o takiej samej pełnej nazwie (!!! a nie nazwie logowania do domeny). Jeśli nie zostanie znaleziony krok jest konfigurowany tak, aby uruchamiał się w kontekście Calling User. Informacja o tym jest logowana w czasie importu rozwiązania – dlatego warto weryfikować go za każdym razem kiedy wykonujemy import pluginów – gdyż wszelki błąd w konfiguracji objawi się zapewne dopiero kiedy “zwykli” użytkownicy zabiorą się za pracę w CRM.

Jeśli rejestrujemy Plugin, który będzie znajdować się w katalogu /assembly to przed zaimportowaniem rozwiązania musimy skopiować biblioteki do tego katalogu. Proces importu tego wymaga.

CRM + ( 2 x Outlook) = "Tylko jeden może być klientem synchronizacji ….”

Zapewne część osób, które korzystają z dodatku Outlook spotkały się z sytuacją kiedy w momencie synchronizacji danych z CRM pojawiał się komunikat podobny do tego:

You already have Microsoft Dynamics CRM for Outlook installed on another computer. Only one client computer per user can run the automated process that does bulk updates of outlook items with Microsoft Dynamics CRM Data. This client should be the computer that is most often online (such as a desktop computer) or the users primary computer. To change the Synchronizing client, on the CRM Menu, click options, and click the synchronizing tab

lub po polsku

Program Microsoft Dynamics CRM dla programu Outlook jest już zainstalowany na innym komputerze użytkownika. Tylko na jednym komputerze klienckim użytkownika można uruchomić automatyczny proces zbiorczej aktualizacji elementów programu Outlook na podstawie danych programu Microsoft Dynamics CRM. Klientem powinien być komputer, który częściej pracuje w trybie online (na przykład komputer stacjonarny, lub podstawowy komputer użytkownika. Aby zmienić klienta synchronizacji, w menu programu CRM kliknij polecenie Opcje, a następnie kliknij kartę Synchronizacja.

Inaczej może objawiać się takim komunikatem:

image

Co on oznacza ? Dodatek Outlook może pobierać dane z CRM tylko na jednej maszynie – o tym, na której decyduje sam użytkownik poprzez ustawienia dodatku, w zakładce Synchronizacja.

Jednakże mając odpowiedzieć na pytanie: “Jak żyć w takiej sytuacji, kiedy użytkownik korzysta z dwóch Outlooków ?” zacząłem sprawdzać co tak naprawdę jest synchronizowane pomiędzy CRM a Outlook – czego nie może robić dodatek, który nie jest klientem synchronizacji, co się dzieje z danymi kiedy mając dwa Outlooki przełączamy regularnie to, który z nich jest klientem synchronizacji. Dalej opisałem kilka przypadków, które wydają się dla mnie dość cenne :)

Założenie:  Posiadam dwa komputery, które mają zainstalowany Outlook (obsługują dwa różne adresy @) wraz z dodatkiem do CRM, oba skonfigurowane przy pomocy tego samego konta CRM, wskazują na tą samą organizację (nazwijmy te maszyny odpowiednio O1 oraz O2. O1 jest klientem synchronizacji.

  1. Co się dzieje kiedy chcemy śledzić wiadomości email, które otrzymujemy na O1 oraz O2 ?
  2. Co się dzieje kiedy wiadomości email z CRM są wysyłane poprzez dodatek ?
  3. Co się dzieje z terminem kiedy powstał w CRM i chcemy żeby trafił do Outlook ?
  4. Co się dzieje kiedy chcemy śledzić termin, który powstał w Outlook ?

Uwaga: pisząc tylko o działaniu Termin odnoszę się do pozostałych działań, takich jak Zadanie, Rozmowa Telefoniczna (ale bez Email – dlaczego ? zapraszam do lektury).

Ad 1: Co się dzieje kiedy chcemy śledzić wiadomości email, które otrzymujemy na O1 oraz O2 ?

W tym przypadku nie jest istotne, który dodatek Outlook jest klientem synchronizacji, a który nie jest – możemy śledzić wiadomości @ na obu maszynach bez żadnych ograniczeń.

Ad 2: Co się dzieje kiedy wiadomości email z CRM są wysyłane poprzez dodatek ?

Oczywistą oczywistością ;) jest, że aby dodatek mógł wysyłać wiadomości @ musi być zaznaczona odpowiednia opcja w jego ustawieniach:

image

Jeśli to samo zaznaczenie zrobimy w O1 oraz O2 co nam to da ? Oba będą wysyłać emaile! W momencie uruchomienia procesu synchronizacji danych w O2 otrzymamy komunikat widoczny na pierwszym screenie w tym poście, ale jak otworzymy zakładkę Zadanie w tym okienku zobaczymy takie coś:

image

Wniosek: jeśli chodzi o wysyłanie @ nie jest istotne, który Outlook jest klientem synchronizacji.

Ale …. co jeśli O1 i O2 obsługują dwie różne adresy @ ? NIC, a może i DUŻO – to jaki adres @ obsługuje Outlook jest dla dodatku w ogóle nieistotne w przypadku wysyłki @ – z CRM pobierane są wiadomości do wysłania na podstawie pola nadawca (identyfikator użytkownika) – nie jest sprawdzane jaki adres @ jest ustawiony na formularzu użytkownika – może być dowolnym innym adresem przez O1 i O2 nie obsługiwanym jeśli chodzi o pocztę przychodzącą

Ad. 3 Co się dzieje z terminem kiedy powstał w CRM i chcemy żeby trafił do Outlook ?

Tutaj już nie jest tak fajnie jak w przypadku @. Termin ten trafi tylko do tego Outlooka, który jest klientem synchronizacji, w naszym przypadku będzie to O1. A co jeśli następnie zmienimy ustawienia i O2 będzie klientem synchronizacji i wykonamy synchronizacje ? Nic – termin ten nie pojawi się w O2 – bo trafił już do O1. Ale … (nie jest prosto – zawsze jest jakieś ALE ;) ). Załóżmy następujące operacje zachodzącą w odpowiednich czasach T

  • T0 – termin powstaje w CRM.
  • T1 – O1 jako klient synchronizacji wykonuje synchronizację danych. Termin trafia do O1
  • T2 – O2 jako klient synchronizacji wykonuje synchronizację danych. Termin NIE trafia do O2.
  • T3 – następuje edycja terminu w CRM
  • T4 – O2 jako klient synchronizacji wykonuje synchronizację danych. Termin trafia do O2
  • T5 – O1 jako klient synchronizacji wykonuje synchronizację danych. Termin NIE jest aktualizowany!!! W O1 jest ta wersja terminu, która powstała w T0

Przełączanie pomiędzy O1 a O2 spowodować może, że w końcu użytkownik nie będzie wiedział kiedy termin ma się odbyć, kiedy dane zadanie ma być wykonane – powstaje straszny bałagan. Microsoft rekomenduje, aby na stałe klientem synchronizacji był ten Outlook, który częściej jest wykorzystywany. Jak dobrze wiemy, zdarzają się sytuacje kiedy O1 i O2 wykorzystywane są w równym stopniu – wtedy pamiętajmy co możemy popsuć!.

Ad. 4: Co się dzieje kiedy chcemy śledzić termin, który powstał w Outlook ?

Termin z Outlook do CRM może być śledzony tylko wtedy kiedy jest on klientem synchronizacji. W przeciwnym przypadku po kliknięciu przycisku Śledź a następnie Zapisz dostaniemy komunikat analogiczny do tego jaki widoczny jest na screenie pierwszym. Po tym jak już termin ten znajdzie się w CRM dochodzą nam możliwości trafienia tego terminu do drugiego Outlooka, kiedy następuje modyfikacja danych poza Outlook.

Pokazane przeze mnie screeny pochodzą z CRM 4.0. Jednakże opisane scenariusze mają zastosowanie również w przypadku CRM 2011.

CRM 2011–dokąd to wszystko zmierza ….

Microsoft odłożył premierę Service Update na końcówkę tego roku. Uzasadnieniem jest m.in. duża liczba błędów zgłoszonych w czasie testów TAP. Oprócz tego w ramach Service Update zostanie dodana nowa funkcjonalność, której do tej pory nikt się nie spodziewał, nikt tego nie ogłaszał – trochę informacji na ten temat zostało ogłoszonych w czasie WPC 2012.

O co dokładnie chodzi ? Odpowiedź na to pytanie znajdziecie tutaj 

Poniżej kilka wycinków, pokazujących Dynamics CRM w wersji Metro :) – jeśli komuś przeszkadza ;) duża liczba wyskakujących okienek w Dynamics CRM to wygląda na to, że nadchodzi rewolucja :)

image image
image image