|
26.03.2020, 16:15 | #1 |
Участник
|
Generate CRM Reports
Привет.
В данный момент пытаюсь сгенерировать репорт в консольном приложении. Для этого предварительно уже зарегистрировал приложение в Ажуре, успешно получаю токен и могу с ним кверить сущности через постман. Теперь проблема с этим токен достучатся до СРМ Насколько концептуально понимаю - надо делать два запроса
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)}")); } Последний раз редактировалось Ion; 26.03.2020 в 16:21. |
|
26.03.2020, 16:18 | #2 |
Чайный пьяница
|
Сам таким не занимался, но вы можете посмотреть как подобное делается тут - https://github.com/bguidinger/Xrm.ReportScheduler
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Roman08 (1). |
27.03.2020, 19:41 | #3 |
Участник
|
Цитата:
Сообщение от a33ik
Сам таким не занимался, но вы можете посмотреть как подобное делается тут - https://github.com/bguidinger/Xrm.ReportScheduler
Может быть дело в секюрити АД |
|
27.03.2020, 20:53 | #4 |
Чайный пьяница
|
По правде говоря в изначальном посте кода не было. Апдейт вы выложили на 3 минуты позже, чем я выложил ссылку.
А вот по поводу самого кода - не подскажу - не было необходимости именно в такой функциональности.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.03.2020, 13:26 | #5 |
Участник
|
Значит Вы бысто отреагировали на сообщение - не видел ваш коммент. Суть проблемы была в настройках Conditional access
|
|
30.03.2020, 15:26 | #6 |
Чайный пьяница
|
А поподробнее расскажете? Интересно же.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|