Posts Tagged by CRM 2011
CRM 2011–OnSave
| 2011-12-13 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Wydawać by się mogło, że zwyczajne zdarzenie OnSave wywoływane jest w momencie kiedy użytkownik kliknie przycisk Zapisz, Zapisz i Zamknij lub też Zapisz i Utwórz nowy, który znajduje się we wstążce.
Okazuje się, że nie tylko wtedy kod ten jest uruchamiany. Dzieję się to również kiedy chcemy obiekt dezaktywować lub aktywować jak również wtedy kiedy chcemy wykonać operację przypisania rekordu – oczywiście jeśli wykonujemy te operacje z poziomu formularza. Powstaje zatem pytanie: jak odróżnić w JS kiedy jest on uruchamiany. Można by się pokusić o sprawdzanie FormType, ale zadziała to tylko w przypadku aktywacji obiektu bo możemy sobie zobaczyć, że formularz jest wtedy tylko do odczytu. Dla pozostałych operacji zawsze będziemy mieli typ formularza Update.
Jest na szczęście wspierane (to moje ulubione stwierdzenie :D) rozwiązanie tej zagadki. W czasie kiedy konfigurujemy zdarzenie OnSave widzimy na formularzu następujące coś:
Co się dzieje kiedy zaznaczymy ten checkbox ? Po pierwsze nasza funkcja musi być odpowiednio zmodyfikowana i wyglądać powinna mniej więcej tak: 
A co daje nam ten parametr ? Widać to już na obrazku wyżej: eContext.getEventArgs().getSaveMode() – pozwala nam na “dobranie” się do wartości, które pomogą nam w zrozumieniu co jest powodem wystąpienia operacji Zapisz. Te numerki, które widać na obrazku są do odnalezienia w SDK. Na wszelki wypadek zamieszczam je tutaj (wartości pochodzą z SDK opublikowanego 2.12.2011 :) – kto wie czy będą w przyszłości zmienione):
| Entity | Event Mode | Value |
| All | Save | 1 |
| All | Save and Close | 2 |
| All | Save and New | 59 |
| Activities | Save as Completed | 58 |
| All | Deactivate | 5 |
| All | Reactivate | 6 |
| User or Team owned entities | Assign | 47 |
| Email (E-mail) | Send | 7 |
| Lead | Qualify | 16 |
| Lead | Disqualify | 15 |
CRM 2011–OnSave
| 2011-12-13 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Wydawać by się mogło, że zwyczajne zdarzenie OnSave wywoływane jest w momencie kiedy użytkownik kliknie przycisk Zapisz, Zapisz i Zamknij lub też Zapisz i Utwórz nowy, który znajduje się we wstążce.
Okazuje się, że nie tylko wtedy kod ten jest uruchamiany. Dzieję się to również kiedy chcemy obiekt dezaktywować lub aktywować jak również wtedy kiedy chcemy wykonać operację przypisania rekordu – oczywiście jeśli wykonujemy te operacje z poziomu formularza. Powstaje zatem pytanie: jak odróżnić w JS kiedy jest on uruchamiany. Można by się pokusić o sprawdzanie FormType, ale zadziała to tylko w przypadku aktywacji obiektu bo możemy sobie zobaczyć, że formularz jest wtedy tylko do odczytu. Dla pozostałych operacji zawsze będziemy mieli typ formularza Update.
Jest na szczęście wspierane (to moje ulubione stwierdzenie :D) rozwiązanie tej zagadki. W czasie kiedy konfigurujemy zdarzenie OnSave widzimy na formularzu następujące coś:
Co się dzieje kiedy zaznaczymy ten checkbox ? Po pierwsze nasza funkcja musi być odpowiednio zmodyfikowana i wyglądać powinna mniej więcej tak: 
A co daje nam ten parametr ? Widać to już na obrazku wyżej: eContext.getEventArgs().getSaveMode() – pozwala nam na “dobranie” się do wartości, które pomogą nam w zrozumieniu co jest powodem wystąpienia operacji Zapisz. Te numerki, które widać na obrazku są do odnalezienia w SDK. Na wszelki wypadek zamieszczam je tutaj (wartości pochodzą z SDK opublikowanego 2.12.2011 :) – kto wie czy będą w przyszłości zmienione):
| Entity | Event Mode | Value |
| All | Save | 1 |
| All | Save and Close | 2 |
| All | Save and New | 59 |
| Activities | Save as Completed | 58 |
| All | Deactivate | 5 |
| All | Reactivate | 6 |
| User or Team owned entities | Assign | 47 |
| Email (E-mail) | Send | 7 |
| Lead | Qualify | 16 |
| Lead | Disqualify | 15 |
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.
Filtrowane pola typu Lookup
| 2011-10-04 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W CRM 4.0 w większości projektów trzeba było tworzyć niewspierane rozwiązanie, które pomagało korzystać z filtrowanych pól typu Lookup. Przykładem takiego zastosowania było np. umieszczenie na formularzu klienta powiązania z bazą kodów pocztowych. Zamiast polegać na tym, aby użytkownicy CRM sami wprowadzali wartości w polach budowany był słownik kodów pocztowych. Słownik ten miał również dodatkowe informacje takie jak województwo czy też powiat (również w postaci słownika). Na formularzu klienta umieszczane były pola Kod Pocztowy, Powiat, Województwo. Wybranie np. województwa powodować powinno zawężenie wartości w słowniku Powiat oraz Kod Pocztowy do wartości z danego województwa.
W CRM 2011 Microsoft zaimplementował wsparcie dla tego typu funkcjonalności i filtrowane lookupy stały się wspierane “z pudełka”. Konfigurując pola typu lookup na formularzu można wybrać sobie czy ma to pole być filtrowane czy też nie. A jeśli ma to na podstawie jakiego pola – uwaga – tylko jednego:

W większości przypadków wykorzystanie filtrowania po jednym polu wystarczy. Gdyby jednak to było za mało mamy do dyspozycji coś co powala i czego nie było w poprzedniej wersji CRM. Możemy sami definiować sobie widok jaki będzie pokazywany w oknie wyszukiwania (po kliknięciu lupki w polu typu lookup). Jak to się robi ?
Pisze się odpowiedni kod w JS i umieszcza jego wykonania np. w zdarzeniu OnLoad formularza. Definiując taki kod określamy przede wszystkim kryteria wyszukiwania (w postaci FetchXML) oraz tego jak ma być prezentowany widok – czyli określamy jakie kolumny, w jakiej szerokości mają prezentować się w okienku wyszukiwania. W efekcie możemy otrzymać filtrowany lookup bez ograniczeń. Przykładowe zastosowanie tego mechanizmu: rejestrujemy w CRM szanse sprzedaży, ale dla jednej szansy sprzedaży można dowiązać wielu klientów (relacja N:1 pomiędzy szansą sprzedaży a klientem). Następnie na formularzu szansy chcemy wskazać jedną osobę kontaktową (Kontakt), która będzie wskazywać osobę decyzyjną spośród wszystkich osób kontaktowych wszystkich klientów biorących udział w szansie sprzedaży. Aby pokazać w oknie wyszukiwania tylko te osoby kontaktowe, które dowiązane są do klientów dowiązanych do szansy sprzedaży korzystamy właśnie z kodu JS.
Przykładowy kod wygląda następująco:

Po więcej szczegółów odsyłam do SDK – słowo kluczowe do znalezienia to addCustomView :)
Filtrowane pola typu Lookup
| 2011-10-04 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W CRM 4.0 w większości projektów trzeba było tworzyć niewspierane rozwiązanie, które pomagało korzystać z filtrowanych pól typu Lookup. Przykładem takiego zastosowania było np. umieszczenie na formularzu klienta powiązania z bazą kodów pocztowych. Zamiast polegać na tym, aby użytkownicy CRM sami wprowadzali wartości w polach budowany był słownik kodów pocztowych. Słownik ten miał również dodatkowe informacje takie jak województwo czy też powiat (również w postaci słownika). Na formularzu klienta umieszczane były pola Kod Pocztowy, Powiat, Województwo. Wybranie np. województwa powodować powinno zawężenie wartości w słowniku Powiat oraz Kod Pocztowy do wartości z danego województwa.
W CRM 2011 Microsoft zaimplementował wsparcie dla tego typu funkcjonalności i filtrowane lookupy stały się wspierane “z pudełka”. Konfigurując pola typu lookup na formularzu można wybrać sobie czy ma to pole być filtrowane czy też nie. A jeśli ma to na podstawie jakiego pola – uwaga – tylko jednego:

W większości przypadków wykorzystanie filtrowania po jednym polu wystarczy. Gdyby jednak to było za mało mamy do dyspozycji coś co powala i czego nie było w poprzedniej wersji CRM. Możemy sami definiować sobie widok jaki będzie pokazywany w oknie wyszukiwania (po kliknięciu lupki w polu typu lookup). Jak to się robi ?
Pisze się odpowiedni kod w JS i umieszcza jego wykonania np. w zdarzeniu OnLoad formularza. Definiując taki kod określamy przede wszystkim kryteria wyszukiwania (w postaci FetchXML) oraz tego jak ma być prezentowany widok – czyli określamy jakie kolumny, w jakiej szerokości mają prezentować się w okienku wyszukiwania. W efekcie możemy otrzymać filtrowany lookup bez ograniczeń. Przykładowe zastosowanie tego mechanizmu: rejestrujemy w CRM szanse sprzedaży, ale dla jednej szansy sprzedaży można dowiązać wielu klientów (relacja N:1 pomiędzy szansą sprzedaży a klientem). Następnie na formularzu szansy chcemy wskazać jedną osobę kontaktową (Kontakt), która będzie wskazywać osobę decyzyjną spośród wszystkich osób kontaktowych wszystkich klientów biorących udział w szansie sprzedaży. Aby pokazać w oknie wyszukiwania tylko te osoby kontaktowe, które dowiązane są do klientów dowiązanych do szansy sprzedaży korzystamy właśnie z kodu JS.
Przykładowy kod wygląda następująco:

Po więcej szczegółów odsyłam do SDK – słowo kluczowe do znalezienia to addCustomView :)
CRM 2011 i jego dostosowywanie
| 2011-07-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Wydawać się by mogło, że nowa wersja CRM usprawni edycję takich dostosowań jak znana z CRM 4.0 mapa witryny (sitemap) czy też ISV.config. Ten pierwszy plik w nowej wersji CRM nie został zmieniony natomiast ISV.config zastąpiony został plikiem xml definiującym elementy wstążki. Wstążka to zupełnie nowa rzecz, która wykracza daleko poza możliwości starego ISV.config. Nowe możliwości niosą za sobą rozbudowaną strukturę, bardziej skompilowanie definicje pliku xml czy też rozbicie wstążki na poszczególne encje – kto miał do czynienia z dodaniem przycisku do wstążki ten wie o czym mowa ;)
Niestety Microsoft nie zaprezentował narzędzia, które pozwoli na łatwą edycję zarówno mapy witryny jak też wstążki. Na szczęście społeczność Dynamics CRM nie śpi i na codeplex znaleźć można dwa fajne narzędzia:
Pamiętać jednak należy, że są to narzędzia, które mogą działać niestabilnie i trzeba wiedzieć co kryje się pod maską CRMa aby, jeśli będzie to konieczne, naprawić to co zostanie zepsute :)
CRM 2011 i jego dostosowywanie
| 2011-07-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Wydawać się by mogło, że nowa wersja CRM usprawni edycję takich dostosowań jak znana z CRM 4.0 mapa witryny (sitemap) czy też ISV.config. Ten pierwszy plik w nowej wersji CRM nie został zmieniony natomiast ISV.config zastąpiony został plikiem xml definiującym elementy wstążki. Wstążka to zupełnie nowa rzecz, która wykracza daleko poza możliwości starego ISV.config. Nowe możliwości niosą za sobą rozbudowaną strukturę, bardziej skompilowanie definicje pliku xml czy też rozbicie wstążki na poszczególne encje – kto miał do czynienia z dodaniem przycisku do wstążki ten wie o czym mowa ;)
Niestety Microsoft nie zaprezentował narzędzia, które pozwoli na łatwą edycję zarówno mapy witryny jak też wstążki. Na szczęście społeczność Dynamics CRM nie śpi i na codeplex znaleźć można dwa fajne narzędzia:
Pamiętać jednak należy, że są to narzędzia, które mogą działać niestabilnie i trzeba wiedzieć co kryje się pod maską CRMa aby, jeśli będzie to konieczne, naprawić to co zostanie zepsute :)
CRM 2011–Ukrywanie widoków systemowych
| 2011-05-17 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Kto miał za zadanie ukryć widoki systemowe w CRM 4.0 ten wie jakie to było problematyczne :) Co się zmieniło w nowym CRM ? Podobnie jak np. klienta może być aktywny lub nieaktywny tak samo widoki. Z poziomu dostosowań możemy oznaczyć widok jako aktywny/nieaktywny:

Po dezaktywacji widok będzie widoczny w liście widoków nieaktywnych:

Po wyłączeniu kilku widoków i opublikowaniu zmian w efekcie dostajemy przykładową listę widoków:

Efekt osiągnięty w prosty sposób co w CRM 4 zajmowało czas na napisanie pluginu, który przestawał działać kiedy ktoś przypadkiem zmienił nazwę widoku :)
CRM 2011–Ukrywanie widoków systemowych
| 2011-05-17 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Kto miał za zadanie ukryć widoki systemowe w CRM 4.0 ten wie jakie to było problematyczne :) Co się zmieniło w nowym CRM ? Podobnie jak np. klienta może być aktywny lub nieaktywny tak samo widoki. Z poziomu dostosowań możemy oznaczyć widok jako aktywny/nieaktywny:

Po dezaktywacji widok będzie widoczny w liście widoków nieaktywnych:

Po wyłączeniu kilku widoków i opublikowaniu zmian w efekcie dostajemy przykładową listę widoków:

Efekt osiągnięty w prosty sposób co w CRM 4 zajmowało czas na napisanie pluginu, który przestawał działać kiedy ktoś przypadkiem zmienił nazwę widoku :)
CRM 2011–pierwszy egzamin MB2-866
| 2011-04-28 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Na stronie Microsoft Learning znaleźć można już informacje o egzaminie związanym z Dynamics CRM 2011: MB2-866: Microsoft Dynamics CRM 2011 Customization and Configuration. Szczegółowe informacje znaleźć można na stronie ML: http://www.microsoft.com/learning/en/us/exam.aspx?ID=MB2-866
CRM 2011–pierwszy egzamin MB2-866
| 2011-04-28 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Na stronie Microsoft Learning znaleźć można już informacje o egzaminie związanym z Dynamics CRM 2011: MB2-866: Microsoft Dynamics CRM 2011 Customization and Configuration. Szczegółowe informacje znaleźć można na stronie ML: http://www.microsoft.com/learning/en/us/exam.aspx?ID=MB2-866
CRM 2011–Kolejki w CRM
| 2011-04-08 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Kto korzystał z kolejek w CRM 4.0 ten wie jak wiele ograniczeń ten mechanizm tam posiada. Przykładowo dostępu do kolejek nie dało się ograniczyć, tzn. jeśli organizacja była podzielona na wiele jednostek organizacyjnych to nie było możliwości ukrycia kolejek pomiędzy tymi jednostkami. W CRM 4.0 kolejki są “Organization-owned” (mówimy oczywiście o kolejkach publicznych a nie kolejkach private oraz WIP, które tworzone są dla każdego użytkownika bez udziału i możliwości ingerencji użytkownika) co znaczy, że nie jest ona przypisana do konkretnej osoby, tylko do jednostki biznesowej. W nowym CRM kolejka jest “User-owned” co powoduje, że właściciel widoczny w CRM 4.0 na formatce kolejki w CRM 2011 jest faktycznie jego właścicielem:

Ma to swoje przełożenie również na uprawnienia:
![]()
![]()
W definicji roli możemy określić zakres widoczności kolejek: możemy widzieć tylko swoje kolejki jak również kolejki swojego zespołu. Trzeba tutaj wspomnieć, że domyślnie kolejki tworzone są dla nowego użytkownika, dla nowego zespołu.
Kolejna super sprawa związana z kolejkami to fakt, iż możemy do nich “wrzucić” różnego typu obiektu. Wystarczy w części poświęconej dostosowaniom obiektu wskazać, że chcemy aby ten obiekt mógł być umieszczany w kolejce:

Dodatkową opcją jest możliwość automatycznego umieszczenia elementu w kolejce właściciela jeśli obiekt jest dla niego tworzony lub też właściciel obiektu się zmienia.
Po ustawieniu tej opcji pojawią się we wstążce dodatkowe przyciski pozwalające na wysłanie obiektu do kolejki oraz podejrzenie tego obiektu w kolejce. Na liście obiektów mamy do dyspozycji jeden przycisk do dodania obiektu do kolejki:

Z kolei na formatce mamy do dyspozycji dwa przyciski. Jeden do dodania elementu, drugi do wyświetlenia obiektu w kolejce.

Będąc przy podglądaniu obiektu w kolejce widzimy kolejną nowość w CRM 2011. Został udostępniony nowy obiekt “Queue Item”, który przechowuje referencje do obiektu, kolejki oraz osoby, aktualnie odpowiedzialnej za ten element – co najważniejsze jest to obiekt dostosowywalny co pozwala np. na zbudowanie procesów sprawdzające SLA rozwiązywania spraw, co w wielu wdrożeniach CRM 4.0 było wymaganiem bardzo ciężkim do zrealizowania, a który w nowym CRM jest już łatwiejsze:

Proces wysłania obiektu do kolejki polega na stworzeniu nowego obiektu Queue Item (Element Kolejki), nie ma czegoś takiego co było w CRM 4.0, że obiekt jest “przypisywany do kolejki” co tak naprawdę skutkowało udostępnieniem obiektu dla wskazanej kolejki. Jeśli chcemy zautomatyzować dodawanie obiektu do kolejki (np,. w przepływie pracy) to musimy stworzyć nowy obiekt element kolejki. Jak mamy ten obiekt to możemy pisać pluginy, które wspierają nam procesowanie spraw na podstawie SLA lub też przepływy, które będą notyfikować osoby/zespoły, że w ich kolejce powstało nowe zgłoszenie.
Chcąc zaprezentować elementy w kolejkach korzystamy z kolejek dostępnych w Obszarze Roboczym:

Możemy z tego poziomu wybrać sobie kolejkę, którą chcemy przeglądać (lub prezentujemy elementy ze wszystkich kolejek). Możemy również wybrać widok, który prezentuje elementy czekające na przypisanie oraz elementy przypisane:

We wstążce zobaczymy następujące elementy:
- Routing – przycisk ten służy do przesłania wybranego elementu z kolejki do innej kolejki. Można przy tej okazji zmienić osobę, która aktualnie pracuje nad elementem.
- Pracuj nad – powoduje ustawienie pola Pracownik na formatce elementu kolejki. Można wskazać użytkownika lub też zespół.
- Zwolnij – powoduje wyczyszczenie pola Pracownik na formatce elementu kolejki. Element trafia do widoku “Elementy dostępne do opracowania”.
- Usuń – powoduje usunięcie elementu kolejki. Sam obiekt, który został wysłany do kolejki nie jest usuwany.
- Szczegóły elementu kolejki – powoduje wyświetlenie formatki elementu kolejki.
Pozostaje już tylko wykorzystać tę wiedzę w prawdziwym wdrożeniu :)
CRM 2011–Kolejki w CRM
| 2011-04-08 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Kto korzystał z kolejek w CRM 4.0 ten wie jak wiele ograniczeń ten mechanizm tam posiada. Przykładowo dostępu do kolejek nie dało się ograniczyć, tzn. jeśli organizacja była podzielona na wiele jednostek organizacyjnych to nie było możliwości ukrycia kolejek pomiędzy tymi jednostkami. W CRM 4.0 kolejki są “Organization-owned” (mówimy oczywiście o kolejkach publicznych a nie kolejkach private oraz WIP, które tworzone są dla każdego użytkownika bez udziału i możliwości ingerencji użytkownika) co znaczy, że nie jest ona przypisana do konkretnej osoby, tylko do jednostki biznesowej. W nowym CRM kolejka jest “User-owned” co powoduje, że właściciel widoczny w CRM 4.0 na formatce kolejki w CRM 2011 jest faktycznie jego właścicielem:

Ma to swoje przełożenie również na uprawnienia:
![]()
![]()
W definicji roli możemy określić zakres widoczności kolejek: możemy widzieć tylko swoje kolejki jak również kolejki swojego zespołu. Trzeba tutaj wspomnieć, że domyślnie kolejki tworzone są dla nowego użytkownika, dla nowego zespołu.
Kolejna super sprawa związana z kolejkami to fakt, iż możemy do nich “wrzucić” różnego typu obiektu. Wystarczy w części poświęconej dostosowaniom obiektu wskazać, że chcemy aby ten obiekt mógł być umieszczany w kolejce:

Dodatkową opcją jest możliwość automatycznego umieszczenia elementu w kolejce właściciela jeśli obiekt jest dla niego tworzony lub też właściciel obiektu się zmienia.
Po ustawieniu tej opcji pojawią się we wstążce dodatkowe przyciski pozwalające na wysłanie obiektu do kolejki oraz podejrzenie tego obiektu w kolejce. Na liście obiektów mamy do dyspozycji jeden przycisk do dodania obiektu do kolejki:

Z kolei na formatce mamy do dyspozycji dwa przyciski. Jeden do dodania elementu, drugi do wyświetlenia obiektu w kolejce.

Będąc przy podglądaniu obiektu w kolejce widzimy kolejną nowość w CRM 2011. Został udostępniony nowy obiekt “Queue Item”, który przechowuje referencje do obiektu, kolejki oraz osoby, aktualnie odpowiedzialnej za ten element – co najważniejsze jest to obiekt dostosowywalny co pozwala np. na zbudowanie procesów sprawdzające SLA rozwiązywania spraw, co w wielu wdrożeniach CRM 4.0 było wymaganiem bardzo ciężkim do zrealizowania, a który w nowym CRM jest już łatwiejsze:

Proces wysłania obiektu do kolejki polega na stworzeniu nowego obiektu Queue Item (Element Kolejki), nie ma czegoś takiego co było w CRM 4.0, że obiekt jest “przypisywany do kolejki” co tak naprawdę skutkowało udostępnieniem obiektu dla wskazanej kolejki. Jeśli chcemy zautomatyzować dodawanie obiektu do kolejki (np,. w przepływie pracy) to musimy stworzyć nowy obiekt element kolejki. Jak mamy ten obiekt to możemy pisać pluginy, które wspierają nam procesowanie spraw na podstawie SLA lub też przepływy, które będą notyfikować osoby/zespoły, że w ich kolejce powstało nowe zgłoszenie.
Chcąc zaprezentować elementy w kolejkach korzystamy z kolejek dostępnych w Obszarze Roboczym:

Możemy z tego poziomu wybrać sobie kolejkę, którą chcemy przeglądać (lub prezentujemy elementy ze wszystkich kolejek). Możemy również wybrać widok, który prezentuje elementy czekające na przypisanie oraz elementy przypisane:

We wstążce zobaczymy następujące elementy:
- Routing – przycisk ten służy do przesłania wybranego elementu z kolejki do innej kolejki. Można przy tej okazji zmienić osobę, która aktualnie pracuje nad elementem.
- Pracuj nad – powoduje ustawienie pola Pracownik na formatce elementu kolejki. Można wskazać użytkownika lub też zespół.
- Zwolnij – powoduje wyczyszczenie pola Pracownik na formatce elementu kolejki. Element trafia do widoku “Elementy dostępne do opracowania”.
- Usuń – powoduje usunięcie elementu kolejki. Sam obiekt, który został wysłany do kolejki nie jest usuwany.
- Szczegóły elementu kolejki – powoduje wyświetlenie formatki elementu kolejki.
Pozostaje już tylko wykorzystać tę wiedzę w prawdziwym wdrożeniu :)
CRM 2011–Dashboard “Restrict cross-frame scripting”
| 2011-02-14 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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ń.

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ć:

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:

Wierzymy, że administrator jest świadomy tego co robi :)
CRM 2011–Dashboard “Restrict cross-frame scripting”
| 2011-02-14 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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ń.

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ć:

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:

Wierzymy, że administrator jest świadomy tego co robi :)
CRM 2011–wysyłanie widomości email–zatwierdzanie adresów email
| 2011-02-13 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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:


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:

CRM 2011–wysyłanie widomości email–zatwierdzanie adresów email
| 2011-02-13 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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:


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:

CRM 2011–Pluginy i namiastka z CrmSvcUtil
| 2011-02-01 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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
CRM 2011–Pluginy i namiastka z CrmSvcUtil
| 2011-02-01 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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
CRM 2011 RC–czas ma znaczenie :)
| 2010-12-27 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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łędu![]()
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 RC–czas ma znaczenie :)
| 2010-12-27 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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łędu![]()
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
| 2010-12-23 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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 2011–skrypty i FormType
| 2010-12-23 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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 2011–pierwsze spojrzenie na możliwości Silverlight
| 2010-10-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W poście poświęconych usługom nowego CRM wspomniałem o dwóch usługach dostępnych pod adresami:
- IOrganizationService – http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
- 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:
- 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
- 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.
- 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:

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:

Jak wykorzystać te metadane ? O tym w kolejnym odcinku :)
CRM 2011–pierwsze spojrzenie na możliwości Silverlight
| 2010-10-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
W poście poświęconych usługom nowego CRM wspomniałem o dwóch usługach dostępnych pod adresami:
- IOrganizationService – http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
- 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:
- 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
- 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.
- 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:

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:

Jak wykorzystać te metadane ? O tym w kolejnym odcinku :)
CRM 2011 – stwórzmy sobie konto …
| 2010-10-02 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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:
- 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)
- Rozpakujmy SDK do dowolnej lokalizacji
- Sprawdźmy zawartość katalogu sdk\bin i zwróćmy uwagę na dwa elementy:
- 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)
- 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:
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
CRM 2011 – stwórzmy sobie konto …
| 2010-10-02 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
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:
- 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)
- Rozpakujmy SDK do dowolnej lokalizacji
- Sprawdźmy zawartość katalogu sdk\bin i zwróćmy uwagę na dwa elementy:
- 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)
- 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:
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
CRM 2011 – wstęp do raportowania
| 2010-10-02 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Pierwsza próba uruchomienia własnego raportu może doprowadzić do powstania następującego błędu:
Powodem tego błędu jest brak zainstalowania komponentu srsdataconnector, którego instalator dostępny jest w tym samym miejscu skąd instalowaliśmy CRM 2011;
W moim przypadku sama instalacji nie wystarczyła :( – musiałem z poziomu Panelu Sterowania dokonać naprawy instalacji. Dopiero wtedy raporty zaczęły się poprawnie uruchamiać.
CRM 2011 – wstęp do raportowania
| 2010-10-02 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Pierwsza próba uruchomienia własnego raportu może doprowadzić do powstania następującego błędu:
Powodem tego błędu jest brak zainstalowania komponentu srsdataconnector, którego instalator dostępny jest w tym samym miejscu skąd instalowaliśmy CRM 2011;
W moim przypadku sama instalacji nie wystarczyła :( – musiałem z poziomu Panelu Sterowania dokonać naprawy instalacji. Dopiero wtedy raporty zaczęły się poprawnie uruchamiać.
CRM 2011 – wygoda pracy z systemem
| 2010-09-22 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Od dawna dało się słyszeć głosy, że CRM 2011 został opracowany razem z użytkownikami tego systemu, tzn. zostały wprowadzone faktycznie wymagane od tego systemu funkcjonalności. I to zarówno z punktu widzenia użytkownika biznesowe jak również z punktu widzenia osoby wdrażającej ten system.
Niektóre funkcjonalności związane były z wygodą pracy z tym system. Przykładowa nowość wprowadzona w CRM2011 polega na tym, iż będąc na liście obiektów, np. Accounts możemy z tego poziomu, np. dostosować widok, który aktualnie widzimy, obiekt, który prezentujemy, formatkę obiektu, itd – sami zobaczcie jak to wygląda:
Wyświetlam sobie obiekty typu Account (pozwoliłem sobie dokonać spolszczenia na potrzeby wdrożenia póki polskiej wersji jeszcze nie ma dostępne :) ) a wstążka w zakładce Customize prezentuje mi możliwości modyfikacji obiektu.
CRM 2011 – wygoda pracy z systemem
| 2010-09-22 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Od dawna dało się słyszeć głosy, że CRM 2011 został opracowany razem z użytkownikami tego systemu, tzn. zostały wprowadzone faktycznie wymagane od tego systemu funkcjonalności. I to zarówno z punktu widzenia użytkownika biznesowe jak również z punktu widzenia osoby wdrażającej ten system.
Niektóre funkcjonalności związane były z wygodą pracy z tym system. Przykładowa nowość wprowadzona w CRM2011 polega na tym, iż będąc na liście obiektów, np. Accounts możemy z tego poziomu, np. dostosować widok, który aktualnie widzimy, obiekt, który prezentujemy, formatkę obiektu, itd – sami zobaczcie jak to wygląda:
Wyświetlam sobie obiekty typu Account (pozwoliłem sobie dokonać spolszczenia na potrzeby wdrożenia póki polskiej wersji jeszcze nie ma dostępne :) ) a wstążka w zakładce Customize prezentuje mi możliwości modyfikacji obiektu.
CRM 2011 – pierwsze spojrzenie pod maskę, czyli usługi
| 2010-09-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
CRM 4.0 przyzwyczaił nas do tego, że posiadamy 3 usługi sieciowe:
- CrmService
- MetadataService
- DiscoveryService
W CRM 2011 oprócz znanych dobrze usług posiadamy usługi nowe, oparte na technologii WCF:
- IDiscoveryService – usługa te pełni tę samą rolę co DiscoveryService w CRM 4.0. Kiedy mamy instalacje CRM przygotowaną pod wiele organizacji usługa nam ta pomoże nam w znalezieniu informacji z nimi związanych, np. można pobrać listę organizacji do której użytkownik ma dostęp
- IOrganizationService – usługa ta jest niejako scaleniem CrmService oraz MetadataService. Przy pomocy jednej usługi możemy wykonywać operacje biznesowe w CRM, np. zakładanie kont jak również pobierać metadane, czyli informacji opisujące zdefiniowane w CRM.
Dostęp do tych nowych usług jest możliwy z wykorzystaniem następujących adresów:
- IOrganizationService – http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
- IDiscoveryService – http://<servername>/<organizationname>/XRMServices/2011/Discover.svc
Warto zwrócić uwagę, że w nazwach katalogów wykorzystywane są nazwy XRM :) co wskazuje, że mamy już do czynienia z systemem, który wyrasta ponad zarządzanie relacjami z klientem, a przy pomocy którego można zbudować narzędzie wspierające zarządzanie dowolnymi relacjami – o koncepcji XRM opowiada filmik z prawej strony
CRM 2011 – pierwsze spojrzenie pod maskę, czyli usługi
| 2010-09-16 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
CRM 4.0 przyzwyczaił nas do tego, że posiadamy 3 usługi sieciowe:
- CrmService
- MetadataService
- DiscoveryService
W CRM 2011 oprócz znanych dobrze usług posiadamy usługi nowe, oparte na technologii WCF:
- IDiscoveryService – usługa te pełni tę samą rolę co DiscoveryService w CRM 4.0. Kiedy mamy instalacje CRM przygotowaną pod wiele organizacji usługa nam ta pomoże nam w znalezieniu informacji z nimi związanych, np. można pobrać listę organizacji do której użytkownik ma dostęp
- IOrganizationService – usługa ta jest niejako scaleniem CrmService oraz MetadataService. Przy pomocy jednej usługi możemy wykonywać operacje biznesowe w CRM, np. zakładanie kont jak również pobierać metadane, czyli informacji opisujące zdefiniowane w CRM.
Dostęp do tych nowych usług jest możliwy z wykorzystaniem następujących adresów:
- IOrganizationService – http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
- IDiscoveryService – http://<servername>/<organizationname>/XRMServices/2011/Discover.svc
Warto zwrócić uwagę, że w nazwach katalogów wykorzystywane są nazwy XRM :) co wskazuje, że mamy już do czynienia z systemem, który wyrasta ponad zarządzanie relacjami z klientem, a przy pomocy którego można zbudować narzędzie wspierające zarządzanie dowolnymi relacjami – o koncepcji XRM opowiada filmik z prawej strony
CRM 2011
| 2010-09-14 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Już jest :) – wersja beta produktu, który naszym zdaniem spowoduje rewolucję :) Dla tych, którzy dopiero teraz słyszą o nowej wersji produktu mała informacja – produkt ten można pobrać po zarejestrowaniu się na stronie: http://offers.crmchoice.com/CRM2011Beta-Landing.
Pierwsze wrażenia z nowego CRM ? Przede wszystkim wygląd – podobnie jak poprzednia wersja – kolorystycznie oraz interfejsowo odpowiada pakietowi Office a dokładnie programowi Outlook. CRM 4 nawiązywał do Outlook 2007, nowa wersja do Outlook 2010. Wszędzie obecna jest wstążka, która stała się elementem, który opanowuje kolejne produkty MS.
Główne okno aplikacji wygląda następująco:
Jako, iż zajmuję się CRM również z technicznego punktu widzenia postaram się opisać jakie zmiany zostały wprowadzone w jego wnętrzu, np. własność możliwa do ustawienia dla zespołu, integracja z Sharepoint, procesy, usługi CRM 2011, itd. Co warte wspomnienia na samym wstępie to fakt, iż produkt ten został całkowicie napisany w oparciu o .NET 4. Zatem przepływy, pluginy będziemy już tworzyć z wykorzystaniem najnowszych technik :) – jak dla mnie bomba :)
Wymagania odnośnie sprzętu oraz aplikacji wymaganych przez CRM 2011 opisał Kuba w tym poście: http://crmblog.pl/2010/09/10/dynamics-crm-2011-wymagania-sprzetowe-i-programowe/
CRM 2011
| 2010-09-14 | Posted by Tomasz Filipowicz under Polskie blogi IT |
|
Już jest :) – wersja beta produktu, który naszym zdaniem spowoduje rewolucję :) Dla tych, którzy dopiero teraz słyszą o nowej wersji produktu mała informacja – produkt ten można pobrać po zarejestrowaniu się na stronie: http://offers.crmchoice.com/CRM2011Beta-Landing.
Pierwsze wrażenia z nowego CRM ? Przede wszystkim wygląd – podobnie jak poprzednia wersja – kolorystycznie oraz interfejsowo odpowiada pakietowi Office a dokładnie programowi Outlook. CRM 4 nawiązywał do Outlook 2007, nowa wersja do Outlook 2010. Wszędzie obecna jest wstążka, która stała się elementem, który opanowuje kolejne produkty MS.
Główne okno aplikacji wygląda następująco:
Jako, iż zajmuję się CRM również z technicznego punktu widzenia postaram się opisać jakie zmiany zostały wprowadzone w jego wnętrzu, np. własność możliwa do ustawienia dla zespołu, integracja z Sharepoint, procesy, usługi CRM 2011, itd. Co warte wspomnienia na samym wstępie to fakt, iż produkt ten został całkowicie napisany w oparciu o .NET 4. Zatem przepływy, pluginy będziemy już tworzyć z wykorzystaniem najnowszych technik :) – jak dla mnie bomba :)
Wymagania odnośnie sprzętu oraz aplikacji wymaganych przez CRM 2011 opisał Kuba w tym poście: http://crmblog.pl/2010/09/10/dynamics-crm-2011-wymagania-sprzetowe-i-programowe/