Отчеты
13
Сен
7

Открытие отчета по кнопке

Сегодня прикрутим к форме объекта (Контакт) кнопку, которая будет открывать определенный 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 отчета.




Комментарии (7)
  • Никита 13.09.2012

    Добрый день, а не могли бы Вы подсказать как будет выглядеть URL открываемого отчета, если записей будет две или более?

  • slivka_83 13.09.2012

    Здравствуйте.

    Думаю что такие записи передаются методом POST.

  • Антон 13.09.2012

    Привет, а как в отчете использовать переданный гуид?

  • slivka_83 13.09.2012

    Добрый день.
    Там вроде стандартной фильтрации достаточно http://mmcrm.ru/?p=539

  • Антон 13.09.2012

    А для кастомных объектов, тоже работает CRMAF_ ?

  • slivka_83 13.09.2012

    Да, кончено.
    Для каждого объекта CRM, в том числе и для кастомного, создается фильтрованная вьюха в SQL.

  • Антон 13.09.2012

    Спасибо!

*

code