Отчеты
02
Ноя
10

Использование диаграмм на формах MS CRM

Сегодня приспособим Reporting Services для генерации информации (в виде диаграмм) для форм MS CRM. А выводить ее, как Вы уже догадались будем через iFrame. Итак:

  • Откройте Visual Studio (в данном примере будет использоваться 2008 версия) и создайте новый Report Server Project. Далее щелкните правой кнопкой по папке Reports в Solution Explorer — Add — New Item… — и выберите Report;
  • В области Report Data щелкните New — Data Source — справа от поля Connection string щелкните по кнопке Edit и задайте параметры подключения к Вашему SQL сервер. Ок;
  • Щелкните по источнику данных правой кнопкой мыши — Add Dataset – в поле Query введите:
    select
    	'Возможная сделка' as 'Type',
    	count(*) as 'Kolvo',
    	sum(estimatedvalue) as 'Summa'
    from FilteredOpportunity
    where accountid = @id
    group by accountid
    
    UNION ALL
    
    select
    	'Предложение' as 'Type',
    	count(*) as 'Kolvo',
    	sum(totalamount) as 'Summa'
    from FilteredQuote
    where accountid = @id
    group by accountid
    
    UNION ALL
    
    select
    	'Заказ' as 'Type',
    	count(*) as 'Kolvo',
    	sum(totalamount) as 'Summa'
    from FilteredSalesOrder
    where accountid = @id
    group by accountid
    

    Этот запрос возвращает данные в таком виде:

    Type Kolvo Summa
    Возможная сделка 2 2500,00
    Предложение 3 3760,00
    Заказ 1 470,00

    Они формируются только для одного бизнес-партнера, id которого мы будем передавать в строке URL;




  • На левой панели инструментов перетащите основную область диаграмму (Chart). Удалите у диаграммы легенду (щелкните по легенде правой кнопкой и Delete Legend). В правую добавочную область диаграммы перетащите поле Type, а в верхнее поле Kolvo;
  • Включите отображение числовых данных на диаграмме – щелкните по изображению диаграммы правой кнопкой мыши — Show Data Labels. Уберем заливку и границу для подложки диаграммы – щелкните правой кнопкой мыши по границе подложки диаграммы и выберите Chart Properties – перейдите на закладку Fill и выберите в качестве цвета No Color, затем перейдите на закладку Border и в качестве стиля линии укажите None. Также щелкните правой кнопкой мыши рядом с диаграммой – Chart Area Properties – перейдите на закладку Fill и выберите No Color. Ну, и на последок зададим цвет для всего фона: на панели Properties в ниспадающем списке выберите Report, а затем для его свойства BackgroundColor задайте значение #eaf3ff;





  • Создайте еще одну, точно такую же диаграмму справа от текущей, но на этот раз поместите в верхнее добавочную область поле Summa. Легенду не удаляйте. Остальные свойства задайте точно такими же;
  • Подгоните размер холста под размер диаграмм и задайте для них заголовки (если хотите);
  • Перейдите на вкладку Preview, чтобы посмотреть на результат (перед тем как диаграммы построятся Вам необходимо передать им GUID какой-либо записи бизнес-партнера);
  • Сохраните отчет: находясь на вкладке Design перейдите File — Save <название отчета>.rdl as — и сохраните куда-нибудь отчет;


  • Откройте менеджер отчетов Reporting Services (по дефолту это http://<сервер отчетов>/reports — щелкните по ссылке Передать файл — выберите сохраненный файл и ОК;
  • Теперь откройте созданный отчет через ReportViewer. Для этого перейдите по ссылке http://<сервер отчетов>/reportserver — далее щелкните по имени созданного отчета. Он сформируется. Скопируйте строчку URL – она нам далее понадобится;



  • Откройте CRM – далее форму Бизнес-партнера – добавьте новый раздел, а на него поле iFrame. Для него задайте следующие свойства:
    • Имя: grag
    • URL: about:blank
    • Снимите галку «Ограничить использование сценариев между кадрами»
    • На вкладке Форматирование задайте число строк, отключите отображение прокрутки и снимите галку «Отображать границу»
  • На онлоад формы повесьте такой скрипт:
    if (crmForm.ObjectId)
    crmForm.all.IFRAME_graf.src='http://crm2008/ReportServer?%2fReport&rs%3aCommand=Render&id=' + crmForm.ObjectId + '&rc%3aToolbar=false';
    

    Этот скрипт динамически формирует URL iFramе’а. URL задается в таком формате:

    строчка URL скопированная из адресной строки браузера при просмотре отчета в ReportViewer (http://crm2008/ReportServer?%2fReport&amp;rs%3aCommand=Render) + crmForm.ObjectId (т.е. GUID текущее записи) + &amp;rc%3aToolbar=false (а этим мы просто скрываем панель инструментов в ReportViewer)
  • Публикуем и смотрим (запись должна быть сохранена прежде чем отобразятся диаграммы – иначе у нее просто не будет GUID’а)




Исхоники проекта на Visual Studio 2008. Обязательно измените параметры подключения к скулю!

Комментарии (10)
  • Роман 02.11.2009

    Доброго дня, есть проблемка
    как сделать прозрачный фон диаграмм как на последней картинке

    и как убрать не читаемую жирность текста

    спасибо

  • slivka_83 02.11.2009

    Добрый день 🙂

    Фон не прозрачный 🙂 просто его цвет равен цвету фона формы, а именно #eaf3ff. Задается на панели Properties в ниспадающем списке для свойства BackgroundColor объекта Report.

    А вот для Chart Properties (щелчек правой кнопкой по границе фона диаграммы) и Chart Area Properties (щелчек правой кнокой рядом с самой диаграммой) нужно задать прозрачный фон и границу.

    Ну, и для самого iFrame’а нужно убрать отображение границы.

    А по поводу шрифта… наверно нужно поиграться с параметрами шрифта легенды…

  • Роман 02.11.2009

    Спасибо! с цветом понял
    а вот со штифтами не помогло 🙁

  • екатерина 02.11.2009

    а подскажите как правильно сделать, чтоб отбиралось crmForm.ObjectId
    как надо писать
    «SELECT actualvalue FROM FilteredOpportunity WHERE customerid =_____________»
    что писать на месте пробела??

  • Анатолий 02.11.2009

    Здравствуйте Слава. Подскажите если не трудно — к серверу отчетов доступа нет, в связи с IFD, а как формируется URL отчета, обычного, точнее даже ID этого отчета, т.е. собственно если не использовать сервер отчетов а вызывать отчет из непосредственно https://суперфирма.ru/crmreports/viewer/viewer.aspx?id=………… то как можно вычислить этот ID? если это вообще можно.

  • slivka_83 02.11.2009

    Добрый день 🙂

    1. А как свзяан IFD и сервер отчетов? 🙂 IFD это фича CRM и не имеет никакого отношения к SSRS. Сайты SSRS также как и любые другие можно опубликовать в инете 🙂

    2. А по вашему вопросу: сформируйте отчет и нажмите Ctrl + N 🙂 и в адресной строке будет Ваш ID 🙂

  • Анатолий 02.11.2009

    Здравствуйте Слава.
    1. Дело в том, что провайдер при развертывании запретил доступ к SSRS (мы арендаторы CRM).
    2. Дело в том, что после того как я сформирую отчет и нажму Ctrl + N, — в адресной строке будет id именно этого, данного отчета, а вопрос собственно как этот id формировать динамически, из формы, если это возможно……
    Спасибо. 🙂

  • slivka_83 02.11.2009

    Добрый день.

    Что значит «динамически»? Этот id постоянный — таким и должен быть.

  • Анатолий 02.11.2009

    Здрасте, словом динамически я имел в виду вопрос: можно ли как то с формы, скриптом, вызвать обычный отчет, сформированный для этой формы. При этом не пользуясь доступом к SSRS, и при этом сам отчет должен формироваться из файла отчета (*.rdl)
    Спасибо.

  • slivka_83 02.11.2009

    Добрый день…
    На ум приходит только кликнуть как нибудь по кнопке формирования отчета с помощью JS 🙂

*

code