Posted on 3. June 2011

Embedding CRM reports in IFrames using the CRM2011 Report Viewer

It is quite common for users to request that reports be included in Iframes on forms, or in Dashboards. Although this can be done by pointing the Iframe directly at SQL Reporting services, this essentially bypasses the CRM Report connector and relies on the user authenticating directly with SQL Reporting Services and SQL Server. If you have SQL Server and Reporting Services on the same server or Kerberos is set up correctly, this isn't a problem. If however your users can only access the report through the CRM Front end, then you need to use the CRM Report review rather than the Reporting Services native one.

1) Create a html web resource named 'ReportViewer' or similar

<html>
<head>
<title></title>
<script src="ClientGlobalContext.js.aspx" ></script>
<script type="text/javascript">
    function submitForm() {
        var form = document.forms[0];
        var context = GetGlobalContext();
        form.action = context.getServerUrl() + '/CRMReports/rsviewer/reportviewer.aspx';
        form.uniquename.value = context.getOrgUniqueName();

        var query = window.location.search.substring(1);
        var vars = query.split("&");
        var idSet = false;

        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            switch (pair[0]) {
                case 'data':
                    var params = unescape(pair[1]).split("&");
                    for (var j = 0; j < params.length; j++) {
                        var param = params[j].split("=");
                        switch (param[0]) {
                            case 'id':
                                form.id.value = param[1];
                                idSet = true;
                                break;
                            case 'hideparams':
                                form.PromptAreaCollapsed.value = param[1];
                                break;
                            case 'iscustomreport':
                                form.iscustomreport.value = param[1];
                                break;
                            default:
                                // Add any other values as report parameters
                                var paramInput = document.createElement('input');
                                paramInput.setAttribute('type', 'hidden');
                                paramInput.setAttribute('name', 'p:' + param[0]);
                                paramInput.setAttribute('value', param[1]);
                                form.appendChild(paramInput);
                                break;
                        }
                    }
            }
        }
        

        if (idSet) {
            form.submit();
        }
        else {
            // Show message
            var dvMessage = document.createElement("div");
            dvMessage.innerHTML ="Report Id is not set";
            form.appendChild(dvMessage);

        }
    }
    
</script>
</head>
<body onload="submitForm()">
<form action ="" method="post">
<input type="hidden" name="id" value="{xxx}" />
<input type="hidden" name="uniquename" value="" />
<input type="hidden" name="iscustomreport" value="true" />
<input type="hidden" name="reportName" value="Report Name" />
<input type="hidden" name="isScheduledReport" value="false" />
<input type="hidden" name="PromptAreaCollapsed" value="false" />
</form>
</body>
</html>


2) Include in a Dashboard or Webresource on a form using the following Web Resource Properties (The Customer Parameter Data field):

Id={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} (make sure you add the curly braces)

You can also pass any report parameters you have by adding on :

param1=value1&param2=value2

If you want to have the report parameters hidden by default use:

&hideparams=true

 

So the whole data field would be something like:

Id={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}&hideparams=true&param1=value1&param2=value2

I don't want to spoil all your fun – so I'll leave you to add the query to lookup the id by passing in the report name rather than the ID!

Have fun!

Comments

michael michael United States
1:18 PM on Monday, June 06, 2011


Useful other control released via MS Market Place,

http://dynamics.pinpoint.microsoft.com/en-US/applications/dashboard-reporting-control-for-microsoft-dynamics-crm-2011-12884910688

pingback msdn.eeyogo.com
8:18 AM on Wednesday, October 24, 2012

Pingback from msdn.eeyogo.com

Hide toolbar in reportviewer | MSDN @ EEYOGO

pingback scoop.it
12:44 PM on Wednesday, February 20, 2013

Pingback from scoop.it

Develop 1 Limited Blog | Embedding CRM reports in IFrames using the CRM2011 Report Viewer | Microsoft Dynamics CRM On The Road | Scoop.it

pingback marcododaro.wordpress.com
2:53 PM on Wednesday, February 20, 2013

Pingback from marcododaro.wordpress.com

Develop 1 Limited Blog | Embedding CRM reports in IFrames using the CRM2011 Report Viewer « Marco's Blog

pingback dynamicscrmpros.com
3:44 PM on Tuesday, June 18, 2013

Pingback from dynamicscrmpros.com

Creating a Custom Interactive Grid on a Microsoft Dynamics CRM Entity Form using SSRS - Microsoft Dynamics CRM Professionals - Microsoft Dynamics CRM Professionals

Comments are closed