Добрый день,
Просьба поделиться опытом/наработками/идеями, как сделать следующую вещь:
Есть раздел проекты, в самой карточке проекта (сам раздел пока не отличается от коробочного) есть поле Ответственный по проекту (стадии или работе), и Исполнитель проекта/стадии/работы. Задача в том что бы отсылать почтовые (!) уведомления Отечественному и Исполнителю за день до истечения плановой даты завершения проекта. Решено было уходить от задач, что бы упростить процесс.
При этом исполнители могут быть не пользователи системы Террасофт, а просто контакты с заполненными e-mail'ами.
Первые мысли это ковырять таймер с wnd_Main, и крутить по аналогии с напоминаниями. Возможно кто-то уже проходил этот путь?

Нравится

6 комментариев

Версия 3.3.2, так что JobManager'а тут нет

Получилась примерно такая тема.
Запрос 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 мин и т.д.).

Показать все комментарии