Il MSCRM 3.0 è dotato di un modello ad oggetti che può essere utilizzato per interfacciarsi con il prodotto e, anche, per estenderne le funzionalità. Come ogni buon prodotto Microsoft, anche il CRM 3.0 è dotato del suo bel SDK scaricabile da questo link.
Nel SDK è presente una directory di esempi (sdk samples) tra i quali ho trovato due buoni esempi per utilizzare la tecnica del "callout" (calloutsample e calloutsample2, che fantasia eh! :D). Tramite un classe che deriva da CrmCalloutBase è possibile intercettare degli eventi quali i "pre" e i "post" salvataggi, aggiornamenti, cancellazioni, ecc.
L'assembly che deriva dalla compilazione del codice per usare il callout non utilizza lo stesso processo in memoria del MSCRM 3.0, percui non ne riesce a condividere il file di configurazione. Da qui sorge il problema: come passare parametri di configurazione dall'esterno?
Una soluzione possibile è quella di utilizzare un file XML ed inserire lì dentro i valori necessari all'assembly. Ma dove copiare questo file XML? L'esempio del SDK offre una semplice funzione che richiama la classe RegistryKey per leggere una chiave di registro dove il MS CRM 3.0, dopo l'installazione, copia il path in cui è stato installato.
Peccato, però, che l'esempio, corredato anche di readme.doc non spieghi che può capitare che l'utente che utilizza il MSCRM 3.0 non abbia i privilegi per poter accedere alla lettura delle chiavi del registro. Non siamo tutti amministratori!
Il codice incriminato è:
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM", true);
Nel caso riscontriate anche voi questo tipo di errore basterà cambiare l'ultimo parametro della OpenSubKey in false e tutto filerà liscio. Infatti, il parametro indica se si vuole accedere in scrittura al registro di sistema (true) oppure no (false).
A presto!