Posts Tagged by CRM 4.0
Dostęp do raportów w CRM
| 2011-12-10 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Czasami zdarza się, aby dostęp do specyficznych raportów dostęp mieli tylko konkretni użytkownicy lub też aby domyślne raporty dostępne w CRM były poukrywane przed większością użytkowników. Jak do tego podejść ?
Raport w Dynamics CRM jest prawie takim samym obiektem jak Klient czy Kontakt. Powoduje to, iż konfigurując uprawnienia możemy zdecydować czy użytkownik może widzieć tylko swoje raporty, raporty wszystkie (w całej organizacji):
Z drugiej jednak strony napisałem, że Raport jest prawie jak Klient czy Kontakt. To prawie polega na tym, że w ustawieniach raportu możemy określić czy raport jest indywidualny czy też dostępny w organizacji.
Co to właściwie znaczy ? A dokładnie to, że ustawienie na Organizacja powoduje, że raport jest dostępny nawet dla tych użytkowników, którzy mają dostęp w uprawnieniach tylko do swoich raportów. Jeśli Raport ustawiony jest jako Indywidualny to dostępny jest dla właściciela raportu, tych komu jest on udostępniony oraz tych, których rola daje dostęp do tego raportu.
Patrząc z drugiej strony – jeśli użytkownik ma dostęp tylko do swoich raportów to widzi on naprawdę następujące raporty:
- Te, których jest właścicielem
- Te, które są mu udostępnione
- Te, które są ustawione jako raporty Organizacyjne.
Dostęp do raportów w CRM
| 2011-12-10 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Czasami zdarza się, aby dostęp do specyficznych raportów dostęp mieli tylko konkretni użytkownicy lub też aby domyślne raporty dostępne w CRM były poukrywane przed większością użytkowników. Jak do tego podejść ?
Raport w Dynamics CRM jest prawie takim samym obiektem jak Klient czy Kontakt. Powoduje to, iż konfigurując uprawnienia możemy zdecydować czy użytkownik może widzieć tylko swoje raporty, raporty wszystkie (w całej organizacji):
Z drugiej jednak strony napisałem, że Raport jest prawie jak Klient czy Kontakt. To prawie polega na tym, że w ustawieniach raportu możemy określić czy raport jest indywidualny czy też dostępny w organizacji.
Co to właściwie znaczy ? A dokładnie to, że ustawienie na Organizacja powoduje, że raport jest dostępny nawet dla tych użytkowników, którzy mają dostęp w uprawnieniach tylko do swoich raportów. Jeśli Raport ustawiony jest jako Indywidualny to dostępny jest dla właściciela raportu, tych komu jest on udostępniony oraz tych, których rola daje dostęp do tego raportu.
Patrząc z drugiej strony – jeśli użytkownik ma dostęp tylko do swoich raportów to widzi on naprawdę następujące raporty:
- Te, których jest właścicielem
- Te, które są mu udostępnione
- Te, które są ustawione jako raporty Organizacyjne.
Wdrożenia CRM razem z metodykami zwinnymi
| 2010-08-06 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Metodyki zwinne (Agile) takie jak SRUM, Crystal Clear jest czymś co dopiero zaczyna święcić swoje sukcesy. Niemniej jednak, każdy projekt, który do tej porty realizowaliśmy dla klientów z różnych dziedzin, biznesów, prowadzony był z wykorzystaniem właśnie tych metodyk.
Dlaczego ? Odpowiedź jest prosta – każdy z nas jak za coś płaci chce móc jak najszybciej korzystać z produktu. Nie inaczej jest z klientami. Zwinne metodyki nie skupiają się na zdobyciu pełnej wiedzy na temat klienta (bo to nigdy nie jest możliwe), stworzeniu tony dokumentacji i dopiero (po kilku tygodniach programowania w edytorze tekstowym) rozpoczęciu prac mających na celu zrealizowanie tego za co klient zapłacił.
Zwinne metodyki stawiają sobie za cel bliską współpracę z klientem, starając się dostarczyć rozwiązanie kawałek po kawałku. Przy czym kawałki są uzależnione od klienta. Przykładowo w metodyce SCRUM po stronie klienta jest osoba (tzw. właściciel produktu), które zadaniem jest m.in. ustalenie ZI czyli zwrotu z inwestycji, tj. jeśli klient zapłacił za projekt to co jest dla niego najważniejsze, co należy klientowi przestawić w pierwszej kolejności, aby klient mógł tak naprawdę zacząć pracować z systemem, który jest dla niego tworzony, myśląc o ewentualnych zmianach w tym co otrzymał (o tak – zmiany możliwe są zawsze i wszędzie a nie wtedy kiedy system zostanie wdrożony na podstawie tony dokumentacji) oraz o kolejnych priorytetowych funkcjonalnościach, które chciałby mieć.
Dlaczego o tym piszę ? Dlatego, że coraz więcej firm (szczególnie klientów) zauważa zyski z zastosowania takiej metodyki – jest to super sytuacja kiedy starasz się przekonać klienta, który przyzwyczajony jest do długiego czekania i stosu dokumentów zanim zobaczy to czego oczekiwał od systemu. Teraz będzie dla nas to coraz łatwiejsze i miejmy nadzieję, że rysunki takie jak te przestaną obowiązywać :)
Wdrożenie CRM to nie wdrożenie narzędzia, bo CRM to nie jest narzędzie. Klient, do którego jedziemy nie został zapisany w KRS dzień przed naszym spotkaniem. Jego organizacja istnieje już jakiś czas, wie jak zarządzać klientami, ma strategię tego jak chce nimi zarządzać. CRM to narzędzie, którego zadaniem jest wspieranie istniejącego biznesu, wspieranie strategii pracy z klientem. Dlatego ważne jest bycie blisko klienta i szybkiego reagowania na jego potrzeby, aby nie doprowadzić do powstania karuzeli z rysunku :)
Oj będzie się działo na rynku CRM :) – co ja mówię – już się dzieje – tylko, że nie wszyscy to widzą – bo mają stos dokumentacji do napisania/przeczytania/zweryfikowania/zaimplementowania (jak zwał tak zwał :) ).
Wdrożenia CRM razem z metodykami zwinnymi
| 2010-08-06 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Metodyki zwinne (Agile) takie jak SRUM, Crystal Clear jest czymś co dopiero zaczyna święcić swoje sukcesy. Niemniej jednak, każdy projekt, który do tej porty realizowaliśmy dla klientów z różnych dziedzin, biznesów, prowadzony był z wykorzystaniem właśnie tych metodyk.
Dlaczego ? Odpowiedź jest prosta – każdy z nas jak za coś płaci chce móc jak najszybciej korzystać z produktu. Nie inaczej jest z klientami. Zwinne metodyki nie skupiają się na zdobyciu pełnej wiedzy na temat klienta (bo to nigdy nie jest możliwe), stworzeniu tony dokumentacji i dopiero (po kilku tygodniach programowania w edytorze tekstowym) rozpoczęciu prac mających na celu zrealizowanie tego za co klient zapłacił.
Zwinne metodyki stawiają sobie za cel bliską współpracę z klientem, starając się dostarczyć rozwiązanie kawałek po kawałku. Przy czym kawałki są uzależnione od klienta. Przykładowo w metodyce SCRUM po stronie klienta jest osoba (tzw. właściciel produktu), które zadaniem jest m.in. ustalenie ZI czyli zwrotu z inwestycji, tj. jeśli klient zapłacił za projekt to co jest dla niego najważniejsze, co należy klientowi przestawić w pierwszej kolejności, aby klient mógł tak naprawdę zacząć pracować z systemem, który jest dla niego tworzony, myśląc o ewentualnych zmianach w tym co otrzymał (o tak – zmiany możliwe są zawsze i wszędzie a nie wtedy kiedy system zostanie wdrożony na podstawie tony dokumentacji) oraz o kolejnych priorytetowych funkcjonalnościach, które chciałby mieć.
Dlaczego o tym piszę ? Dlatego, że coraz więcej firm (szczególnie klientów) zauważa zyski z zastosowania takiej metodyki – jest to super sytuacja kiedy starasz się przekonać klienta, który przyzwyczajony jest do długiego czekania i stosu dokumentów zanim zobaczy to czego oczekiwał od systemu. Teraz będzie dla nas to coraz łatwiejsze i miejmy nadzieję, że rysunki takie jak te przestaną obowiązywać :)
Wdrożenie CRM to nie wdrożenie narzędzia, bo CRM to nie jest narzędzie. Klient, do którego jedziemy nie został zapisany w KRS dzień przed naszym spotkaniem. Jego organizacja istnieje już jakiś czas, wie jak zarządzać klientami, ma strategię tego jak chce nimi zarządzać. CRM to narzędzie, którego zadaniem jest wspieranie istniejącego biznesu, wspieranie strategii pracy z klientem. Dlatego ważne jest bycie blisko klienta i szybkiego reagowania na jego potrzeby, aby nie doprowadzić do powstania karuzeli z rysunku :)
Oj będzie się działo na rynku CRM :) – co ja mówię – już się dzieje – tylko, że nie wszyscy to widzą – bo mają stos dokumentacji do napisania/przeczytania/zweryfikowania/zaimplementowania (jak zwał tak zwał :) ).
CRM 4.0 Outlook Client – proces synchronizacji
| 2010-08-05 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Czy zastanawialiście się co tak naprawdę dzieje się pod maską narzędzia, który integruje Outlook z CRM 4.0 ?
Na stronach Microsoft jest udostępniony dokument, który opisuje co jest synchronizowane pomiędzy CRM a Outlook – nie w postaci takiej, że “Terminy, Zadania, itp. są synchronizowane”, ale znajdziemy tam opis wszystkich atrybutów, które są brane pod uwagę w czasie synchronizacji. Nie wiem jak wam, ale dla mnie jest to bardzo cenna wiedza, której do tej pory w pełni nie posiadałem :)
Tutaj jest link do tego dokumentu: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2d497348-0a10-40ce-8edb-b0ee85f1215e
CRM 4.0 Outlook Client – proces synchronizacji
| 2010-08-05 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Czy zastanawialiście się co tak naprawdę dzieje się pod maską narzędzia, który integruje Outlook z CRM 4.0 ?
Na stronach Microsoft jest udostępniony dokument, który opisuje co jest synchronizowane pomiędzy CRM a Outlook – nie w postaci takiej, że “Terminy, Zadania, itp. są synchronizowane”, ale znajdziemy tam opis wszystkich atrybutów, które są brane pod uwagę w czasie synchronizacji. Nie wiem jak wam, ale dla mnie jest to bardzo cenna wiedza, której do tej pory w pełni nie posiadałem :)
Tutaj jest link do tego dokumentu: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2d497348-0a10-40ce-8edb-b0ee85f1215e
CRM 4.0 – Znikające terminy w Outlook
| 2010-07-27 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W większości firm Outlook jest strategicznym narzędziem pracy handlowców. To tam rejestrowane jest to co handlowiec robi, z kim się spotyka, itd.
Po wdrożeniu CRM w organizacji zazwyczaj instalowany jest na większości komputerów dodatek do programu Outlook, który pozwala na pracę w CRM w oknie outlook, śledzenie elementów outlookowych bezpośrednio w CRM. Wśród takich elementów jest oczywiście zaproszenie na spotkanie. Jednakże z tym elementem jest bardzo dużo problemów, gdyż w CRM 4.0 nie ma czegoś takiego jak zaproszenie na spotkanie. Prześledźmy następujący scenariusz:
- Użytkownik CRM (nazwijmy go Organizator 1) tworzy zaproszenie na spotkanie i wysyła go do użytkownika (nazwijmy go Handlowiec 1). Zaproszenie to nie jest śledzone w CRM.
- Handlowiec 1 dostaje zaproszenie, wybiera opcję “Śledź w programie CRM”. Powoduje to powstanie w CRM rekordu Termin, gdzie Właścicielem jest Handlowiec 1, natomiast Organizatorem jest Organizator 1.
- Jeśli w CRM Handlowiec 1 miał ustawiony adres email to po otwarciu terminu w CRM w polu wymagani uczestnicy zostanie zaprezentowane wskazanie na użytkownika. W tym przypadku po przeprowadzeniu synchronizacji w programie Outlook (CRM –> Synchronizuj z CRM) termin nie zniknie z kalendarza użytkownika w Outlook
- Jeśli w CRM Handlowiec 1 nie miał ustawionego adresu email to po otwarciu terminu w CRM w polu wymaganie uczestniczy widoczny będzie czerwony adres email z informację, że system CRM nie był w stanie rozpoznać uczestnika. W tym przypadku po przeprowadzeniu synchronizacji termin w kalendarzu w Outlook zostanie usunięty. Jedyna możliwość przywrócenia tego terminu do kalendarza Outlook jest wykonanie operacji:
- Otwarcie rekordu użytkownika i uzupełnienie mu adresu email
- Otwarcie terminu w CRM i wskazanie jaki użytkownik krył się pod tym adresem email
- Przeprowadzenie ponownej synchronizacji w Outlook.
Zachęcam do przeprowadzenia testów kiedy zaproszenie jest wysyłane do większej liczby użytkowników niż jeden :). Kilka scenariuszy przeprowadził Kuba i opisał to na swoim blogu: http://crmblog.pl/2009/09/17/co-dzieje-sie-z-rekordami-po-synchronizacji-crm-outlook/
CRM 4.0 – Znikające terminy w Outlook
| 2010-07-27 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W większości firm Outlook jest strategicznym narzędziem pracy handlowców. To tam rejestrowane jest to co handlowiec robi, z kim się spotyka, itd.
Po wdrożeniu CRM w organizacji zazwyczaj instalowany jest na większości komputerów dodatek do programu Outlook, który pozwala na pracę w CRM w oknie outlook, śledzenie elementów outlookowych bezpośrednio w CRM. Wśród takich elementów jest oczywiście zaproszenie na spotkanie. Jednakże z tym elementem jest bardzo dużo problemów, gdyż w CRM 4.0 nie ma czegoś takiego jak zaproszenie na spotkanie. Prześledźmy następujący scenariusz:
- Użytkownik CRM (nazwijmy go Organizator 1) tworzy zaproszenie na spotkanie i wysyła go do użytkownika (nazwijmy go Handlowiec 1). Zaproszenie to nie jest śledzone w CRM.
- Handlowiec 1 dostaje zaproszenie, wybiera opcję “Śledź w programie CRM”. Powoduje to powstanie w CRM rekordu Termin, gdzie Właścicielem jest Handlowiec 1, natomiast Organizatorem jest Organizator 1.
- Jeśli w CRM Handlowiec 1 miał ustawiony adres email to po otwarciu terminu w CRM w polu wymagani uczestnicy zostanie zaprezentowane wskazanie na użytkownika. W tym przypadku po przeprowadzeniu synchronizacji w programie Outlook (CRM –> Synchronizuj z CRM) termin nie zniknie z kalendarza użytkownika w Outlook
- Jeśli w CRM Handlowiec 1 nie miał ustawionego adresu email to po otwarciu terminu w CRM w polu wymaganie uczestniczy widoczny będzie czerwony adres email z informację, że system CRM nie był w stanie rozpoznać uczestnika. W tym przypadku po przeprowadzeniu synchronizacji termin w kalendarzu w Outlook zostanie usunięty. Jedyna możliwość przywrócenia tego terminu do kalendarza Outlook jest wykonanie operacji:
- Otwarcie rekordu użytkownika i uzupełnienie mu adresu email
- Otwarcie terminu w CRM i wskazanie jaki użytkownik krył się pod tym adresem email
- Przeprowadzenie ponownej synchronizacji w Outlook.
Zachęcam do przeprowadzenia testów kiedy zaproszenie jest wysyłane do większej liczby użytkowników niż jeden :). Kilka scenariuszy przeprowadził Kuba i opisał to na swoim blogu: http://crmblog.pl/2009/09/17/co-dzieje-sie-z-rekordami-po-synchronizacji-crm-outlook/
SetParent – czyli jak napisać plugin do tej wiadomości
| 2010-07-26 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Przy okazji rozbudowania funkcjonalności CRM4.0 potrzebowałem napisać plugin, którego zadaniem będzie wykonanie pewnej operacji w trakcie kiedy zmieni się Menedżer użytkownika.
Dla przypomnienia: Pole Menedżer jest widoczne na formatce użytkownika jednakże ustawienie jego wartości jest możliwe tylko i wyłączenie poprzez skorzystanie z funkcjonalności ukrytej w menu Akcje lub też wykonanie kodu związane z klasą SetParentSystemUserRequest:
Okazuje się, że narzędzie Plugin Registration Tool (PRT) nie udostępnia nam możliwości podłączenia się pod zdarzenie związane ze zmianą interesującego nas pola. Interesujące nas wiadomości nazywa się SetParent.
Nie ma jednak tego ukrytego co by odkryte może zostać i okazuje się, że w bazie danych CRM taką wiadomość można odkryć. Jak ?
Wszystkie wiadomości jakie CRM może przetwarzać są zapisane w tabeli SdkMessageBase. Jak wykonamy sobie następujące zapytanie SQL:
select * from SdkMessageBase where Name = ‘SetParent’
Zobaczymy, że tabela zwróci nam jeden rekord. To co jest dla nas z tego wyniku najważniejsze to SdkMessageId. W kolejnym kroku musimy zaktualizować jedną kolumnę w tabeli SdkMessageFilterBase, aby wiadomość nam się pokazała. Całe zapytanie, które to wykonuje jest następujące:
update SdkMessageFilterBase set IsCustomProcessingStepAllowed =1 where SdkMessageId = ’1ABEBB1B-EA3E-DB11-86A7-000A3A5473E8′
Jak już to będziemy mieli wykonane nie pozostaje nam nic innego jak przeładować PRT i ponownie spróbować stworzyć Step, które będzie powiązany z tą wiadomością:
Jak wygląda kod obsługi tej wiadomości ? Oto przykład:
public class PreSetParent : IPlugin{ public void Execute(IPluginExecutionContext context) { if (context.MessageName == "SetParent" && context.InputParameters.Properties.Contains(Attributes.UserId) && context.InputParameters.Properties.Contains(Attributes.ParentId)) { Guid _userId = (Guid)context.InputParameters[Attributes.UserId]; Guid _parentId = (Guid)context.InputParameters[Attributes.ParentId]; } }}InputParameters w IPluginExecutionContext zawiera w tym przypadku 4 właściwości. UserId oraz ParentId są odpowiednią identyfikatorem użytkownika oraz identyfikatorem Menedżera. Inne atrybuty można sobie podejrzeć debugując kod pluginu.
Rozwiązanie, które zaproponowałem jest w 100% niewspierane i korzystacie z niego na własną odpowiedzialność.
SetParent – czyli jak napisać plugin do tej wiadomości
| 2010-07-26 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Przy okazji rozbudowania funkcjonalności CRM4.0 potrzebowałem napisać plugin, którego zadaniem będzie wykonanie pewnej operacji w trakcie kiedy zmieni się Menedżer użytkownika.
Dla przypomnienia: Pole Menedżer jest widoczne na formatce użytkownika jednakże ustawienie jego wartości jest możliwe tylko i wyłączenie poprzez skorzystanie z funkcjonalności ukrytej w menu Akcje lub też wykonanie kodu związane z klasą SetParentSystemUserRequest:
Okazuje się, że narzędzie Plugin Registration Tool (PRT) nie udostępnia nam możliwości podłączenia się pod zdarzenie związane ze zmianą interesującego nas pola. Interesujące nas wiadomości nazywa się SetParent.
Nie ma jednak tego ukrytego co by odkryte może zostać i okazuje się, że w bazie danych CRM taką wiadomość można odkryć. Jak ?
Wszystkie wiadomości jakie CRM może przetwarzać są zapisane w tabeli SdkMessageBase. Jak wykonamy sobie następujące zapytanie SQL:
select * from SdkMessageBase where Name = ‘SetParent’
Zobaczymy, że tabela zwróci nam jeden rekord. To co jest dla nas z tego wyniku najważniejsze to SdkMessageId. W kolejnym kroku musimy zaktualizować jedną kolumnę w tabeli SdkMessageFilterBase, aby wiadomość nam się pokazała. Całe zapytanie, które to wykonuje jest następujące:
update SdkMessageFilterBase set IsCustomProcessingStepAllowed =1 where SdkMessageId = ’1ABEBB1B-EA3E-DB11-86A7-000A3A5473E8′
Jak już to będziemy mieli wykonane nie pozostaje nam nic innego jak przeładować PRT i ponownie spróbować stworzyć Step, które będzie powiązany z tą wiadomością:
Jak wygląda kod obsługi tej wiadomości ? Oto przykład:
public class PreSetParent : IPlugin{ public void Execute(IPluginExecutionContext context) { if (context.MessageName == "SetParent" && context.InputParameters.Properties.Contains(Attributes.UserId) && context.InputParameters.Properties.Contains(Attributes.ParentId)) { Guid _userId = (Guid)context.InputParameters[Attributes.UserId]; Guid _parentId = (Guid)context.InputParameters[Attributes.ParentId]; } }}InputParameters w IPluginExecutionContext zawiera w tym przypadku 4 właściwości. UserId oraz ParentId są odpowiednią identyfikatorem użytkownika oraz identyfikatorem Menedżera. Inne atrybuty można sobie podejrzeć debugując kod pluginu.
Rozwiązanie, które zaproponowałem jest w 100% niewspierane i korzystacie z niego na własną odpowiedzialność.