CRM 4.0 Implementation Guide v4.4.1

Coprawda minęło już trochę czasu od ukazania się najnowszej wersji Implementation Guide (4.4.1), ale warto o niej wspomnieć chociażby teraz. A to dlatego, że w najnowszym Implementation Guide mamy sporo nowości, m.in.:

  • od tej wersji dokument dostarczany jest też w formacie CHM (skompilowane w jeden Planning Guide, Installing Guide i Operating and Maintining Guide. Wygląda to tak:

    Microsoft Dynamics CRM 4.0 Implementation Guide
    Nawigacja i wyszukiwanie w nowym Implementation Guide jest znacznie łatwiejsza niż w poprzedniej, niedopracowanej wersji w Word

  • pojawiła się sekcja o szyfrowaniu danych w SQL Server 2008
  • pojawiła się sekcja o ustawianiu częstotliwości DeletionService
  • pojawiła się sekcja o licznikach wydajności (performance counters), które mogą przydać się przy pracy z Microsoft Dynamics CRM

Implementation Guide jest do ściągnięcia tutaj: http://www.microsoft.com/downloads/details.aspx?FamilyID=1ceb5e01-de9f-48c0-8ce2-51633ebf4714&displaylang=en. Pośród kilku wersji językowych brakuje jednak polskiej.

Podsumowanie miesiąca na forum – jestem pierwszy na świecie ;)

Ten post można zaliczyć do tych “w ramach chwalenia się” ;) . Ale tak naprawdę ma jeszcze jedno przesłanie – że gdzieś tam w necie jest forum o Microsoft Dynamics CRM 4.0, którego można użyć w celu uzyskania pomocy. Aktualnie mamy 4 fora (po angielsku):

CRMhttp://social.microsoft.com/Forums/en-US/crm
CRM Deploymenthttp://social.microsoft.com/Forums/en-US/crmdeployment
CRM Developmenthttp://social.microsoft.com/Forums/en-US/crmdevelopment
Dynamics CRM (Partner)http://social.microsoft.com/Forums/en-US/partnerdynamicscrm

Na forach wiele osób służy swoją pomocą w razie problemów. Jednym z odpowiadających jestem od krótkiego czasu ja sam. I tak się składa, że w tym miesiącu odpowiedziałem i pomogłem rozwiązać problemy największej liczbie osób, w związku z czym pozwoliło mi to zająć zaszczytne pierwsze miejsce na liście “top answerers” na forum CRM Deployment. Udało mi się pokonać wielu MVP i dziesiątki innych osób, które udzielają się na forum. To wiadomość o tyle fajna, że zwiększamy ludziom z innych krajów świadomość o tym, że Microsoft Dynamics CRM w Polsce też jest używany.
Poniżej screen z osiągnięcia :)

Microsoft Dynamics CRM forum - Deployment

Polecam wykorzystanie tych forów – są naprawdę przydatne!!!

Zamykanie szans sprzedaży programistycznie

Szanse sprzedaży, podobnie jak inne obiekty, mają tzw. stan i status (statecode i statuscode). Kiedy zamykamy szanse sprzedaży z poziomu interfejsu Microsoft Dynamics CRM, nie zastanawiamy się często, co tak naprawdę robi CRM “pod spodem”. Otóż, system zmienia wtedy stan i status konkretnej szansy sprzedaży.
Jeśli chcemy zamknąć szansę sprzedaży programistycznie (z poziomu kodu), nie zmieniamy jednak jej stanu, jak robilibyśmy to w przypadku innych obiektów. Aby zamknąć szansę sprzedaży, należy użyć jednej z dwóch klas: WinOpportunityRequest albo LoseOpportunityRequest. Obiekty te mają dwie właściwości, które powinniśmy ustawić: opportunityclose i status. Ten pierwszy obiekt reprezentuje działanie odzwierciedlające zamknięcie szansy sprzedaży. Działanie to ma szereg właściwości, które możemy chcieć ustawić, np. actualend czy actualrevenue.
Przykładowy kod może wyglądać tak (należy dodać właściwe wartości):

opportunityclose zamkniecie = new opportunityclose();
zamkniecie.opportunityid = new Lookup();
zamkniecie.opportunityid.Value = GUID_SZANSY_SPRZEDAZY;
zamkniecie.actualrevenue = WARTOSC_SZANSY_SPRZEDAZY;
zamkniecie.actualend = AKTUALNA_DATA;

WinOpportunityRequest winReq = new WinOpportunityRequest();
winReq.OpportunityClose = zamkniecie;
winReq.Status = -1; // -1 pozwoli systemowi ustawić domyślny status

crmService.Execute(winReq);

Analogicznie, można zamknąć szansę sprzedaży jako przegraną, używając LoseOpportunityRequest. Miłego programowania!

Jak usunąć więcej niż 250 rekordów na raz?

Każdy, kto pracuje z Microsoft Dynamics CRM prędzej czy później zderzy się z problemem “jak usunąć tysiąc rekordów na raz”? Zdarza się, że zapełniamy system danymi testowymi, które musimy później usunąć lub najzwyczajniej w świecie potrzebujemy usunąć kilka tysięcy rekordów dowolnego typu z jakiejś przyczyny. Ostatnio coraz więcej osób mnie o to pytało, więc postanowiłem opisać kilka sposobów. Dla tych, co potrzebują odpowiedzi po angielsku, proponuję przetłumaczyć tę stronę w LiveTranslator’ze ;)

W interfejsie Dynamics CRM, w opcjach, możemy wybrać wyświetlanie w widoku maksymalnie 250 rekordów. Usunięcie 10000 testowo utworzonych klientów nadal będzie żmudne :) = będzie wymagało od nas 40 razy zaznaczenia wszystkich rekordów i kliknięcia “Usuń”. Można zrobić to sprytniej!

Sposób 1 – usuwanie z pomocą kodu:

Jeśli lubisz kod i nie boisz się skompilować już gotowego kodu, Microsoft Dynamics CRM 4.0 udostępnia w SDK jeden przydatny request – BulkDeleteRequest. Jeszcze w Dynamics CRM 3.0 nie było możliwości usuwania wielu rekordów na raz przez wywołania web service’ów. W 4.0 to jest możliwe! Wystarczy zbudować kwerendę (QueryExpression), podać ją jako atrybut to obiektu typu BulkDeleteRequest, uzupełnić resztę właściwości i wywołać metodę Execute() w CrmService. Więcej informacji na ten temat znajduje się tutaj: http://msdn.microsoft.com/en-us/library/cc155955.aspx

 

Sposób 2 – unikaj cudownych płatnych narzędzi:

Jest pewna (niepolska) firma, która potrafiła zbić kapitał na niewiedzy użytkowników i… oferuje narzędzie, które wywołuje powyższy kod za opłatą! Ja sam zwalczam takie praktyki, dlatego nie polecam korzystania z takich narzędzi. Raczej lepiej poczytać SDK i samemu skopiować kod.

 

Sposób 3 – magiczny trick z dostosowaniami:

To jest niestety obejście, którego minusów trzebe być świadomym. Na szczęście nie ma ich wiele. Otóż, można usunąć dowolną liczbę rekordów dowolnego typu poza obiektami typów systemowych w bardzo prosty sposób – usuwając obiekt danego typu z systemu :) . Przy tym rozwiązaniu robimy backup naszych dostosowań, usuwamy obiekt, którego rekordy chcemy usunąć i… importujemy ten obiekt z powrotem :) . Do plusów tego rozwiązania należy niewątpliwie fakt, że usuniemy dowolną liczbę rekordów w super-krótkim czasie. Do minusów należy zaliczyć fakt, że obiekty custom mają tzw. ObjectTypeCode nadawany każdemu nowotworzonem obiektowi sekwencyjnie od 10000. Nasz nowy import nada naszemu obiektowi nowy numer i lepiej, żebyśmy byli świadomi w których skryptach używamy starego ObjectTypeCode =)

Mam nadzieję, że te wskazówki pomogą Wam usuwać mnóstwo danych z Waszego CRM’a! Jest jeszcze jeden sposób, który pozwala na wyświetlanie 5000 rekordów w widokach. Ale o nim nie napiszę – zbyt to “niesupportowalne” ;)

SDK 4.0.9. dla Dynamics CRM 4.0

W piątek rano pojawiło się nowe SDK, tym razem opatrzone numerkiem 4.0.9. W nowym SDK pojawił się m.in. cały opis wszystkich encji i atrybutów, który do tej pory dostępny był w metadata browser’ze, na serwerze CRM. Dodatkowo pojawiły się trzy nowe szablony projektów Visual Studio dla Microsoft Dynamics CRM, np. strona korzystająca z danych.

SDK 4.0.9 jest do ściągnięcia stąd: http://www.microsoft.com/downloadS/details.aspx?FamilyID=82e632a7-faf9-41e0-8ec1-a2662aae9dfb&displaylang=en

Strony ASP.NET rozszerzające CRM i ViewState

To, że Microsoft Dynamics CRM 4.0 jest platformą “super-rozszerzalną” wie każdy :) . Do popularnych sposobów rozszerzania należą nasze własne strony ASP.NET wyświetlane np. w pływających ramkach (iframes). Dobre praktyki nakazują umieszczanie naszych stron w folderze ISV w katalogu, do którego zainstalowane zostały pliki ze stronami używane przez Dynamics CRM (katalog CRMWeb lub dowolny wybrany przez nas podczas instalacji). Dzięki umieszczeniu stron w folderze ISV mamy dostęp do kilku ciekawych informacji przekazywanych naszym stronom przez CRM. Niestety, jest też jedna rzecz, o której warto pamiętać: fakt, że nasze strony są w podfolderze używanym przez CRM powoduje m.in., że domyślnie na nasze strony narzucane są ustawienia z web.config CRM’a. Pośród wielu ustawień jest m.in. taka linijka:

<pages buffer=”true” enableSessionState=”false” enableViewState=”false” validateRequest=”false”/>

 

Łatwo zauważyć, że przez tą linijkę nasze strony domyślnie mają wyłączony ViewState (!). Nie jest to sytuacja, której się spodziewamy… Szczególnie może zdziwić Was sytuacja, kiedy tworzycie strony i zaawansowany kod na innym środowisku. Wszystko działa, a po umieszczeniu na serwerze CRM nagle kontrolki gubią “pamięć”, co chwila dostajecie “null reference” itd. Warto wtedy sprawdzić, czy pozwalacie Waszej stronie na zarządzanie stanem (ViewState). Jeśli nie, koniecznie ustawcie to explicite. W tym celu, w kodzie strony .aspx, do pierwszej linijki, należy dodać dyrektywę EnableViewState=”true”, jak w poniższym przykładzie:

<%@ Page Language=”C#” (…) EnableViewState=”true” %>

Jeśli chcecie szyfrować zawartość ViewState, możecie dodać też EnableViewStateMac=”true”.

Miłego kodowania i mniej nerwów, jak po postback’u macie puste listy! :)

II spotkanie grupy Dynamics xRM Polish User Group

19 maja 2009, we wtorek, o godz. 18:00 w Microsoft przy Al. Jerozolimskich 195A w Warszawie odbędzie się drugie spotkanie grupy Dynamics xRM Polish User Group (DxPUG). W czasie spotkania będzie “bardzo technicznie”, bo planujemy dwie sesje o rozszerzaniu platformy Dynamics CRM 4.0. Tomek Filipowicz opowie o plug-in’ach, ich roli, cechach i sposobie pisania. Ja za to powiem trochę o UWAGA, UWAGA CRM 5.0! Na razie tylko informacje, które można przekazać, ale będziemy na pewno pierwsi :) .

Zapraszam wszystkich do rejestracji na II spotkanie grupy tutaj: Rejestracja na II spotkanie DxPUG.

Update Rollup 4 dla Microsoft Dynamics CRM 4.0

Tym razem piszę znów, zanim informacja pojawi się na blogu grupy produktowej ;) . Rano 8 maja 2009 (polskiego czasu), tzn. przedwczoraj, ukazał się kolejny zbiór poprawek i ulepszeń do Microsoft Dynamics CRM 4.0. Tym razem mamy do czynienia z Update Rollup 4.

Oczywiście Update Rollup 4 jest kumulatywny, a tzn że zawiera wszystkie poprawki, które do tej pory pojawiły się w poprzednich 3 Rollup’ach. Dodatkowo zawiera oczywiście szereg nowych fix’ów: od błędu, przez który czasem podczas korespondencji seryjnej brakuje danych w polu “Użytkownik” przez poprawkę dla błędu “Invalid argument”, który czasem pojawiał się po imporcie przepływów pracy; aż po poprawki w SDK i zmiany nazw wyświetlanych niektórych pól w konkretnych językach.

UWAGA:

Bądźcie ostrożni z aplikacją Update Rollup 4 na serwerach, gdzie jest tylko Rollup 1. Jeśli tak zrobicie, a środowisko developerskie nadal będzie miało Rollup 1, nie da się zaimpotować dostosowań. A to dlatego, że nie można eksportować i importować dostosowań między środowiskami “Rollup 1 <-> Rollup 4″.

Update Rollup 4 można ściągnąć tutaj: http://www.microsoft.com/downloads/details.aspx?FamilyID=0ddf8e83-5d9c-4fe7-9ae6-f2713a024071&displaylang=en, a więcej informacji o wszystkich poprawkach jest w tym KB 968176: http://support.microsoft.com/kb/968176.

SP2 dla Office 2007 i Dynamics CRM 4.0

Jak pewnie wiecie, 28 kwietnia ukazał się Service Pack 2 (SP2) dla Office 2007. Między innymi ulepszeniami i poprawkami, najwięcej poprawek (albo raczej “największe zmiany”) mamy dla Outlook’a. No, a skoro Outlook miał się zmienić, to dla nas – użytkowników Dynamics CRM najważniejsze jest czy zauważymy zmiany, pracując w CRM z wykorzystaniem Outlook’a. Trochę trwało to moje testowanie i wnioski (tylko i wyłącznie moje, ktoś może się nie zgadzać) są następujące:

  • dzięki temu, że Outlook 2007 z SP2 rzeczywiście nie ładuje niektórych dodatków przed uruchomieniem, program uruchamia się znacznie szybciej. A to znaczy, że dodatek dla CRM też ładuje się szybciej :)
  • wreszcie Outlook nie czeka i nie “wiesza” poczty podczas ładowania dodatku Dynamics CRM for Outlook. Wreszcie! Różnica po testach na 3 komputerach jest widoczne i wydaje się być znacząca. Po zainstalowaniu SP2 zniknął problem, przez który praktycznie niemożliwa była praca z pocztą podczas ładowania dodatku dla CRM. Pamiętacie “Outlook nie odpowiada”, kiedy ładował się klient CRM, a kliknęliście na wiadomość z listy? Nie zobaczyłem tego po zainstalowaniu SP2 ani razu!
  • Microsoft obiecał, że SP2 ograniczy liczbę upadków Outlook’a 2007 i liczbę sytuacji, w których pliki danych są “naprawiane”. Również wtedy, kiedy upadek spowodowany jest jakimś dodatkiem. I co? Okazuje się, że to znów prawda. Mimo, że klient Dynamics CRM dla Outlook kilka razy “padł” podczas okresu testowania, Outlook ani razu nie płakał jak kiedyś, że coś stało się z plikami danych. Rewelacja…

Co jeszcze daje SP2 dla Office 2007 dla użytkowników Dynamics CRM 4.0? No, może warto wspomnieć, że teraz oferty robione dla klientów za pomocą Korespondencji Seryjnej w Word’zie albo arkusze Excel z wyeksportowanymi danymi będziemy mogli zapisywać w formacie OpenDocument – odpowiednio *.odt i *.ods :-D .

Ogólnie – warto zainstalować SP2 dla Office 2007. Jeśli jeszcze go nie macie, link jest tu: http://www.microsoft.com/downloads/details.aspx?displaylang=pl&FamilyID=b444bf18-79ea-46c6-8a81-9db49b4ab6e5

Wykorzystanie WCF w kodzie po stronie klienta w CRM

Ten, kto wywołuje web service’y Microsoft Dynamics CRM z kodu na formatkach (kodu JScript, po stronie klienta) wie, jak ciężko to osiągnąć. I nie chodzi tu oczywiście o składnię czy technologię (AJAX i tyle), ale o specyfikę tego działania w CRM. Po pierwsze trzeba powtarzać mnóstwo kodu; po drugie – prawie nie da się tego kodu debugować; po trzecie – łatwo o pomyłkę; po czwarte – czasem można nieźle natrudzić się z uwierzytelnieniem.

Wael Hamze na swoim blogu opublikował wczoraj bardzo fajny postna temat wykorzystywania usług Windows Communiation Foundation (WCF) z poziomu JScript’u w interfejsie Microsoft Dynamics CRM. Post jest tutaj: http://waelhamze.com/blog/crm/crm-wcf-integration/. Warto rzucić okiem, bo zdefiniowanie sobie kilku często używanych usług w WCF i np. możliwość zwracania JScript’owych obiektów zamiast parsowania zwróconego XML’a za każdym razem powodują, że wykorzystanie WCF wydaje się bardzo ciekawą opcją.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.