18.04.2013, 18:11 | #1 |
Участник
|
axforum blogs: "С днем рождения" и другие напоминалки. Еще один вариант реализации
Источник: http://axforum.info/forums/blog.php?b=392
============== Различные напоминания о приближении значимых дат являются классическим примером мигрени интегратора. Основная проблема заключается в том, что все мы стараемся оставаться в стеке знакомых нам технологий, которые уже используются на проекте. В результате, часто приходится изобретать какой-то костыль, чтобы сделать решение чуть более переносимым, или поддерживаемым. Технически, любая реализация напоминалки должна реализовывать 3 основных компонента:
И сразу к сути: 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, напишите личное сообщение администратору. |
|
|
|