Отправка оповещения определенным лицам

Здравствуйте!

У меня такая проблема. Мне необходимо осуществить передачу оповещения определеенным лицам, после того как завершится определенная "Задача" в бизнес-процессе. Я знаю кому я буду отправлять оповещения. Я думаю это осуществить с помощью почты. Например, завершилась опеределенная задача в БП и генеральному директору пришло письмо, что такая-та задача завершена.

Как я предполагаю это сделать. В "События" OnAfterExecute, прописать функцию которая будет вызывать шаблон письма. Но письмо не будет отправляется автоматически.
Что вы можете посоветовать?

Нравится

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

Посмотрите вот этот пост.

Спасибо, изучаю.

Благодарю за ссылку.

Но не могу понять при выполнении функции выдает такую ошибку:
"UserName"-определение отсутствует.

//-----------------------------------------------------------------------------
// scr_Script
//-----------------------------------------------------------------------------     
function Main(){
        var FilePath = "C:\Doc\Contract";
        var Attachments = new Array(FilePath);
        SendEmailUsingCDO('yandex.ru', 'floxy8@yandex.ru',
                'floxy8@yandex.ru', 'Test CDO Message send', 'Hello. I"m here',Attachments);
}
function SendEmailUsingCDO(SMTPServer, SendTo, SendCC, SendFrom, Subject, Body, Attachments, SMTPUserName, SMTPUserPassword, SMTPUseSSL) {
			var Result = true;
	        try {
	        	var cdoMessage = new ActiveXObject("CDO.Message");
                var cdoConfig = new ActiveXObject("CDO.Configuration");
                var cdoFields = cdoConfig.Fields;
                cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
                cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer;
                cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10;
                var cdoAnonymous = 0; // Do not authenticate
                var cdoBasic = 1; // basic (clear-text) authentication
                var cdoNTLM = 2; // NTLM
                // Если указан логин и пароль, то нужна авторизация на SMTP-сервере           
                if (!IsEmptyValue(UserName) && !IsUndefined(UserName) &&
                        !IsEmptyValue(UserPassword) && !IsUndefined(UserName)) {
                        UseSSL = (UseSSL? UseSSL : false);
// Type of authentication, NONE, Basic (Base64 encoded), NTLM
                        cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic;
                        // Your UserID on the SMTP server
                        cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = UserName;
                        // Your password on the SMTP server
                        cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = UserPassword;
                        // Server port (typically 25)
                        cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
                        // Use SSL for the connection (False or True)
                        cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = UseSSL;
                }
                cdoFields.Update();
                cdoMessage.Configuration = cdoConfig;
                var cdoBodyPart = cdoMessage.BodyPart;
                cdoBodyPart.ContentTransferEncoding = "8bit";
                cdoMessage.To = SendTo;
                cdoMessage.From = SendFrom;
                cdoMessage.Subject = Subject;
                cdoMessage.TextBody = Body;
                if (Assigned(Attachments)) {
                        for (var i = 0; i < Attachments.length; i++) {
                                cdoMessage.AddAttachment(Attachments[i]);
                        }
                }
                cdoMessage.send();
        } catch (e) {
                var Message = FormatStr("Возникла ошибка при формировании и отсылке письма через Outlook:\r%1"+
                        "\rВозможно, на компьютере не установлен MS Outlook. Обратитесь за помощью к администратору.",
                        e.message);
                ShowWarningDialog(Message);
                Result = false;
        } finally {
                return Result;
        }
}

В скрипт SendEmailUsingCDO добавила передачу параметров SMTP-сервера для авторизации под пользователем:
- Имя пользователя
- Пароль
- Поддержка SSL

Порт вроде проставлен по умолчанию 25.

Подскажите в чем моя ошибка, благодарю заранее.

Здравствуйте,
Посмотрите пожалуйста на сигнатуру функции
в посте http://www.community.terrasoft.ua/forum/topic/5597#comment-24189

function SendEmailUsingCDO(SMTPServer, SendTo, SendCC, SendFrom, Subject, Body, Attachments, UserName, UserPassword, UseSSL)

у вас же

function SendEmailUsingCDO(SMTPServer, SendTo, SendCC, SendFrom, Subject, Body, Attachments, SMTPUserName, SMTPUserPassword, SMTPUseSSL)

Предлагаю вам в коде поменять UserName на SMTPUserName

Поменяла в коде UserName на SMTPUserName.

Но возникает ошибка. Скриншот с ошибкой выложила.
Дело в том, что интеграция настроена. Тип параметра SMTP для yandex, установлен. Может проблема в том, что когда происходит интеграция outlook с terrasoft, необхождимо вести пароль входа в terrasoft....

"Капустина Валентина" написал:Но возникает ошибка.

Ошибка переводиться как: Транспорту не удалось подключиться к серверу.

"Капустина Валентина" написал:Может проблема в том, что когда происходит интеграция outlook с terrasoft, необхождимо вести пароль входа в terrasoft

Для работы этой функциональности вообще не нужна интеграция ТС с Outlook.

"Кошкаров Андрей" написал:Поменяла в коде UserName на SMTPUserName.

Обратите внимание, что нужно вернуть правильное название и для других параметров.
Также в приведенном вами коде вы пропустили параметр SendFrom при вызове функции.

Вроде все исправила, при запуске возникает ошибка: "Синтаксическая ошибка в имени файла, имени папки или метки."
И когда я меняю путь файла, возникает ошибка: "Не удается найти указанный файл".

Попробуйте написать

var FilePath = "C:\\Doc\\Contract";

Ошибка:"The system cannot find the path specified" - Система не может найти указанный путь.
Думала что-то связано с SendEmailUsingCDO, но там указано все правильно.
Может я чего-то не замечаю.

Валентина, попробуйте прописать в FilePath путь к конкретному файлу который вы хотите прикрепить к письму

Пример:

var FilePath = "C:\\Doc\\Contract\\test.txt"

"Яворский Алексей" написал:

Валентина, попробуйте прописать в FilePath путь к конкретному файлу который вы хотите прикрепить к письму

Пример:

var FilePath = "C:\\Doc\\Contract\\test.txt"


Да я это тоже пробовала. Но возникает ошибка: "the transport failed to connect to the server"
"Кошкаров Андрей" написал:

Ошибка переводиться как: Транспорту не удалось подключиться к серверу.

Обратите внимание, что нужно вернуть правильное название и для других параметров.

Также в приведенном вами коде вы пропустили параметр SendFrom при вызове функции.


Все параметры пересмотрела и исправила, указала параметр SendFrom при вызове функции. Но ошибка так и не исчезла.

Валентина, проделал все действия, описанные в http://www.community.terrasoft.ua/forum/topic/5597#comment-24189 тестировал на аккаунте gmail. Привожу пример вызова в случае smtp настроек google:

        var FilePath = "C:\\tst\\tst.txt";
        var Attachments = new Array(FilePath);                
SendEmailUsingCDO('smtp.gmail.com', 'a.yavorskiy@terrasoft.ru','a.yavorskiy@terrasoft.ru', 'alexyavorskiybpm@gmail.com', 'Test CDO Message send', 'Hello. I"m here', Attachments,
'alexyavorskiybpm@gmail.com','mypassword',true);

У меня никаких проблем не возникло

В вашем скрипте scr_Script не увидел явного ввода логина и пароля на smtp сервер.
В моем примере UseSSL = true так как gmail использует SSL

Яворский Алексей
Спасибо, большое за помощь, получилось!:)

Еще раз обращаюсь за помощью, т.к. мне необходимо функцию отправки письма активировать, после того как завершится задача в бизнес-процессе. Задаче "Action2" определила событие OnBeforeExecute, но при запуске бизнес-процесса и после завершения задачи не возникает никаких ошибок и не отправляется письмо. Подскажите, пожалуйста, что я не учла.

function Action2OnBeforeExecute(ActionItem) {
function Main(){
		var FilePath = "C:\\e\\e.txt";
      	var Attachments = new Array(FilePath); 
        SendEmailUsingCDO('....')
....
}
}

Валентина, почему бы не выполнять данные действия на событие OnAfterExecute, так как в варианте OnBeforeExecute вы определяете событие до выполнение действия Задача.
В вашем коде вы внутри Action2OnBeforeExecute определяете функцию Main(), при этом ее не вызывая, предлагаю переписать ваш скрипт следующим образом:

function Action2OnAfterExecute(ActionItem) {
                var FilePath = "C:\\e\\e.txt";
        var Attachments = new Array(FilePath);
        SendEmailUsingCDO('....')
....
}

т.е я бы определил действие OnAfterExecute для Action2 и написал бы код, указанный выше

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