Griglie secondarie in Microsoft Dynamics CRM
- On 30 Novembre, 2017
- crm, dynamics, microsoft dynamics crm
Visualizzare in una griglia secondaria le Campagne relative ad un Contatto
Una delle esigenze più comuni nella personalizzazione del Form del Contatto in Microsoft Dynamics CRM è quella di visualizzare in una griglia secondaria le Campagne che hanno coinvolto il contatto. Pertanto l’amministratore di sistema, entra in modifica del Form, aggiunge una “Griglia Secondaria” ma quando nel menù a tendina cerca l’entità delle Campagne correlate, avrà un amara sorpresa : non esiste!
Questo perchè non vi è nessuna relazione diretta tra il Contatto (lo stesso discorso vale anche per Account e Leads) e le Campagne. Piuttosto il contatto è relazionato con le Liste di Marketing di cui fa parte e dalle quali sono state generate le Campagne.
Come faccio quindi ad ottenere quanto desiderato?
E’ possibile, con una piccola funzione in Javascript, filtrare la nostra griglia secondaria per ottenere solo le Campagne a cui il Contatto ha partecipato. Lo scopo della nostra funzione sarà quello di integrare una query scritta utilizzando il linguaggio FetchXML, opportunamente impostata. Eseguendo la funzione al caricamento della pagina del Form del Contatto, avremo la nostra sotto griglia filtrata.
Vediamo passo-passo come procedere.
Creazione della griglia secondaria
Per questo si procede come al solito. Selezioneremo però “Tutti i tipi di Record”, Entità “Campagne” e la visualizzazione “Campagne Elenco”. Disponiamo la nostra griglia nel form dove più ci aggrada.
Attenzione al nome della sotto griglia che verrà poi utilizzato nella funzione, nel nostro caso “ContattoCampagne”.
Creazione della query FetchXML
Se siete degli esperti programmatori non avrete difficoltà a crearla, ma se invece siete solo degli utilizzatori “avanzati” vi spiegherò come riuscirci allo stesso modo facilmente. Per costruire la query utilizziamo la Ricerca Avanzata cliccando sull’imbuto in alto a destra nel ribbon.
Nella nostra ricerca avanzata costruiremo lo scheletro della nostra query, che anche se avrà bisogno di qualche piccola modifica, sarà per il 90% già pronta. Ecco i filtri da impostare :
Come vi dicevo sceglieremo le campagne generate tramite tutti gli elenchi Marketing che abbiano all’interno il Contatto del Form. Nella nostra ricerca avanzata il contatto sarà uno qualsiasi, la modifica che successivamente faremo, sarà sostituire il contatto “campione” con una istruzione che permetta di inserire il campo ID Contatto specifico del form aperto.
Una volta testate le nostre impostazioni, visualizzando i risultati cliccando sul punto esclamativo in rosso, potremo salvare la FetchXML cliccando sullo specifico pulsante “Scarica FetchXML” nel Ribbon.
Questo il codice che otterremo :
Evidenziata in giallo la riga che dovrà essere sostituita con questa :
<condition attribute=’contactid’ operator=’eq’ uitype=’contact’ value='” + rootContactID +”‘ />
Creazione della funzione Javascript
Non ci rimane adesso che modificare la nostra funzione javascript con un qualsiasi editor di testo ed inserirla nel CRM vedremo poi come. Ecco la funzione che ho chiamato GetCampagne() opportunamente commentata :
function GetCampagne() {
// ottiene l’oggetto sotto griglia delle Campagne
//Attenzione il nome ContattoCampagne va sostituito con il nome da voi attribuito alla sotto griglia!!
var contactChildCampagneGrid = window.parent.document.getElementById(“ContattoCampagne”)
// ottiene l’ID del contatto corrente
var rootContactID = Xrm.Page.data.entity.getId();
// effettua un Check per vedere se la sotto griglia è ‘pronta”
if (contactChildCampagneGrid == null){
setTimeout(‘GetCampagne()’,1000);
return;
}
// Qui va inserita la FetchXML per ricavare le Campagne a cui il contatto ha partecipato, creata prima in ricerca avanzata
var fetchXml = “<fetch version=’1.0′ output-format=’xml-platform’ mapping=’logical’ distinct=’true’>”;
fetchXml += “<entity name=’campaign’>”;
fetchXml += “<attribute name=’name’ />”;
fetchXml += “<attribute name=’codename’ />”;
fetchXml += “<attribute name=’statuscode’ />”;
fetchXml += “<attribute name=’campaignid’ />”;
fetchXml += “<link-entity name=’campaignitem’ from=’campaignid’ to=’campaignid’ visible=’false’ intersect=’true’>”;
fetchXml += ” <link-entity name=’list’ from=’listid’ to=’entityid’ alias=’aa’>”;
fetchXml += ” <link-entity name=’listmember’ from=’listid’ to=’listid’ visible=’false’ intersect=’true’>”;
fetchXml += “<link-entity name=’contact’ from=’contactid’ to=’entityid’ alias=’ab’>”;
fetchXml += “<filter type=’and’>”;
fetchXml += ” <condition attribute=’contactid’ operator=’eq’ uitype=’contact’ value='” + rootContactID +”‘ />”;
fetchXml += “</filter>”;
fetchXml += “</link-entity>”;
fetchXml += “</link-entity>”;
fetchXml += “</link-entity>”;
fetchXml += “</link-entity>”;
fetchXml += “</entity>”;
fetchXml += “</fetch>”;
// siamo sicuri che il controllo è pronto, settiamo i dati ed effettuiamo un refresh della sotto griglia
if (contactChildCampagneGrid.control != null){
contactChildCampagneGrid.control.SetParameter(“fetchXml”, fetchXml);
contactChildCampagneGrid.control.refresh();
}
else{
setTimeout(‘GetCampagne()’,1000);
}
}
Attenzione quando inserite le righe della vostra FecthXml a sostituire i doppi apici con i singoli apici.
Inserire la funzione Javascript nel Form
Apriamo il form in modifica e clicchiamo in proprietà modulo
Cliccate su aggiungi in Libreria Modulo
Cliccate su nuovo a meno che non abbiate già una vostra libreria js :
Compilate in questo modo la nuova Risorsa Web:
E infine cliccate sul pulsante “Editor di Testo” e incollate la funzione js :
Cliccate su “OK” poi “SALVA” e infine pubblicate e cliccate sulla x per chiudere.
Ritornati sulla schermata precedente è cliccate su Aggiungi
Per inserire adesso la nostra funzione sul caricamento del Form del contatto cliccate in basso su aggiungi
Inserite nel campo Funzione il nome della funzione Javascript
Cliccate su “OK” , ancora “OK”, salvate il Form e Pubblicate.
Ecco infine nel Form dei Contatti la griglia con la Campagna alla quale il contatto ha preso parte.
0 Comments