Привет.
В данный момент пытаюсь сгенерировать репорт в консольном приложении. Для этого предварительно уже зарегистрировал приложение в Ажуре, успешно получаю токен и могу с ним кверить сущности через постман.
Теперь проблема с этим токен достучатся до СРМ
Насколько концептуально понимаю - надо делать два запроса
- Один на "/CRMReports/rsviewer/reportviewer.aspx"
- Второй на "/Reserved.ReportViewerWebControl.axd";
X++:
private Tuple<string, string> GetReportSession(Entity report, string parameters)
{
var name = report.GetAttributeValue<string>("reportnameonsrs");
var isCustom = name == null;
var url = "/CRMReports/rsviewer/reportviewer.aspx";
var data = new Dictionary<string, dynamic>()
{
["id"] = report.Id.ToString("B"),
["uniquename"] = "org15604879",
["reporttypecode"] = "1",
["reportName"] = "Quote Bundle Details",
["isScheduledReport"] = "false",
["CRM_FilterText"] = "Quotes",
["iscustomreport"] = isCustom.ToString().ToLower(),
["reportnameonsrs"] = name,
["CRM_Filter"] = "<ReportFilter><ReportEntity+paramname='CRM_quote'+displayname='Quotes'+donotconvert='1'><fetch+version='1.0'+output-format='xml-platform'+mapping='logical'+distinct='false'><entity+name='quote'><all-attributes/><filter+type='and'><condition+attribute='quoteid'+operator='eq'+uiname='#+mm+test+1000'+uitype='quote'+value='c63b402d-ef0a-ea11-a811-002248078004'/></filter></entity></fetch></ReportEntity></ReportFilter>"
};
var response = Encoding.UTF8.GetString(GetResponse(GetRequest("POST", url, UrlEncode(data))));
var sessionId = response.Substring(response.LastIndexOf("ReportSession=") + 14, 24);
var controlId = response.Substring(response.LastIndexOf("ControlID=") + 10, 32);
return new Tuple<string, string>(sessionId, controlId);
}
X++:
public byte[] RenderReport(Entity report, string format, string parameters)
{
var session = GetReportSession(report, parameters);
var url = "/Reserved.ReportViewerWebControl.axd";
var lcid = report.GetAttributeValue<int>("languagecode");
format = format.ToUpper();
if (format == "WORD" || format == "EXCEL")
{
format = format + "OPENXML";
}
var data = new Dictionary<string, dynamic>()
{
["OpType"] = "Export",
["Format"] = format,
["ContentDisposition"] = "AlwaysAttachment",
["FileName"] = string.Empty,
["Culture"] = lcid.ToString(),
["CultureOverrides"] = "False",
["UICulture"] = lcid.ToString(),
["UICultureOverrides"] = "False",
["ReportSession"] = session.Item1,
["ControlID"] = session.Item2
};
return GetResponse(GetRequest("GET", $"{url}?{UrlEncode(data)}"));
}
Проблема в том, что когда делаю первый запрос на /CRMReports/rsviewer/reportviewer.aspx в респонсе вижу вообще непонятную ошибку