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.

Update Rollup 9 dla Microsoft Dynamics CRM 4.0

Dzisiaj wyjątkowo wcześniej przed grupą produktową – wreszcie mam czas dzielić się z Wami wiedzą, zanim inni to zrobią :) . Otóż, dziś ukaże się Update Rollup 9 dla Dynamics CRM 4.0. Rollup nie tak rewolucyjny jak Rollup 7, ale nadal warty uwagi.
Update Rollup 9 oczywiście zawiera wszystkie poprawki z wcześniejszych rollup’ów i różnych fix’ów dostępnych w KB. Poza tymi poprawkami, UR 9 zawiera szereg nowych zmian, m.in.:

  • naprawiony błąd, kiedy eksportowało się arkusz dynamiczny w Excel ze środowiska wystawionego przez internet, a w arkuszu brakowało GUID’a rekordów
  • poprawiony błąd w Email Routerze, który powodował czasem, że nie śledziły się wszystkie emaila, jeśli czas na maszynie z ruterem był inny niż na Exchange Server’ze
  • nie będzie już sypania błędami w Trace’ie typu „User not found”, kiedy pula aplikacji CRM’a działała na koncie domenowym
  • usunięty błąd w instalatorze, który powodował, że podczas opcji „Napraw” usuwała się rola „Platform Server” :)

Update Rollup 9 nie wymaga instalacji żadnych innych rollup’ów na serwerze, ale wymaga co najmniej Update Rollup 7 na klientach!.
Update Rollup 9 jest do ściągnięcia tutaj: http://www.microsoft.com/downloads/details.aspx?displaylang=pl&FamilyID=5869f2b3-d1a0-4f71-8be3-fde6e8053a2e, a więcej informacji można znaleźć tu: http://support.microsoft.com/default.aspx?kbid=977650.

Przypisywanie rekordów do kolejki – naprawdę przypisywanie?

Jak pewnie większość z Was wie, rekordy posiadane przez użytkownika w Dynamics CRM 4.0 mogą być przypisywane (assign) innym użytkownikom oraz udostępnione (share) użytkownikom lub zespołom. W Dynamics CRM 4.0 nie można przypisywać do zespołu ani żadnego innego rekordu niż użytkownik (w „5″ będzie można). Ale czy na pewno?
Mniejsza część z Was może już zauważyła, że każde działanie (acitivity) i sprawę (case) można „przypisać” do kolejki:

Po takim „przypisaniu” dane działanie trafia do odpowiedniej kolejki i może być stamtąd zabrane przez odpowidniego użytkownika. Ok, to skoro jest „przypisane” do kolejki to zmienia się właściciel, tak? Nie. Właściciel działania lub sprawy przypisanej do kolejki pozostaje taki, jak był!

O co więc chodzi?! Ano chodzi o to, że działania są w pewien sposób „współdzielone” z kolejką, a nie do niej przypisywane! Są i pozostają współdzielone do momentu, kiedy użytkownik nie zaakceptuje danego działania i nie przypisze ich naprawdę do siebie. Wtedy przestają być współdzielone z kolejką, a stary właściciel zmienia się na nowego. Łatwo to zauważyć, „przypisując” konkretne działanie do kolejki, nie będąc jego właścicielem… Działanie pozostanie przypisane do starego właściciela, ale stanie się też widoczne w kolejce publicznej dla innych użytkowników.

Wniosek? Zamiast mówić o przypisywaniu spraw i działań do kolejek, należałoby raczej mówić o „udostępnianiu” ich kolejkom. Nazwanie udostępniania działań i spraw do kolejki „przypisywaniem” jest po prostu błędne, naganne, bzdurne, mylące, niepotrzebne, bezsensowne i powodujące bałagan w głowach użytkowników :) .

Update Rollup 9 dla Microsoft Dynamics CRM 4.0 – zapowiedź

… wyjdzie już jutro :) , czyli u nas w piątek w nocy. Na żywo opiszę co się będzie działo i podmienię post ;P