Monday, July 11, 2011

Microsoft Dynamics CRM 2011 - DeletionStateCode Missing


La nuova versione CRM 2011 porta in sé un certo numero di modifiche, di cui più o meno si è parlato.
Una di cui non si è detto quasi niente non è neppure così banale, per chi sviluppa personalizzazioni. 


DeletionStateCode
In CRM 4.0, esiste la colonna DeletionStateCode, su ogni entità, a livello di database, e che ci dice quando un record è stato eliminato. I suoi valori sono: 
- 0 indica il record è in stato attivo nel database, 
- 2 il record è stato contrassegnato per la rimozione, quando il Deletion Job verrà eseguito
- 1 il record non è utilizzato. 
Schedulando il servizio di Deletion, vengono rimossi dalle tabelle tutti i record con DeletionStateCode = 2.
Per fortuna o purtroppo, il servizio spesso non parte o dà problemi o lascia qualche record.

Quando sviluppiamo personalizzazioni in CRM, bisogna tener conto della colonna DeletionStateCode dei record, ad esempio per escludere dalle query quelli che sono "in cancellazione" e non più validi.
Inoltre, la proprietà rende facile il recupero di dati erroneamente cancellati, o determinare chi li ha cancellati.


CRM2011
Nel 2011 CRM, 'DeletionStateCode' non esiste più... 
Quando si elimina un record, si elimina e basta. 
Non non c'è alcuna traccia del record cancellato. 
Questo significa che non occorre includere il controllo del DeletionStateCode nella vostra personalizzazione. 

Il problema è che, se si desidera tornare indietro e recuperare i vecchi record, è necessario eseguire un ripristino di una versione di backup del database. E se volete vedere chi ha cancellato cosa, è necessario utilizzare un audit logging.


Sviluppo personalizzazioni
L'impatto sul nuovo è zero, ma una migrazione porta alcuni problemi e accorgimenti da attuare.Sulle personalizzazioni, occorre togliere ogni riferimento al DeletionStateCode dal codice, dai report o dalle query.


Migrazioni
Inoltre, se avete pianificato un aggiornamento da CRM 4.0 al CRM 2011, il consiglio è quello di eseguire il servizio di Deletion manualmente, prima di aggiornare, e controllare che tutti i record con DeletionStateCode = 2 siano stati effettivamente eliminati dal sistema. 
Se rimangono alcuni record con lo stato a 2, quando il sistema viene aggiornato, quando si accede in CRM 2011, magicamente riappaiono come record attivi!!