Показать сообщение отдельно
Старый 26.03.2020, 16:15   #1  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Generate CRM Reports
Привет.

В данный момент пытаюсь сгенерировать репорт в консольном приложении. Для этого предварительно уже зарегистрировал приложение в Ажуре, успешно получаю токен и могу с ним кверить сущности через постман.

Теперь проблема с этим токен достучатся до СРМ

Насколько концептуально понимаю - надо делать два запроса
  • Один на "/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 в респонсе вижу вообще непонятную ошибку

Последний раз редактировалось Ion; 26.03.2020 в 16:21.