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

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

  1. bigcahuna pisze:

    A jest sposób na odchudzenie bazy ? Bo rekordy mimo usunięcia dalej znajdują się w bazie danych.

    • Zgadza się. Rekordy usuwane w CRM’ie nigdy nie są usuwane od razu w bazie. Mają za to znacznik (deletionstatecode), który świadczy o tym, że zostały usunięte. Usuwane są dopiero później i asynchronicznie przez tzw deletion process.

      Usuwanie rekordów z bazy jest niewspierane i niepolecane…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>