Добрый вечер!

Вопрос по работе с элементом "Задание-сценарий".



Имеем бизнес-процесс, который срабатывает по сигналу добавления текстовой записи. Как только добавляется запись, процесс считывает текст записи и формулой добавляет этот текст в некий параметр "UsrInput". Далее сценарий регулярным выражением находит текст в кавычках и отправляет этот текст в другой параметр "UsrOutput". После чего процесс дальше идет по цепочке из стандартных элементов БП.

Проблема в том, что во время обработки процесса почему-то  в журнале процессов появляется ошибка:

System.NotSupportedException: Match

Метод System.Text.RegularExpressions я в процесс добавил.

Помогите понять, пожалуйста, с чем может быть это связано?

 

Пример текста:

Диалогу присвоена категория "Тест"

Код сценария:

string message = Get<string>("UsrInput");
string pattern = "\"(.*?)\"";
Match result = Regex.Match(message, pattern);
Set("UsrOutput", result);
return true;

 

Прикрепленные файлы

Нравится

3 комментария

Через тот же https://repl.it/repls/RegalHarshDeclarations все срабатывает без ошибок, а внутри процесса никак.

Разобрался. Надо было в string превратить result

..
string result1 = result.Value;
Set("UsrOutput", result1);
return true;

 

Спасибо за упоминание сайта https://repl.it, не знал, что такой есть, пригодился.

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

Может кто-то делал автоматический разбор сообщений OUTLOOK?
Задача проста: после автозагрузки письма, автоматически прочитать тему, отправителся, получателя и главное сам текст сообщения то есть разбирать IMAGE-поле (поиск с regexp'ами).
Нужен какой-нибудь пример или ссылка.

Нравится

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

Добрый день!

На самом деле, это довольно трудоемкая задача, которая требует реализации механизма считывания данных из письма, их обработки и сохранения.

К сожалению, в рамках технической поддержки, подобных реализаций не было.

Большое спасибо за ответы. Жаль что они мне мало чем помогли. Если что-то "накопаю", то выложу тут

а у TS есть компонент которым можно "смотреть" сообщение?
или надо аутлуковскими com-объектами пользоваться?

Только через com.
А что за версия TSClient?

"Евгений Либин" написал:

А что за версия TSClient?


TSClient v3.3.2.305

"Евгений Либин" написал:

А что за версия TSClient?


TSClient v3.3.2.305

Шансы есть.
В 3.3.2 интеграцию с Outlook перенесли в скрипты конфигурации и там можно вклиниться, но нужно понимать, что если одно и то же письмо придет двум и более человек, то есть шанс задвоить обработку.

"Евгений Либин" написал:

Шансы есть.

В 3.3.2 интеграцию с Outlook перенесли в скрипты конфигурации и там можно вклиниться, но нужно понимать, что если одно и то же письмо придет двум и более человек, то есть шанс задвоить обработку.


Отлично, Евгений, Вы меня обрадовали :-) буду разбираться!

Кстати, может быть удобнее было бы "разгребать" загруженные письма с помощью функционала SQL-сервера?

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

"Евгений Либин" написал:

Так не получится.

Хотя, можно сделать отдельный сервис для обработки писем, т.е. выгребать из базы все необработанные письма и обрабатывать их.


Если под "сервисом" понимать террасофт, то НЕТ. Я имел ввиду забыть про террасофт и, к примеру, повесить триггер на инсерт в табличку tbl_MailMessage, который будет смотреть на новую запись, парсить (средствами sql, может с привлечением com-outlook)...

Так тоже можно, но реализация будет очень сложной.

Коллеги, если кому-то интересно сделал (пока) простой вариант поиска в содержимом письма:
В scr_MailUtils сделал функцию

function FindTextInMessage (FileName, SearchString) { 
	if (!GetCanCreateMessage(true)) {
		return;
	}
	if (!InitMailUtils()) {
		return;
	}
	var MailItem = Outlook.Application.CreateItemFromTemplate(FileName);
	//var Body = GetMailItemBody(MailItem);
	var Body = MailItem.Body;
	Body = Body.replace(new RegExp('%20', 'ig'), ' '); //потому что все равно в текст закрадываются огрызки html
	switch (SearchString) {
	case '%%mail': //
		var STR = '[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-])+\.(ru|com|de|org)';
		var re = new RegExp(STR, 'ig');
		var re1 = new RegExp(STR);
		var FindString = Body.match(re);
		var IsExist = re1.test(Body); //если существует
		if (IsExist) {
			Log.Write(1,'найден майл: ' + FindString );
		}
		break;
	case undefined:
	case null:
		Log.Write(1, 'не указан текст поиска');
		break;
	default:
		var re = new RegExp (SearchString, 'ig');
		var FindString = Body.match(re);
		Log.Write(1, 'найден текст: ' + FindString);
		break;
	}
}

Нужно расширить функцию и, возможно, в дальнейшем включить в базовый функционал.

В моем случае нужна проверка на наличие майлов в теле письма. Поэтому при получении письма в scr_MSOutlookLibrary в функции сохранения письма function SaveMailItem (в моем случае после POST для MessageContent) вставил

FindTextInMessage (FileName, '%%mail');

Ну и собственно, если надо файл из базы вытянуть, то

var FileName = SaveMailMessageToFile(RecordID);
Показать все комментарии