Открытие отчета по кнопке
Сегодня прикрутим к форме объекта (Контакт) кнопку, которая будет открывать определенный CRM’ный отчет. Это сэкономит целый один клик пользователям! 🙂
Для этого нам понадобится JS Веб-ресурс с таким кодом (и именем new_openReport.js):
function openReport(reportName, reportId) { var serverUrl = Xrm.Page.context.getServerUrl(); var recordId = Xrm.Page.data.entity.getId().replace('{', '').replace('}', ''); var etc = Xrm.Page.context.getQueryStringParameters().etc; var url = serverUrl + "/crmreports/viewer/viewer.aspx?action=run&context=records&helpID=" + reportName + ".rdl&id=%7b" + reportId + "%7d&records=%7b" + recordId + "%7d&recordstype=" + etc; window.open(url, "reportwindow", "resizable=1,width=950,height=700"); }
Этот код:
- Принимает два параметра:
- Имя RDL файла (без расширения) из которого был сформирован отчет;
- И ID отчет, который можно получить из URL если запустить его традиционным способом и нажать Ctrl + N.
- Перед открытия отчета мы вычисляем:
- URL CRM сервера;
- GUID текущей записи, чтобы передать ее в отчет (при этом мы из ПГШВэа удаляем фигурные скобки);
- Из параметров URL выцепляем код текущего объекта.
- Затем формируем полный URL отчета и открываем его.
Добавьте на Ленту формы такую кнопку:
<RibbonDiffXml> <CustomActions> <CustomAction Id="OpenReport.CustomAction" Sequence="1" Location="Mscrm.Form.contact.MainTab.ExportData.Controls._children"> <CommandUIDefinition> <Button Id="OpenReport.Button" Command="OpenReport.javascriptCommand" Sequence="1" LabelText="Сводка по контакту" ToolTipTitle="Сводка по контакту" ToolTipDescription="Сводка по контакту" TemplateAlias="o1" Image32by32="$webresource:new_icon_report_32.png" /> </CommandUIDefinition> </CustomAction> </CustomActions> <Templates> <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates> </Templates> <CommandDefinitions> <CommandDefinition Id="OpenReport.javascriptCommand"> <EnableRules> <EnableRule Id="Mscrm.Enabled"/> </EnableRules> <DisplayRules /> <Actions> <JavaScriptFunction Library="$webresource:new_openReport.js" FunctionName="openReport"> <StringParameter Value="ContactReport" /> <StringParameter Value="bb362681-22fd-e111-a323-000c29cdb72e" /> </JavaScriptFunction> </Actions> </CommandDefinition> </CommandDefinitions> <RuleDefinitions> <TabDisplayRules /> <DisplayRules /> <EnableRules /> </RuleDefinitions> <LocLabels /> </RibbonDiffXml>
Помимо модификаций самой кнопки (названия, иконка, место размещения и т.д.), Вам нужно отредактировать передаваемые в JS-функцию параметры: имя RDL-файла и ID отчета.
Добрый день, а не могли бы Вы подсказать как будет выглядеть URL открываемого отчета, если записей будет две или более?
Здравствуйте.
Думаю что такие записи передаются методом POST.
Привет, а как в отчете использовать переданный гуид?
Добрый день.
Там вроде стандартной фильтрации достаточно http://mmcrm.ru/?p=539
А для кастомных объектов, тоже работает CRMAF_ ?
Да, кончено.
Для каждого объекта CRM, в том числе и для кастомного, создается фильтрованная вьюха в SQL.
Спасибо!