Microsoft Dynamics CRM 4.0 Update Rollup 11

W długi weekend pojawił się najnowszy Update Rollup 11. Wprowadza znów sporo fajnych zmian i standardowo jest kumulatywny. Rollup 11 dla klienta Outlook i Data Migration Manager’a wymaga zainstalowania Update Rollup 7 najpierw!

Do najważniejszych cech Update Rollup 11, moim zdaniem, należą:

  • w Outlook 2010 guziki CRM są wyświetlane jako elementy wstążki, a nie w zakładce „Dodatki”
  • w Outlook’u nie pojawiają się przypomnienia zadań zaznaczonych jako ukończone w CRM ui zsynchronizowanych po ukończeniu
  • Update Rollup 11 wymaga Microsoft Windows Installer (MSI) w wersji 4.5, a więc na komputerach, które nie mają tej wersji, będzie wymagał połączenia z internetem podczas instalacji
  • Update Rollup 11 wymaga Visual C++ 2008 SP1 Redistributable i będzie go doinstalowywał podczas instalacji
  • Update Rollup 11 wymaga .Net 3.5 SP1, ale nie będzie doinstalowywał go podczas instalacji
  • Update Rollup 11 instaluje na komputerach z klientem dla Outlook kontrolkę Reporting Services 2008
  • wreszcie naprawiony błąd z datą urodzin (wkurzało mnie od wersji 3.0 CRM’a) – podczas ustawienia daty w konkretnych strefach czasowych, data była przechowywana w bazie jako o jeden mniejsza
  • tabela z definicjami starych przepływów pracy nigdy nie była czyszczona, teraz jest

Pamiętajcie o instalacji pakietów językowych (MUI) stąd: http://www.microsoft.com/downloads/details.aspx?FamilyID=50761e58-6040-4cf3-853a-f5ab535f7194&displaylang=en zanim zaczniecie instalować UR 11 dla MUI.

Więcej o Update Rollup 11 dla Microsoft Dynamics CRM 4.0 można poczytać tutaj: http://support.microsoft.com/?kbid=981328, a ściągnąć go można stąd: http://www.microsoft.com/downloads/details.aspx?FamilyID=f84f2bfb-393d-4b90-bf1b-300a82ec6083&displaylang=en.

Customer Care Accelerator (CCA) – czy to jeszcze akcelerator?

Jeden z najnowszych akceleratorów dla Microsoft Dynamics CRM to CCA, czyli Customer Care Accelerator. Właśnie skończył się tydzień, podczas którego miałem przyjemność uczyć się od grupy produktowej o co chodzi z CCA. Jutro wracam do Polski, ale już dziś „na gorąco” (póki pamiętam ;) ) postanowiłem podzielić się z Wami przemyśleniami na temat CCA. I odważę się powiedzieć – CCA to żaden akcelerator! CCA to mega potężna platforma do budowania zintegrowanych rozwiązań dla call centres.

Ogólnie o Customer Care Accelerator

Przede wszystkim CCA różni się od innych akceleratorów tym, że nie został napisany jako „dodatek”. CCA to nowa wersja platformy do budowania rozwiązań do obsługi klientów, która do tej pory była osobnym produktem, czyli Customer Care Framework. Microsoft w ramach zaangażowania w xRM i ogólnie rynek CRM postanowił… unowocześnić Customer Care Framework 2009, zintegrować ją z Dynamics CRM i… oddawać go za darmo!!! (coś, co kosztowało do tej pory około 80 000 PLN za jedną licencję serwerową!!!). CCF jest z powodzeniem używany w kilkudziesięciu bankach i firmach telco od Australii przez Indie aż po USA. A teraz klienci Dynamics CRM dostają go za darmo w postaci CCA. Sam nie mogłem się nadziwić, bo wiem jak potężną platformą był CCF. Ale Microsoft nie żartuje z tym, że chce zagarniać rynek CRM. Zrobił właśnie olbrzymi krok :) :

Customer Care Accelerator (CCA)

Customer Care Accelerator – technologia

Nie da się opowiedzieć czym jest CCA bez krótkiego wytłumaczenia czym są: LOB, ICC, IAD, UII, AIF, HAT. W tym poście opiszę krótko co się kryje za tymi skrótami, bo dogłębne tłumaczenie i szkolenie jak ich używać trwało 4 dni… I tak:
LOB (Line-of-business application) – każda aplikacja i system, który wspiera biznes i może wymagać integracji
ICC (Integrated Contact Centrer) – koncepcja lub wizja rozwiązania opartego o technologie MS do pełnej obsługi potężnych i zaawansowanych call centre
IAD (Integrated Agent Desktop) – aplikacja, która „w jednym okienku” pozwala na obsługę wielu systemów wykorzystywanych przez agenta w Call Centre. I nieważne czy te systemy to aplikacje web’owe czy nie; w .NET czy w Javie; czy przez Citrix czy na mainframie – wszystkie mają dać się obsłużyć i zintegrować w „jednym ekranie”
UII (User Interface Integration) – zestaw komponentów i SDK do budowy kontrolek pozwalających integrować różne LOB, Dynamics CRM i inne aplikacje w IAD
AIF (Application Integration Framework) – główna część UII pozwalająca integrować różnego typu aplikacje na poziomie interfejsu. Co to znaczy? W skrócie tyle, że dzięki AIF można zalogować się do aplikacji w Swing’u, wziąć z niej dane, w tej samej „sesji” przełączyć okienko do systemu ERP, pobrać dane i za chwilę otworzyć okienko CRM’a np. z utworzonym działaniem
HAT (Hosted Application Toolkit) – zestaw narzędzi i dodatków do Visual Studio, które automatyzują integrację różnych aplikacji. HAT wykorzystuje DDA ;) i Windows Workflow Foundation po to, żeby budować rozwiązania integrujące różne systemy na poziomie interfejsu
DDA (Data Driven Adapter) – komponent ułatwiający dostęp do poszczególnych rodzajów aplikacji. Takie jakby API wiedzące, że jak mamy do czynienia z aplikacją webową, to można ją otworzyć np. poprzez URL. Jak z aplikacją w Swing’u, to np. żęby pobrać wartość pola tekstowego wystarczy… itd. CCA zawiera kilka gotowych DDA, ale możemy pisać swoje własne pod nasze aplikacje.

Customer Care Accelerator - architektura

Customer Care Accelerator - architektura

Podusmowanie

Podsumowując CCA powyższymi skrótami – używając UII, wykorzystuje się DDA i WWF oraz AIF w celu połączenia LOB w IAD, które mogą stać się częścią potężnego ICC. Tworzenie takich integracji usprawnia się wykorzystując HAT, a rejestruje i zarządza przez CRM. O, tak w skrócie :) .

Ufff, jak sami widzicie CCA to wielki framework, a nie żaden tam akcelerator. Jak będzie zapotrzebowanie, napiszę więcej postów na ten temat. Póki co, z tego co mi wiadomo, poza konsultantami Microsoft Consulting Services (Piotrusiu, o Tobie mówię ;) ) w Polsce nikt inny nie ma i oficjalnie nie może mieć kompetencji z Customer Care Accelerator poza tymi, którzy byli na szkoleniu i laboratoriach. Czyli tak wyszło, że z Polski tylko ja, tak nieskromnie się przyznam… :)

Kampania Try & Buy Microsoft Dynamics CRM

Microsoft z 6 partnerami: AMG.NET, Infor IT, Insoft, Intersys, JADE i Netwise uruchomił wczoraj kampanię, która pozwala wypróbować jak działa Microsoft Dynamics CRM. W ostatnim poście napisałem za co kocham Microsoft. W tym napiszę, czym Microsoft wystawia moją miłość na cholerną próbę…
Jak to zwykle bywa, jak się kupuje jakieś rozwiązanie (polski MS kupił gotowca ;) , nota bene od moich dobrych znajomych z AlfaPeople Dania…), strona kampanii nie wygląda i nie brzmi najlepiej: http://emea.dynamicscrm.com. A jeszcze gorzej kampania prezentuje się w Google’u: http://www.google.pl/#hl=pl&source=hp&q=emea.dynamicscrm.com&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=1&cad=b. Według BING’a strony jeszcze nie ma.

Inicjatywa Microsoft’u ma pomóc partnerom, którzy nie mają swojego Centrum Hostingowego, oferować Dynamics CRM w modelu SaaS. Powstrzymam się od komentarzy czy się udało po wrażeniach w pierwszych dniach działania strony :) .

Jednak mimo wszystko nie ma się co zrażać! Dynamics CRM działa o niebo lepiej niż strona tej kampanii, dlatego zachęcam i tak do bezpłatnego testowania. W celu założenia konta można udać się tu: http://emea.dynamicscrm.com/?culture=pl-PL&campaign=MSPOL – konto zostanie założone automatycznie i od razu po otrzymaniu potwierdzenia będzie można korzystać z systemu.

PS. Pierwsza reklama w poście na tym blogu, ale nie mogłem się powstrzymać: jeśli komuś przeszkadza łamany angielski i błędy już na pierwszej stronie, zachęcam też do korzystania z CRM’a hostowanego bezpośrednio przez Netwise: http://www.netwisehosting.pl/. Tam raczej błędów nie ma :) .

Ech… korporacja… ktoś, gdzieś w Monachium coś kupił i trzeba używać we wszystkich krajach. Nic to, że nie ma po polsku. Nic to, że po angielsku też to nie jest. Nic, że sypie błędami. Ważne, że trzeba ruszać! Cóż zrobić :)

SDK 4.0.12 – kolejna rewolucja!

Zazwyczaj informowałem o nowych wersjach SDK za pomocą krótkiego opisu. W przypadku CRM SDK 4.0.12 opis nie może być krótki. Takie SDK u innych producentów systemów CRM nazywałoby się „major platform upgrade” i kosztowałoby tyle, co kolejna wersja systemu. SDK 4.0.12 to zmiana spojrzenia na platformę Microsoft Dynamics CRM! To również totalne przełączenie na koncepcję xRM! Ja osobiście jestem w szoku :) . Nowe SDK przygotowuje nas po prostu do gładkiego przejścia do CRM 5 i daje już teraz dostęp do funkcjonalności SDK CRM 5.
David Jennaway już sporo opisał na swoim blogu, ale myślę, że można by napisać ciągle więcej o tej rewolucji po polsku. Tak więc… ;P:

SDK 4.0.12 wprowadza pojęcia „Advanced Developer Extensions” czyli „Zaawansowanych rozszerzeń programistycznych”, które technicznie nazwane są po prostu xRM’em. W skrócie polegają na tym, że możemy korzystać z platformy Dynamics CRM w zupełnie nowy sposób. I tak:

  • nowe SDK pozwala na korzystanie z danych w Dynamics CRM za pomocą LINQ!!! Niech ten piękny kod powie sam za siebie:
    var marketingListsWithCalculations =
    from marketingList in crm.lists
    select new { marketingList.listname, Cost = marketingList.cost + 100 };
  • nowe SDK pozwala na używanie natywnych typów .NET!!! W tym typów nullowalnych (o których nota bene pisałem ostatni projekt w szkole ;) ), czyli np. short? a nie short, dzięki czemu unikamy konieczności ustawiania IsNullSpecified
  • możemy budować źródła danych za pomocą klasy DataContext
  • nowe SDK dostarcza narzędzie CrmSvcUtil, które pozwala budować lokalne i silnie typowane odzwierciedlenia bazy CRM, czyli klasy reprezentujące obiekty i DTO (Data Transfer Object). Dzięki temu można pisać kod oparty o LINQ
  • nowe SDK daje wsparcie dla WCF! poprzez generowanie klas kontekstowych za pomocą CrmSvcUtil
  • z nowym SDK możemy robić tzw. batch updates!!! To z kolei znaczy, że nie musimy już robić tysiąca wywołań Update(). Zamiast tego możemy modyfikować dane „lokalnie”, cache’ować je i dopiero za jednym wywołaniem aktualizować wszystkie na raz! Tutaj przykład:

    contact.Email emailaddress1 = "janko@x.com";
    contact.contact_customer_accountsParentCustomerAccount = account;
    contact1.Firstname firstname = "Jakub";

    crm.UpdateObject(contact);
    crm.UpdateObject(contact1);

    // zapisywanie do bazy
    crm.SaveChanges();

  • nowe SDK pozwala pobierać obiekty powiązane za pomocą gotowych metod. Dzięki temu zamiast budować QueryExpression i podawać GUID’y możemy po prostu wywołać metodę GetRelatedEntities()
  • nowe SDK daje zupełnie nowe możliwości budowania relacji między obiektami z poziomu kodu (poprzez metodę SetLink() albo aktuzalizację klucza obcego). Wystarczy zerknąć na przykłady poniżej, żeby zobaczyć dlaczego mówię o rewolucji :) :
    crm.SetLink(contact, "contact_customer_accounts", account);
    crm.SaveChanges();

    albo:

    contact.contact_customer_accounts = account;
    crm.UpdateObject(contact);
    crm.SaveChanges();
  • nowe SDK zawiera informacje o budowaniu tzw. Visual Charts, czyli dynamicznych wykresów z danych w CRM. W CRM 5 wykresy te będą mogły być wyświetlane na listach rekordów, aktualnie udostępnia je w ograniczonej postaci tylko CRM Online R4.
  • nowe SDK zawiera zupełnie nowe rozdziały o uwierzytelnianiu w modelach serwer-serwer i impersonacji
  • nowe SDK zawiera mnóstwo nowych rozdziałów, w tym rozdziały opisujące dokładnie dlaczego należy korzystać z DynamicEntity, z klasy IsvReadiness i kilkunastu innych
  • nowe SDK zawiera rozdziały o dobrych praktykach w pisaniu zewnętrznych aplikacji korzystających z CRM i o sugestiach związanych z wydajnością takich aplikacji

Na razie nikt nie wie, czy ukaże się CRM SDK 4.0.13. A to dlatego, że 4.0.12 zbliża nas wielkimi krokami do CRM 5. Już teraz Microsoft przyzwyczaja programistów do rozwiązań, które w gotowej platformie zobaczymy za kilka miesięcy. SDK 4.0.12 to jest coś pięknego. To dla takich chwil warto kochać Dynamics CRM’a! I w takich chwilach wiem, czemu kocham MS a nie Google’a, który za major update uważa nowy kształt guzika „szukaj” :D .

PS. SDK 4.0.12 jest do ściągnięcia tutaj: http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en

Po co nam SCOM Management Pack dla Dynamics CRM 4.0?

Jak pewnie wiecie, Microsoft wreszcie jakiś czas temu (niezbyt dawno) opublikował Dynamics CRM 4.0 Management Pack dla SCOM (System Center Operations Manager 2007). Dla tych szczęśliwców, którzy mają SCOM’a w firmie, może okazać się, że pack ten stanie się niezastąpiony odkąd przyjrzycie się bliżej, co nam daje.
I tak, Management Pack dla CRM’a oczywiście monitoruje serwer i ogólnie środowisko, w którym zainstalowany jest Dynamics CRM 4.0. Po instalacji okazuje się, że MP pilnuje naprawdę sporej liczby zdarzeń. Ten post opisuje znaczną część z nich. W szczególności Management Pack:

  • monitoruje serwer web CRM, czyli:
    • czy pula aplikacji działa?
    • czy da się pingować stronę
    • czy pula aplikacji przerwała działanie?
    • jakie są wywołania SOAP’owe
    • czy i jak często renderowane są raporty
  • monitoruje proces asynchroniczny (asynchronous process), m.in.:
    • czy proces działa?
    • czy może wstać po restarcie?
    • czy nie ma problemów z odczytaniem bazy MSCRM_CONFIG i bazy organizacji
    • czy i jak często proces „pada”
    • czy Deletion Service działa i mógł odczytać dane do skasowania
    • czy ostatnie iteracja Deletion Service’u się udała
    • jak dużo operacji musi robić proces asynchroniczny i jak dużo operacji się udaje/nie udaje
    • jak dużo jest żądań synchronizacji offline i czy się udają/nie udają
    • jak dużo jest żądań synchronizacji książki adresowej i czy się udają/nie udają
  • monitoruje warstwę platformy i wywołania usług sieciowych (web services), m.in.:
    • sprawdza wywołania CRM Discovery Service i dostęp do organizacji
    • jak dużo jest wywołań CrmService i czy się udają/nie udają
    • jak dużo jest wywołań MetadataService i czy się udają/nie udają
  • monitoruje komponenty Reporting Services wykorzystywane przez Dynamics CRM, m.in.:
    • czy możliwe jest połączenie ze źródłami danych?
    • czy działają usługi Reporting Services?
    • czy nie ma za dużo żądań, które mogą sugerować atak DoS?
    • czy wystąpił błąd podczas renderowania raportów?
  • monitoruje pozostałe komponenty Dynamics CRM, w tym bezpieczeństwo środowiska, m.in.:
    • jak często dane są brane z cache’a i jak często cache jest czyszczony
    • jakie błędy wystąpiły w kodzie plugin’ów
    • liczbę i wynik żądań uwierzytelniania i logowań użytkowników per organizacja
    • liczbę błędnych prób logowań i uwierzytelniania
    • liczbę błędnych żądań HTTP POST wysłanych przeciwko CRM’owi
    • liczbę odwołań do pliku Trace i błędów odczytu

Jak widać po powyższej liście, jeśli tylko ktoś ma SCOM’a, nie ma się co zastanawiać przed instalacją MP dla CRM’a. Nie widziałem jeszcze lepszych narzędzi, które monitorowałyby środowisko Dynamics CRM 4.0 w tak kompleksowy sposób. Microsoft, dobra robota! :)
Dynamics CRM 4.0 Management Pack dla SCOM’a jest do ściągnięcia stąd: http://www.microsoft.com/downloads/details.aspx?FamilyID=c2c9c4b6-69d5-432a-9560-8e4a6e01573a&displaylang=en. Miłych obserwacji! :)

Przypominajka o 4-tym spotkaniu grupy

Już jutro o 18:30 w siedzibie Microsoft w Warszawie odbędzie się spotkanie grupy. Więcej na temat spotkania (w tym agenda) tutaj: http://ms-groups.pl/dxpug/4_spotkanie. Rejestrujcie się w miarę możliwości, po uprzednim dodaniu do listy członków grupy.

Planujemy 2 bardzo fajne prelekcje, dlatego serdecznie zapraszam!

Microsoft Dynamics CRM 4.0 Update Rollup 10

I znów zgodnie z planem i kalendarzem, Microsoft opublikował dziś w nocy Update Rollup 10 dla Dynamics CRM.
Rollup 10 jest jak kumulatywny, zawiera również poprawki błędów, które były spowodowane… instalacją poprzednich Rollup’ów :) . Mi osobiście nie zdarzyło się napotkać na błąd spowodowany Rollup’em, ale podobno UR7 ze względu na mnóstwo zmian, gdzieniegdzie miał tendencję do powodowania błędów.

Poza poprawkami, które ukazały się do tej pory, Update Rollup 10 naprawia m.in. następujące problemy:

  • wkurzający błąd, kiedy spotkanie, którego użytkownik był organizatorem (a już nie jest) zostało zmienione, nie znikało z kalendarza outlook’a
  • do tej pory niezbyt popularny błąd Email Router’a, który objawiał się nastepującym komunikatem: „Only one usage of each socket address (protocol/network address/port) is normally permitted.”
  • problem z załącznikami podczas odpowiadania na wiadomość bezpośrednio z CRM
  • błąd z połączeniem Outlook’a do serwera tuż poinstalacji UR7
  • detekcja duplikatów nie działała podczas konwersji potencjalnych klientów do kont
  • zmiana statusu (nie stanu) szansy sprzedaży w trybie offline często była nadpisywana poprzednim statusem podczas synchronizacji do online
  • błąd z zamykaniem szansy sprzedaży z za długim opisem: „The length of the ‘subject’ attribute of the ‘opportunityclose’ entity exceeded the maximum allowed length of ’100′.”

Update Rollup 10 naprawia jeszcze kilka innych błędów, m.in. na poziomie skryptów client-side (metoda IsDirty). Generalnie wygląda na to, że to jedna z większych aktualizacji po Rollup’ie 7. Update Rollup 10 jest do ściągnięcia stąd: http://www.microsoft.com/downloads/details.aspx?displaylang=pl&FamilyID=5da4d352-1d3f-4426-9c17-b256c30afdb9, a więcej informacji w KB979347 tutaj: http://support.microsoft.com/kb/979347.

Internet Facing Deployment (IFD) – co to jest i jak skonfigurować CRM pod IFD?

Tak dużo osób ma problem z poprawną konfiguracją IFD, że postanowiłem ją wreszcie opisać. Dodatkowo postaram się wytłumaczyć w tym poście co jest czym w konfiguracji CRM’a przez internet. Mam nadzieję, że się przyda.

Co to jest IFD?
IFD (Internet Facing Deployment) to nowy (pojawił się w wersji 4.0) model instalacji i konfiguracji Dynamics CRM 4.0. W tym modelu nie jest używana domyślna autentykacja domenowa (Windows Integrated), ale autentykacja oparta o formularze (Forms authentication). Scenariusz IFD stosuje się wtedy, kiedy do CRM użytkownicy chcą dostawać się przez internet, bez połączeń VPN.

Czym różni się wdrożenie z IFD od tego bez IFD?
Przede wszystkim Dynamics CRM 4.0 skonfigurowany jako Internet Facing Deployment (IFD) dostępny będzie dla użytkowników, którzy są poza domeną, w której jest zainstalowany CRM. CRM skonfigurowany jako IFD cechuje się następującymi zmianami:

  • plik web.config zawiera informację o rodzaju autentykacji typu ServiceProviderLicenseAgreement oraz informację o szyfrowaniu klucza (dla CrmTicket authentication)
  • rejestr na serwerze jest zmieniony i aktualizowany jest klucz IfdInternalNetworkAddress mówiący o tym, dla których użytkowników ma być używany który rodzaj autentykacji (tak naprawdę dla jakich adresów)
  • tabela DeploymentProperties ma uzupełnione 3 nowe wartości zawierające dane o zewnętrznym adresie CRM

Jak poprawnie skonfigurować IFD?
Jeszcze niecałe 2 lata temu konfiguracja IFD opierała się o dostarczanie instalatorowi albo CRM’owi odpowiednich plików XML. Teraz całą konfigurację IFD można wykonać za pomocą narzędzia z graficznym interfejsem. Narzędzie, o którym mowa to CRM 4 IFD Tool dostępne tutaj: http://download.microsoft.com/download/4/e/f/4ef5f568-7320-4861-a947-47baf0966537/crm40ifdtool.zip.

  1. Po uruchomieniu CRM 4 IFD Tool na serwerze wybieramy typ autentykacji na IFD + On Premise:

  2. Pod spodem wpisujemy adresy i maski podsiecie, z których użytkownicy mają logować się „wewnętrznie”, tzn poprzez „normalne” logowanie domenowe:
  3. W okienkach dotyczących IFD wpisujemy zewnętrzny adres CRM’a. Wpisujemy tu tylko domenę i ewentualnie port, bez nazwy organizacji! CRM odpowiednio doda nazwę organizacji w ramach domeny, którą wpiszemy. Oczywiście nie muszę chyba dodawać, że zalecany jest HTTPS

  4. Uzupełniamy wewnętrzny adres CRM’a (adres zostanie automatycznie wczytany z ustawień CRM’a):

  5. Aplikujemy zmiany w IFD Tool („File” / „Apply changes”) i od tej pory mamy CRM’a, do którego użytkownicy dostający się z wewnątrz sieci będą się autentykować domenowo, a pozostali użytkownicy poprzez Forms’y.

Pamiętajcie o DNS’ach, otwarciu odpowiednich portów, a w przypadku SSL’a także o certyfikatach, żeby nie wkurzać użytkowników monitami o niepoprawnych certyfikatach…

WDI 2010 – prelekcja o Microsoft Dynamics CRM

W tym roku mam przyjemność wystąpić na konferencji Warszawskie Dni Informatyki 2010 (WDI 2010) – http://www.wdi2010.pl/ z prelekcją na temat Microsoft Dynamics CRM. Wykład odbędzie się podczas drugiego dnia konferencji, tj. 17.03.2010 około godz. 13:00.
Podczas wykładu postaram się pokazać Dynamics CRM jako platformę do bardzo szybkiego tworzenia aplikacji biznesowych. Skupię się na tym, co lubię, czyli budowaniu rozwiązań opartych o platformę. Z uwagi na fakt, że odbiorcami prelekcji nie muszą być profesjonaliśći zajmujący się Microsoft Dynamics CRM na co dzień prezentacja ukaże tworzenie rozwiązania od początku i na każdym poziomie z wykorzystaniem wszystkich możliwości rozszerzania, jakie daje Dynamics CRM.
Zapraszam na WDI 2010!

Błąd „Object reference not set to an instance of an object”

Błąd „Object reference not set to an instance of an object” może pojawiać się w wielu kontekstach w przypadku pisanych przez nas plug-in’ów. Wtedy jednak możemy sami poprawić napisany przez siebie kod. Niestety… błąd ten pojawia się również w plug-in’ie napisanym przez Microsoft, który jest częścią normalnego „execution flow” w szczególnych przypadkach.
Jeśli podczas zapisywania rekordu macie błąd „Object reference not set to an instance of an object„, a w pliku śledzenia (trace) znajdziecie następujące fragmenty:

AssemblyName: Microsoft.Crm.ObjectModel.MultiCurrencyPlugin, Microsoft.Crm.ObjectModel
i
Microsoft.Crm.Sdk.InvalidPluginExecutionException: Object reference not set to an instance of an object.

…to padliście ofiarą nienaprawionego do tej pory przez Microsoft błędu. Błąd ten pojawia się, kiedy utworzycie jakiekolwiek pole typu money na dowolnym obiekcie. CRM automatycznie dodaje wtedy atrybut systemowy exchangerate i od tej pory dołącza do obiektu plugin przeliczający wartość z pola walutowego do waluty bazowej.
Problem zaczyna się, kiedy usunięte zostanie pole walutowe i w obiekcie nie ma już pól typu money. CRM zapomina bowiem… odrejestrować plug-in’a i nie usuwa atrybutu exchangerate, a nadal próbuje liczyć wartość w walucie bazowej, oczekując wartości z chociaż jednego pola walutowego. I… NullPointerException gotowy :) .

Rozwiązanie:
W obiekcie, na którym pojawia się ten błąd, dodajcie jakiekolwiek pole typu money. Pole nie musi być widoczne na formatce, ważne, żeby było atrybutem tego obiektu.