我有一个自定义实体,它是"子账户" CRM实体"账户" "子帐户"是指账户(公司)的子公司
我有一个简单的报告,显示"子账户的详细信息" (单一子公司)
这就是为什么,每次用户必须填写"子帐户名称时,我都会添加一个过滤参数。过滤报告。
因为我在"子帐户"上运行报告。直接页面,我发现在报告网址中有" id = ..........."和"记录= ............."使用不可读的长文本,我在数据库中找到了这些长文本,这正是" id"当前"子帐户"
我想知道,如果id可以作为默认参数传递到报告中,那么用户就不必自己填充参数。
请告知是否有可能?怎么样?
答案 0 :(得分:0)
是的,有可能。您需要在“子帐户”功能区中添加一个按钮,并编写一些JavaScript来构造URL并在新窗口中打开该URL。如果您还没有,我建议您专门为此实体创建一个JavaScript webresource,其名称类似于subaccounts_main_library.js。将下面的代码粘贴到库中,输入报告的名称并保存/发布。将按钮添加到功能区时,需要设置该命令以触发runReport()
功能。
您还需要下载最新的jQuery(2.1.1)和JSON2库,然后将每个库作为Web资源上传。
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/
希望这会帮助你。如果您需要任何其他帮助,请与我们联系。