【问题标题】:MS Dynamics CRM 2013 - SSRS report get current id as parameterMS Dynamics CRM 2013 - SSRS 报告获取当前 ID 作为参数
【发布时间】:2014-08-25 10:35:15
【问题描述】:

我有一个自定义实体,它是 CRM 实体“帐户”的“子帐户” “子账户”是指账户(公司)的子公司

我有一个关于显示“子帐户”(单个子公司)详细信息的简单报告

这就是为什么,我添加了一个过滤参数,每次用户都必须填写“子帐户名称”来过滤报告。

由于我是直接在“子账户”页面运行报表,发现在报表URL中,有“id=............”和“records=...... .........." 带有不可读的长文本,我在数据库中发现这些长文本正是当前 "子帐户" 的 "id"

我想知道,是否可以将id作为默认参数传递到报告中,这样用户就不必自己填写参数了。

请告知是否可以?以及如何?

【问题讨论】:

    标签: reporting-services parameters report crm


    【解决方案1】:

    是的,这是可能的。您需要向“子帐户”功能区添加一个按钮并编写一些 JavaScript 来构建 URL 并在新窗口中打开该 URL。如果您还没有,我建议您专门为此实体创建一个 JavaScript 网络资源,命名为 subaccounts_main_library.js。将下面的代码粘贴到库中,输入报告的名称并保存/发布。当您将按钮添加到功能区时,需要设置该命令以触发 runReport() 函数。

    您还需要下载最新的 jQuery (2.1.1) 和 JSON2 库,然后将它们作为网络资源上传。

    function runReport() {
        openReport('<put the name of your report here>');
    }
    
    function openReport (reportName) {
        var oDataSetName = "ReportSet";
        var columns = "ReportId";
        var filter = "Name eq '" + reportName + "'";
        retrieveMultiple(oDataSetName, columns, filter, onSuccess);
        currReportName = reportName;
    }
    
    var currReportName;
    
    function onSuccess (data, textStatus, XmlHttpRequest) {
    
        var serverUrl = Xrm.Page.context.getServerUrl();
    
        if (data && data.length > 0) {
            var serverUrl = Xrm.Page.context.getServerUrl();
            var id = Xrm.Page.data.entity.getId();
            var etc = Xrm.Page.context.getQueryStringParameters().etc;
            var entityId = id.replace('{', '').replace('}', '');
            var reportId = data[0].ReportId.replace('{', '').replace('}', '');
            var url = serverUrl + "/crmreports/viewer/viewer.aspx?action=run&context=records&helpID=" + currReportName + ".rdl&id=%7b" + reportId + "%7d&records=%7b" + entityId + "%7d&recordstype=" + etc + "&p:InvoiceId=" + entityId;
            window.open(url, "reportwindow", "resizable=1,width=950,height=700");
        }
    }
    
    function retrieveMultiple(odataSetName, select, filter, successCallback) {
    
        var serverUrl = Xrm.Page.context.getServerUrl();
        var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
        var odataUri = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "?";
    
        if (select) {
            odataUri += "$select=" + select + "&";
        }
    
        if (filter) {
            odataUri += "$filter=" + filter;
        }
    
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            datatype: "json",
            url: odataUri,
            beforeSend: function (XMLHttpRequest) {
                XMLHttpRequest.setRequestHeader("Accept", "application/json");
            },
            success: function (data, textStatus, XmlHttpRequest) {
                if (successCallback) {
                    if (data && data.d && data.d.results) {
                        successCallback(data.d.results, textStatus, XmlHttpRequest);
                    }
                    else if (data && data.d) {
                        successCallback(data.d, textStatus, XmlHttpRequest);
                    }
                    else {
                        successCallback(data, textStatus, XmlHttpRequest);
                    }
                }
            },
            error: function (XmlHttpRequest, textStatus, errorThrown) {
                if (XmlHttpRequest && XmlHttpRequest.responseText) {
                    alert("Error while retrieval ; Error – " + XmlHttpRequest.responseText);
                }
            }
        });
    }
    

    我不能把上面的代码归功于我。我们要感谢 Rajeev Pentyala 在他的博客上发表的精彩文章。 http://rajeevpentyala.wordpress.com/2012/04/10/opening-a-report-using-ribbon-button-in-crm-2011/

    希望这对您有所帮助。如果您需要任何其他帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多