Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot access Xrm.Page.data from within HTML web resource in CRM 2011

I'm trying access the Xrm.Page.data object from within an HTML web resource that I have inserted onto a form in CRM 2011. However, depending on how I try to access the Xrm entity, I find that it is undefined or that Xrm.Page.data is null. The code for the web resource is as follows:

<!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've accessed Xrm.Page.data successfully from within a JavaScript function that is part of a library that fires upon a form event (for instance, Form.Load). It's just when it's embedded in an HTML web resource on the form that I run into this problem. Can anyone explain what I'm doing wrong, and if there is actually a way to access Xrm.Page.data in that way that I would like to do?

Thank you.

like image 571
severalservals Avatar asked Feb 14 '14 21:02

severalservals


People also ask

Is XRM page deprecated?

Page is deprecated, parent. Xrm. Page will continue to work in case of HTML web resources embedded in forms as this is the only way to access the form context from the HTML web resource. Allows access to the global context without going through the form context.

What is formContext in Mscrm?

The Client API form context (formContext) provides a reference to the form or to an item on the form, such as, a quick view control or a row in an editable grid, against which the current code is executed. Earlier, the global Xrm. Page object was used to represent a form or an item on the form.


2 Answers

Try to access Xrm using following syntax:

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

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

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

like

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

From your sample code.

like image 194
Andrew Butenko Avatar answered Oct 01 '22 07:10

Andrew Butenko


This works for when you have a web resource that is loaded within an iframe/dialog. It gets access to the parent frame, then looks for all available frames, and checks which frame has

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;
    }
});   
like image 35
TWilly Avatar answered Oct 01 '22 08:10

TWilly