javascriptdynamics-crmshowmodaldialog

Pass parameters to Mscrm.CrmDialog


I use Mscrm.CrmDialog to show a new dialog with a webresource in MS Dynamics CRM 2013. The advantage of this method is that this dialog works in Firefox, Chrome, etc. too and window.showModalDialog doesn't because it is deprecated.

Anyway I need to pass parameters to the webresource. With window.showModalDialog this was no problem but now when using Mscrm.CrmDialog I couldn't find any way to pass parameters. The constructor has a parameter 'customWindowParameters', but how to access these parameter(s) from the web resource?


Solution

  • Declare global variable in the script from where you calling the dialog (Mscrm.CrmDialog) like:

    var variable1 = 5;
    var object1 = { Id: 1, name: "SWA" };
    
    function ribbon_OpenDialog() {
        var clientUrl = Xrm.Page.context.getClientUrl();
        var url = clientUrl + "/WebResources/new_myWebResource.html";
        //CRM 2015 SP 1
        var dialogwindow = new parent.Mscrm.CrmDialog(parent.Mscrm.CrmUri.create(url), this, 450, 175);
        //For CRM less than CRM 2015 SP 1
        //var dialogwindow = new Mscrm.CrmDialog(Mscrm.CrmUri.create(url), this, 450, 175);
        dialogwindow.show();
    }
    

    The above globally declared variables can be accessed in the webresource through window.getDialogArguments() as in the following sample html webresource

    <html>
    <head>
        <title></title>
        <script src="ClientGlobalContext.js.aspx" type="text/javascript"></script>
        <script type="text/javascript">
            var dialog;
            if (window.getDialogArguments() != null) {
                dialog = window.getDialogArguments();
            }
            var v1 = dialog.variable1;
            var o1 = dialog.object1;
    
            function doSomthing() {
                alert("variable1= " + v1 + "\n object1.Id=" + o1.Id + "\n object1.name=" + o1.name);
            }
        </script>
        <style type="text/css">
            .dvrow {
                clear: both;
                margin: 2px auto 0 auto;
                padding: 10px 0 10px 0;
                width: 96%;
            }
            .headerTitle {
                font-family: Segoe UI Light, Segoe UI, Tahoma, Arial;
                font-size: 27px;
                font-weight: lighter;
            }
        </style>
    </head>
    <body>
        <form id="formPopup">
            <div id="spinner">
            </div>
            <div class="dvrow">
                <div class="headerTitle">
                   Test dialog Popup
                </div>
                <div class="row">
                    <button title="Run" id="btnRun" onclick="doSomthing();" type="button">Run</button>
                </div>
            </div>
        </form>
    </body>
    </html>
    

    Click Run button results:
    enter image description here