sto costruendo un'applicazione angolare che è in esecuzione come una risorsa web su Dynamics 2013.Dynamics 2013 Accesso Pagina entità è difficile da accedere con vista iframe basato
l'applicazione viene eseguita mediante un pulsante, che si aggiunge alla commandContainer utilizzando banco di lavoro del nastro che poi quel bottone chiama un Xrm.Internal.openDialog
Tutto questo funziona bene fino a quando ho voglia di iniziare a utilizzare le entità esposte da Xrm.Page.Data
Fondamentalmente le mie corse pulsante nel contesto della pagina principale delle dinamiche tuttavia le entità sono dentro un iframe che ha base sulla pagina in cui mi trovo ha un ID e un nome diversi.
Quindi, utilizzando un semplice selettore non riesco a ottenere il suo contenuto Finestra e iniziare a utilizzare le Entità.
#crmContentPanel ha sempre pochi iframe in esso a partire da # contentIFrame0 a #contentIFrame (n) e non posso mai sapere quale iframe è quello con Entità in esso.
Qual è la migliore pratica, flusso di lavoro associato con lo sviluppo di applicazioni in questo ambiente? Come posso accedere facilmente e in modo affidabile al frame corretto che contiene le entità della pagina principale e lavorare con loro.
Forse lo script si trova nella posizione sbagliata e deve essere immesso nell'area del contenuto principale in modo che abbia accesso diretto al Xrm corretto? Come posso ottenerlo?
Inoltre, una volta che riesco ad accedere a questi dati, come posso passare facilmente questi dati alla mia applicazione angolare che viene eseguita nella finestra di dialogo come dalla documentazione che ho letto che la finestra di dialogo è consentita solo 1 stringa di query param e deve si chiamano dati. Non sarebbe sufficiente che la mia applicazione inizi a utilizzare $routeParams
. E non penso che l'uso di archiviazione locale o di sessione sia una buona pratica. Qual è l'approccio corretto in questa situazione. Codice
Campione del mio script pulsante:
function runSendSender() {
// Content Iframe Entity data:
var contentFrameXrm = $('#crmContentPanel')
.find("iframe#contentIFrame0...n")[0]
.contentWindow['Xrm'];
// even if above selector was consistent across pages
// I need to send over much more than this one Id :(
var data = contentFrameXrm.Page.data.entity.getId();
var src = "/WebResources/concep_/ConcepDynamicsApp/ConcepDynamicsApp.html?data=" + data;
var DialogOptions = new Xrm.DialogOptions();
DialogOptions.width = 800;
DialogOptions.height = 500;
Xrm.Internal.openDialog(src, DialogOptions, null, null, CallbackFunction);
function CallbackFunction(returnValue) { }
}
Qualche dettaglio in più
Quando digito quanto segue nella console posso volte (in modo casuale) leggere il titolo del modulo:
$('#crmContentPanel').find("iframe#contentIFrame0")[0].contentWindow['Xrm'].Page.ui.get_formTitle();
Ma lo stesso codice dalla funzione di risorsa Web associata non può accedere all'iframe e agli errori:
Can not Cannot read property 'contentWindow' of undefined.
Perché l'iframe non è accessibile tramite lo script di risorsa e in che modo è possibile accedere al contesto e al titolo/id corretto.
Non è possibile accedere alle entità CRM tramite XRM. Quando scrivi JavaScript su un modulo stesso, usi 'Xrm.Page.Data' per manipolare i dati sul modulo per quell'entità. Il tuo Webresource deve utilizzare l'id che stai trasmettendo per caricare i dati necessari (di solito fatto tramite OData) e procedere da lì. – Nicknow
Ciao Nick, grazie, ma lo stesso problema sta nel recuperare l'ID da Xrm mentre lo script viene eseguito nel contesto della pagina principale, ma l'Xrm con le informazioni di identificazione del modulo si trova all'interno di un altro iframe senza id fissa nelle pagine in dinamica. Come ottengo l'id in modo coerente? – XGreen