Добрый день, Просьба поделиться опытом/наработками/идеями, как сделать следующую вещь:
Есть раздел проекты, в самой карточке проекта (сам раздел пока не отличается от коробочного) есть поле Ответственный по проекту (стадии или работе), и Исполнитель проекта/стадии/работы. Задача в том что бы отсылать почтовые (!) уведомления Отечественному и Исполнителю за день до истечения плановой даты завершения проекта. Решено было уходить от задач, что бы упростить процесс.
При этом исполнители могут быть не пользователи системы Террасофт, а просто контакты с заполненными 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 мин и т.д.).