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” ;)

Dynamics xRM Polish User Group reklamowana na świecie

Tym razem będzie mniej technicznie. Uprzejmie informuję ;) , że Dynamics xRM Polish User Group, której mam zaszczyt przewodzić, została dostrzeżona przez międzynarodową grupę użytkowników i profesjonalistów związanych z platformą Microsoft Dynamics CRM! :) 16 czerwca naszego czasu na stronie głównej amerykańskiej grupy XRMVirtual pojawił się news o naszej polskiej grupie. News znajduje się tutaj: http://www.xrmvirtual.com.

Dodatkowo na blogu Julie Yack, CRM MVP i organizatorki grup CRMUG i XRMVirtual pojawiło się trochę więcej informacji o Dynamics xRM Polish User Group (w tym opis, który miałem przetłumaczyć): http://julieyack.blogs.com/my_weblog/2009/06/xrm-user-group-in-poland.html

Dodam też, że od 15 czerwca strona grupy (http://ms-groups.pl/dxpug) dostępna jest w zupełnie nowym, świeżym i letnim układzie :) . Dodałem też ankietę do głosowania na tematy najbliższego spotkania.

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