AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2013, 18:11   #1  
Blog bot is offline
Blog bot
Участник
 
22,640 / 777 (71) +++++++
Регистрация: 28.10.2006
axforum blogs: "С днем рождения" и другие напоминалки. Еще один вариант реализации
Источник: http://axforum.info/forums/blog.php?b=392
==============

Различные напоминания о приближении значимых дат являются классическим примером мигрени интегратора. Основная проблема заключается в том, что все мы стараемся оставаться в стеке знакомых нам технологий, которые уже используются на проекте. В результате, часто приходится изобретать какой-то костыль, чтобы сделать решение чуть более переносимым, или поддерживаемым.

Технически, любая реализация напоминалки должна реализовывать 3 основных компонента:
  • Планировщик. Осуществляет бесконечный цикл запуска запланированных заданий
  • Слой работы с данными. В идеальном случае параметризуемое подключения для реализации сколь-нибудь сложных выборок
  • Средство доставки, редактор шаблонов. Набор средств, позволяющих формировать текстовку сообщений и осуществлять доставку напоминаний
Технически, мне очень нравится идея и реализация заложенная в SSIS Integration Toolkit for Microsoft Dynamics CRM. SSIS пакет можно выполнять Агентом по расписанию любой гибкости, а сам тулкит реализует удобные средства подключения к CRM, запуска Fetch запросов и запуска стандартного Workflow на полученных данных. По гибкости, это пожалуй самое мощное решение которое только можно себе представить. Есть и минусы: оно очень платное, так что его вряд ли удастся применить на всех проектах. Ниже я предлагаю другую реализацию с использованием технологий MS SQL Server, которая окажется бесплатной для обладателей Enterprise редакции этого продукта. :)

И сразу к сути: Data-Driven Subscriptions. "Подписки управляемые данными" - это опция SSRS (начиная с 2005 версии), которая позволяет выполнять запуск и доставку отчета с параметрами полученными из отдельной выборки данных. Иными словами, работает это так:
  • Пишется отчет, который принимает один входной параметр - идентификатор именинника. Отчет производит нужную выборку данных и реализует формирование текста уведомления.
  • Пишется запрос, который возвращает идентификаторы именинников и почтовый адрес ответственного за них пользователя.
  • В диспетчере отчетов настраивается подписка, которая выбирает текущих именинников, запускает отчет с параметром и отправляет почту на адрес возвращенный запросом.
Просто и элегантно. Кстати, это средство можно использовать и для внешних рассылок. Теперь рассмотрим пошаговый процесс реализации такого уведомления.

1. Создайте проект отчетов
Для этого запустите Business Intelligence Studio в составе дистрибутива SQL Server.



2. Создайте отчет
Я не рекомендую пользоваться мастером отчетов, поэтому выберите пункт Add New Item, в открывшемся окне выберите пункт Report:



3. Установите подключение к данным
В настройках укажите подключение к базе данных CRM



4. Создайте набор данных
Используйте следующий запрос:



5. Создайте параметры отчета.
Создайте скрытые обязательные параметры отчета с именами CRM_URL и ContactId (если не был создан автоматически).



Так как CRM_URL не будет автоматически передаваться системой, требуется указать значение по умолчанию для этого параметра. Значение должно быть в следующем формате:
X++:
http:<font color="green">//crmserver...en.aspx</font>
6. Сформируйте текст сообщения
Создайте текстовое поле с наполнителем в формате HTML:



Используйте следующий код в качестве выражения:
X++:
= String.Format("Contact {1} celebrates birthbay on {2}", Parameters!CRM_URL.Value & "?ID={" & Parameters!ContactId.Value.ToString() & "}&LogicalName=contact", First(Fields!fullname.Value, "BDays"), CDate(First(Fields!birthdate.Value, "BDays")).ToShortDateString())
Так как в выражение используется приведение даты к строке, могут возникнуть проблемы с форматом отображаемых данных. Чтобы этого избежать, укажите русский язык в настойках отчета:



7. Оформите отчет как вам нравится
Я использовал картинки в составе ресурсов SDK:



8. Разместите отчет в CRM или на сервере отчетов
Так как отчет не будет запускаться из CRM нет принципиальной разницы, включен он в решение CRM или нет. Если вы сохранили отчет в CRM, опубликуйте его для внешнего использования:



В случае с SQL 2012, при публикации может произойти ошибка "не задан параметр filterxml". В этом случае придется публиковать его на сервере отчетов вручную.

9. Настройте источник данных с учетными данными хранимыми на сервере
Зайдите в меню управления отчетом в веб приложении Reporting Services и перейдите в раздел Источник данных:



Необходимо указать источник с учетными данными хранимыми на сервере. В противном случае, к отчету невозможно будет создать подписку.

Убедитесь что учетная запись имеет достаточные привилегии на доступ к базе контактов.

10. Создайте подписку управляемую данными
Перейдите на вкладку "Подписки" и нажмите кнопку "Создать подписку управляемую данными":



11. Настройте параметры выборки данных подписки
Так как в предыдущем шаге мы использовали источник данных встроенный в отчет, необходимо будет повторить эту операцию для настройки подключения, которое будет использовать сама подписка. Строку подключения можно скопировать из настроек самого отчета.



12. Настройте запрос выборки данных для подписки
Введите следующий запрос:
X++:
DECLARE @startdate AS datetime = GETUTCDATE()DECLARE @Interval AS INT = 30SELECT c.contactid AS [ContactId],u.internalemailaddress AS [MailTo]FROM FilteredContact as cINNER JOIN FilteredSystemUser as uON .ownerid = u.systemuseridAND u.internalemailaddress is not nullWHERE DATEDIFF(day, @startdate, DATEADD(year, YEAR(@startdate) - YEAR(c.birthdate), c.birthdate)) = @Interval
Параметр @Interval определяет за сколько дней до дня рождения необходимо уведомить пользователя. Технически ничего не мешает получать его значение из кастомного поля контакта.

Убедитесь что он выполняется. В противном случае проверьте настройки подключения на предыдущем шаге.



13. Укажите параметры подписки
Укажите поле выборки подписки, которое содержит адрес отправки



Настройте прочие поля, например, тему сообщения

14. Настройте параметры отчета запускаемого подпиской
Укажите корректный адрес сервера CRM в параметре CRM_URL, или используте значение по умолчанию.

Укажите поле выборки ContactId для параметра отчета ContactId. В этом и заключается суть самого подхода: подписка выбирает кого уведомить и о чем, остальное делает сам отчет.

Технически, можно передавать в отчет все необходимые данные. В этом случае он может вообще обойтись без источника данных и не делать лишние запросы к базе. Хотя такой подход оправдан с точки зрения производительности, такой отчет сложнее настраивать и поддерживать, так как для внесения изменений недостаточно будет обновить сам файл отчета, а придется проходить по всем шагам мастера создания подписки и вносить правки в запрос и мапинг параметров.

15. Настройте расписание
Так как наш запрос не учитывает выходные и праздники, необходимо настроить отчет на ежедневный запуск:



Для отладки можно указать разовый запуск на ближайшее время.

16. Готово
Сохраните подписку и она начнет свою работу по расписанию. Вы будете видеть результаты ее работы в разделе подписок отчета:



Как видите, ничего сложного, хотя и достаточно муторно.


Источник: http://axforum.info/forums/blog.php?b=392
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: "Глубокие" запросы на гридах формы. Blog bot Dynamics CRM: Blogs 0 06.10.2012 01:11
Невозможно загрузить файл или сборку "microsoft.crm.sdk" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат. ZooY Dynamics CRM: Разработка 2 29.06.2011 01:38
sanjayjain: My 1st Windows Phone 7 App: Top DCRM Blogs Blog bot Dynamics CRM: Blogs 0 04.04.2011 12:11
Ещё один "сложный" запрос Atani DAX: Программирование 5 30.12.2003 11:48
Насколько "живучи" другие системы ? Adekamer Сравнение ERP-систем 28 15.09.2003 17:19
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:27.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.