2014-02-14 4 views
6

Ich versuche Zugriff auf das Xrm.Page.data-Objekt innerhalb einer HTML-Webressource, die ich in CRM 2011 in ein Formular eingefügt haben. Allerdings abhängig Bei dem Versuch, auf die Xrm-Entität zuzugreifen, finde ich, dass sie nicht definiert ist oder dass Xrm.Page.data null ist. Der Code für die Web-Ressource ist wie folgt:Zugriff auf Xrm.Page.data aus HTML-Webressource in CRM 2011 möglich

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<script type="text/javascript"> 

function OpenMyApp(e){ 
    alert('Xrm defined: ' + (typeof Xrm != 'undefined')); 
     // The line above returns the string 'Xrm defined: false' 

    alert('window.top.opener.parent.Xrm defined: ' + (typeof window.top.opener.parent.Xrm != 'undefined')); 
     // The line above returns the string 'window.top.opener.parent.Xrm defined: true' 


    alert('frames[0].Xrm defined: ' + (typeof frames[0].Xrm != 'undefined')); 
     // the line above will actually throw an error and stop the script, because the frames collection is empty. 

    alert(window.top.opener.parent.Xrm.Page.data); 
     // the line above returns null. 

    // var myId = Xrm.Page.data.entity.attributes.get("new_field_i_want").getValue(); 
     // The line above is what I would like to see work. 

    e.preventDefault(); 
} 
</script> 

</head> 
<body> 
<a onClick="OpenMyApp(event);" href="#">My Link</a> 
</body> 
</html> 

I Xrm.Page.data erfolgreich innerhalb einer JavaScript-Funktion zugegriffen haben, die Teil einer Bibliothek ist, die auf einer Form-Ereignis ausgelöst wird (beispielsweise bilden. Belastung). Es ist nur, wenn es in eine HTML-Webressource in dem Formular eingebettet ist, auf dem ich auf dieses Problem stoße. Kann mir jemand erklären, was ich falsch mache, und ob es tatsächlich eine Möglichkeit gibt, auf Xrm.Page.data auf diese Weise zuzugreifen, die ich gerne machen würde?

Vielen Dank.

window.parent.Xrm.Page.getAttribute()... 

window.parent.Xrm.Page.getControl()... 

window.parent.Xrm.Page.context... 

wie

alert(window.parent.Xrm.Page.data.entity.attributes.get("new_field_i_want").getValue()); 

Von Ihrem Beispielcode:

Antwort

13

Try xRM mit folgenden Syntax zuzugreifen.

+0

auch Objekt abzurufen, wo Rks für Mscrm.CrmUri – GPGVM

+0

Ich habe das gleiche Problem. Ich führe dies in Chrome 37 durch. Ich habe eine WebRessource in einem IFrame auf einem Entitätsformular angezeigt. Ich habe alle Kombinationen ausprobiert, kann aber das Xrm-Objekt immer noch nicht in die Finger bekommen. Hilfe wäre willkommen! –

2

Dies funktioniert, wenn Sie eine Webressource haben, die in einen Iframe/Dialog geladen wird. Es erhält Zugriff auf den übergeordneten Frame, sucht dann nach allen verfügbaren Rahmen und Kontrollen, die Rahmen hat

Xrm.Page.data! = Null

-Code ...

$.each(parent.window.frames, function(i,val){ 
    if (parent.window.frames[i].Xrm.Page.data != null) { 
      parent.window.frames[i].Xrm.Page.data.entity.attributes.get('ownerid').setValue([{ id: '{' + sourceKey + '}', name: name, entityType: "systemuser" }]); 
      parent.window.frames[i].Xrm.Page.data.entity.save(); 
      break; 
    } 
}); 
+2

'break' funktioniert nicht für' $ .each' –

1

Basierend auf TWILLY Antwort, habe ich die Funktion unter den Xrm

GetXrm: function() { 

    var frame = $.grep(parent.window.frames, function (e) { 
     if (e.Xrm.Page.data) 
      return true; 
    }); 

    return frame[0].Xrm; 
}