Добрый день,
Просьба поделиться опытом/наработками/идеями, как сделать следующую вещь:
Есть раздел проекты, в самой карточке проекта (сам раздел пока не отличается от коробочного) есть поле Ответственный по проекту (стадии или работе), и Исполнитель проекта/стадии/работы. Задача в том что бы отсылать почтовые (!) уведомления Отечественному и Исполнителю за день до истечения плановой даты завершения проекта. Решено было уходить от задач, что бы упростить процесс.
При этом исполнители могут быть не пользователи системы Террасофт, а просто контакты с заполненными e-mail'ами.
Первые мысли это ковырять таймер с wnd_Main, и крутить по аналогии с напоминаниями. Возможно кто-то уже проходил этот путь?
Нравится
Получилась примерно такая тема.
Запрос sq_ProjectToSendMail формирует список по которым необходимо отослать уведомления
SELECT [tbl_Project].[ID] AS [ID], [tbl_Project].[OwnerID] AS [OwnerID], [tbl_ProjectManHour].[ContactID] AS [ExecutorContactID], [tbl_ProjectManHour].[AccountID] AS [ExecutorAccountID], [tbl_Project].[EstimatedStartDate] AS [EstimatedStartDate], [tbl_Project].[EstimatedDueDate] AS [EstimatedDueDate] FROM [dbo].[tbl_Project] AS [tbl_Project] LEFT OUTER JOIN [dbo].[tbl_ProjectManHour] AS [tbl_ProjectManHour] ON [tbl_ProjectManHour].[ID] = [tbl_Project].[ExecutorManHourID] WHERE(datediff(dd,EstimatedStartDate,EstimatedDueDate) = :DaysToRemind AND NOT [tbl_Project].[StateID] IN (:StageCompletedID, :WorkCompletedID, :ProjectCompletedID))
Далее формируем письма по шаблону
var Dataset = Services.GetNewItemByUSI('ds_ProjectToSendMail'); Dataset.Open(); while (!Dataset.IsEOF) { var ProjectID = Dataset('ID'); var MailParams = new Object(); MailParams.AutoSend = true; MailParams.RecordID = ProjectID; MailParams.Silent = true; var OwnerContactID = Dataset('OwnerID'); var ExecutorContactID = Dataset('ExecutorContactID'); MailParams.Address = GetMailAddressesByContactID(ExecutorContactID); MailParams.CopyAddress = GetMailAddressesByContactID(OwnerContactID); var TamplateID = '{...}'; //Напоминания исполнителю и ответственному по проекту SendEmailByTemplate(TamplateID,MailParams); Dataset.GotoNext(); } Dataset.Close();
Тут возникают вопросы:
1. В данной реализации письма в тихую будут отправляться с активного акаунта Outlook. В компании стоит Exchange Server, и завести технический ящик internal.crm@mydomain.com не проблема, как сделать так что бы письма отправлялись с технического ящика, и при этом привязывались к записи в разделе проекты (сейчас они привязываются к проекту/стадии/работе).
2. Как сделать так что бы данный скрипт выполнялся какой либо службой, без участия пользователя. Я к тому что возможно ли реализовать или портировать что-то типа JobManager'a в 3.3.2
Просьба подсказать как данные уведомления реализованы у Вас в компании Terrasoft? На сколько я понимаю реализована либо служба которая запускается по намеченному времени и запускает кусок скрипта.
Либо же второй вариант: на каком то из серверов настроена техническая почтовая учетка на Outlook, постоянно запущен Terrasoft и Outlook, далее по таймеру реализована отсылка почтовых уведомлений по шаблону.
При желании JobManager можно попробовать портировать и на 3.3.2.
Если скрипт на стороне SQL, то можно настроить встроенный планировщик БД.
Да, MSSQL и Oracle тожем можно научить отправлять почту.
"Зверев Александр" написал:Да, MSSQL и Oracle тожем можно научить отправлять почту.
SQL Server конечно умеет отправлять почты, но тут возникает вопрос на сколько сложно будет сделать такой шаблон как в TS и корректно туда проставить все данные, в дополнение в текущей задаче мне необходимо в письмо еще и вставлять исполнителей (деталь Команда) с клиента все это корректно отсылается по кнопочке "Отослать уведомление", а вот сделать настолько же красиво в SQL Server - большой вопрос.
Просьба ответить на мой предыдущий пост
"АльфаКрыса" написал:Просьба подсказать как данные уведомления реализованы у Вас в компании Terrasoft? На сколько я понимаю реализована либо служба которая запускается по намеченному времени и запускает кусок скрипта.
Либо же второй вариант: на каком то из серверов настроена техническая почтовая учетка на Outlook, постоянно запущен Terrasoft и Outlook, далее по таймеру реализована отсылка почтовых уведомлений по шаблону.
Здравствуйте.
В MS SQL можно отправлять почту на триггере. В таком случае, будет доступна запись к примеру INSERTED, со всеми полями: INSERTED.OwnerID, а значит запросом можно вытащить любые доп. поля с деталей.
По поводу Вашего вопроса:
второй вариант (с постоянно запущенным Террасофтом) мне не особо нравится, но как вариант конечно годится.
Я бы порекомендовал написать консольное приложение на C#, с тем самым "куском" скрипта, который производит отправку уведомлений. Далее создать BAT-ничек, и в нем реализовать запуск этой программы по таймеру (каждый 30 мин, 60 мин и т.д.).