Использование диаграмм на формах 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&rs%3aCommand=Render) + crmForm.ObjectId (т.е. GUID текущее записи) + &rc%3aToolbar=false (а этим мы просто скрываем панель инструментов в ReportViewer)
- Публикуем и смотрим (запись должна быть сохранена прежде чем отобразятся диаграммы – иначе у нее просто не будет GUID’а)
Исхоники проекта на Visual Studio 2008. Обязательно измените параметры подключения к скулю!
Доброго дня, есть проблемка
как сделать прозрачный фон диаграмм как на последней картинке
и как убрать не читаемую жирность текста
спасибо
Добрый день 🙂
Фон не прозрачный 🙂 просто его цвет равен цвету фона формы, а именно #eaf3ff. Задается на панели Properties в ниспадающем списке для свойства BackgroundColor объекта Report.
А вот для Chart Properties (щелчек правой кнопкой по границе фона диаграммы) и Chart Area Properties (щелчек правой кнокой рядом с самой диаграммой) нужно задать прозрачный фон и границу.
Ну, и для самого iFrame’а нужно убрать отображение границы.
А по поводу шрифта… наверно нужно поиграться с параметрами шрифта легенды…
Спасибо! с цветом понял
а вот со штифтами не помогло 🙁
а подскажите как правильно сделать, чтоб отбиралось crmForm.ObjectId
как надо писать
«SELECT actualvalue FROM FilteredOpportunity WHERE customerid =_____________»
что писать на месте пробела??
Здравствуйте Слава. Подскажите если не трудно — к серверу отчетов доступа нет, в связи с IFD, а как формируется URL отчета, обычного, точнее даже ID этого отчета, т.е. собственно если не использовать сервер отчетов а вызывать отчет из непосредственно https://суперфирма.ru/crmreports/viewer/viewer.aspx?id=………… то как можно вычислить этот ID? если это вообще можно.
Добрый день 🙂
1. А как свзяан IFD и сервер отчетов? 🙂 IFD это фича CRM и не имеет никакого отношения к SSRS. Сайты SSRS также как и любые другие можно опубликовать в инете 🙂
2. А по вашему вопросу: сформируйте отчет и нажмите Ctrl + N 🙂 и в адресной строке будет Ваш ID 🙂
Здравствуйте Слава.
1. Дело в том, что провайдер при развертывании запретил доступ к SSRS (мы арендаторы CRM).
2. Дело в том, что после того как я сформирую отчет и нажму Ctrl + N, — в адресной строке будет id именно этого, данного отчета, а вопрос собственно как этот id формировать динамически, из формы, если это возможно……
Спасибо. 🙂
Добрый день.
Что значит «динамически»? Этот id постоянный — таким и должен быть.
Здрасте, словом динамически я имел в виду вопрос: можно ли как то с формы, скриптом, вызвать обычный отчет, сформированный для этой формы. При этом не пользуясь доступом к SSRS, и при этом сам отчет должен формироваться из файла отчета (*.rdl)
Спасибо.
Добрый день…
На ум приходит только кликнуть как нибудь по кнопке формирования отчета с помощью JS 🙂