Коллеги, простенький вопрос :)

задача: автоматически создать контакт по входящему email.

Создала БП. Сигнал=входящий email, читаем данные из Активности, тип Email

Необходимо получить отдельно email и отдельно ФИО отправителя.

К сожалению, вижу только одно поле [От кого], которое объединяет данные - SenderEnum

Пример: Сергей Петрович Петров ; 

Подскажите, как прочитать отдельно ФИО и отдельно email ?

Пыталась читать объект [Email] - данные не вычитываются. Спасибо.

Нравится

22 комментария
Лучший ответ

Милова Марина Федоровна,

Действитель, забыл using)

должно быть так:

Можно попробовать в скрипт-таске обработать результат:

var senderEnum = @"TEST TESTER <test@test.ru>";
var mail = Regex.Match(senderEnum, "<.*>").Captures[0].Value.Replace("<", "").Replace(">", "");
var user = Regex.Match(senderEnum, "^.*?<").Captures[0].Value;
user = user.Substring(0, user.Length - 2);

 

Варфоломеев Данила,

Спасибо. К сожалению, не являюсь разработчиком. В каком элементе БП добавить скрипт-таск? [Добавить данные]?

В смысле «в элементе добавить скрипт-таск»? Скрипт сам по себе является элементом. Читаете из одного параметра, пишете в другой и третий. Как в коде работать с параметрами, описано тут.

А ещё можно попробовать эту логику вставить в элемент-формулу. Отдельно формулы для имени и для адреса.

Милова Марина Федоровна,

Ок. Упростим задачу.

1) Создайте 3 переменные в БП (строки). В SenderEnum с помощью Формулы передавайте значение поля (которое считываете из активности/письма)

2) Добавьте задание-сценарий (script-task)

3) Вставьте туда код (копипаста).

var senderEnum = Get<string>("SenderEnum");
var mail = Regex.Match(senderEnum, "<.*>").Captures[0].Value.Replace("<", "").Replace(">", "");
var user = Regex.Match(senderEnum, "^.*?<").Captures[0].Value;
user = user.Substring(0, user.Length - 2);
 
Set("User", user);
Set("Email", mail);
return true;

Выглядеть в итоге должно так:

Всё. После выполнения сценария в параметре User будет лежать текст с фио пользователя, в Email - почта.

Варфоломеев Данила,

И все свалится если не добавлять using в БП, а как это сделать и не все программисты найдут :)

Коллеги, уже писала, что не программист. У меня сейчас вот такой процесс

Варфоломеев Данила,

Вставила задание-сценарий. Идет публикация

Григорий, жду, чем закончится 

Ну вроде не всё так страшно

В журнале процессов зафиксировано, что задание сценарий не выполнилось.

По совету Григория добавьте в Usings значение «System.Text.RegularExpressions». Usings находится на вкладке «МЕТОДЫ» свойств процесса.

Зверев Александр,

Пространство имен?

 

Публикую

Марина, а зачем Вы написали в Usings свою фамилию?

Поле обязательное для заполнения. Не знала что написать. Могу изменить :)))

Милова Марина Федоровна,

Действитель, забыл using)

должно быть так:

Коллеги, спасибо огромное за поддержку. В очередной раз поняла, что права аналитика в бизнес-процессах очень ограничены :(

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

Коллеги всем доброго времени суток. Нужна Ваша помощь.

В БП есть элемент Web-сервис в  котором есть массив - http://prntscr.com/kyim63.

Данный массив объектов состоит из двух полей Number и Description - http://prntscr.com/kyimnk

Данные поля необходимо заполнять по следующему правилу из двух выборок - http://prntscr.com/kyin8y

Правила заполнения реализовал следующим образом через тернальные выражения в формуле поля - http://prntscr.com/kyio17http://prntscr.com/kyioa3

Но при отработке элемента Web-сервис видим что массив Communications пустой - http://prntscr.com/kyip7z

Если же посмотреть на данные трассировки двух элементов из которых должна осуществляться выборка видим:

Идем в "Читать Контакты СТО в платформе" - http://prntscr.com/kyiq70 здесь по нулям следовательно логике должно брать значение из другого элемента, идем в "Читать Основной контакт Контрагента" - http://prntscr.com/kyir2v, здесь данные есть, вопрос почему не заполнились в веб-сервисе?

Заранее благодарю за ответ.

Нравится

1 комментарий

Нужно ещё больше ссылок на prntscr.com.angry

В 7.12 поддержка работы с веб-сервисами из БП только появилась. В 7.13 обещают усовершенствовать, улучшить работу в том числе и с массивами. Есть смысл дождаться релиза и переделать с учётом его возможностей.

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

Добрый день. 

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

Далее идет элемент Задание-сценарий(точно выполнился без ошибок на основе логирования), в котором устанавливается параметр процесса, и от него развилка на основе данного параметра либо на выход либо на отправку сигнала

Причем элемент Задание-сценарий выполен в Журнале процессов, а новый элемент не создается, процесс остался в статусе Выполняется.

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

Нравится

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

Посмотрите все ветвления возвращают true

(Те в конце стоит return true)

да, в конце задание-сценария стоит логирование и потом return true

Евгений В.,

А выходов раньше нет? Логирование срабатывает?  Может на нем сваливается. 

Какой статус экземпляра БП если завершен то у вас не идет на генерацию сигнала а идет на выход! Смотрите в сторону с определением условия и его проверке в условном потоке.

Григорий Чех,

элементы выполнены, но процесс завис на скринею

В условии [#EmailRequestItsalive#]==true, EmailRequestItsalive тоже булевый. 

Не видя логики скрипта, сложно сказать. Можно попробовать добавить ещё один блок скрипта после первого, пустой (только return true;). И посмотреть, застревает на нём или на предыдущем.

Если дело не в скрипте, то что-то не то в условиях. Может, не нужно «[#EmailRequestItsalive#]==true»? Например, в стандартном процессе «Поиск данных в соц. сетях» проверка параметра  делается просто как «GotoMessage» и «!GotoMessage».

Зверев Александр,

Добавил после Задание-сценария элемент Читать данные (Активности) по Id из сигнала. 

В результате БП завис на элементе отправить сигнал. (сигнал произвольный).

Также в Журнале процессов есть тот же процесс в статусе Завершен, причем сигнал отправил спустя 6 часов после чтения данных. 

 

Нужно отлаживаться или дальше экспериментировать со структурой процесса. Свои предположения оставил в комментарии выше.

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

Добрый день!

В процессе выполнения этой задачи выяснил, что в документации по Terrasoft.controls.Grid отсутствуют упоминания о нескольких методах этого элемента управления, например onKeyDown, goToPreviousRow, gotToNextRow (именно так, с "ошибкой") и несколько других.

Как теперь с этим знанием существовать? :)

Нравится

4 комментария
Лучший ответ

"Как теперь с этим знанием существовать? :)" — я с этим вопросом существую с 2016 года. Пришел в конфигурацию 7.6-7.7, знатно прифигел от количества параметров в diff-конфигах некоторых элементов, пошел на sdk, увидел шиш с маслом.

Терик тогда дал ответ - "смотрите примеры в конфигурации". Парадигма, я так понимаю, до сих пор не изменилась (хотя появилась JScore,большой им поклон за это, плюс абсолютно юзлесс net-библиотека). 

Сколько ещё открытий чудных ждет Вас впереди ;-)

А, если серьезно, напишите в support - они передадут данную информацию техписателям.

"Как теперь с этим знанием существовать? :)" — я с этим вопросом существую с 2016 года. Пришел в конфигурацию 7.6-7.7, знатно прифигел от количества параметров в diff-конфигах некоторых элементов, пошел на sdk, увидел шиш с маслом.

Терик тогда дал ответ - "смотрите примеры в конфигурации". Парадигма, я так понимаю, до сих пор не изменилась (хотя появилась JScore,большой им поклон за это, плюс абсолютно юзлесс net-библиотека). 

Согласен пока об этом не знали и не думали как то а что теперь делать?

Эта документация автогенерируемая. Если чего-то там нет, значит нет соответствующего документирующего комментария в исходном коде. Либо он есть, но по этой версии кода ещё не генерировали. В таком случае нужно ждать следующих версий, когда сгенерируют заново.

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

Добрый день, коллеги. Просьба помочь начинающему в решении следующей задачи:

В детали на карточке редактирования нажимается кнопка +, открывается новая карточка того же объекта (Договор) с предзаполненными значениями, взятыми из исходного договора, в частности, номер.

Попытался переопределить базовый метод детали следующим образом:

addRecord: function() {               

                this.callParent(arguments);

                this.set("Hyperlink", "abc");

            }

но при открытии нового договора поле Гиперссылка пустое.

Заранее благодарен!

Нравится

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

Может сначала модифицировать а потом вызывать родителя?

те попробуй так

addRecord: function() {               
   this.set("Hyperlink", "abc");
   this.callParent(arguments);
 
}

 

Григорий Чех,

спасибо, но это тоже не помогло. Однако проблема решилась, нужно было найти какой метод вызывается после этого и в нем проводить инициализацию

На карточке объекта, которую открываете нажатием на "+" в детали переопределите onEntityInitialized. Если нужно, то поставьте еще и проверку IsAddMode и isCopyMode

onEntityInitialized: function() {
this.callParent(arguments);
 if (this.isAddMode() || this.isCopyMode()) {
    //esq или что хотите
    //this.set("Hyperlink", "123");
 }
}

 

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

Добрый день!

Создаю процесс, который в деталь добавляет Результат выборки по объекту. 

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

Можно ли как-то ограничить количество добавляемых записей при добавлении результата выборки (например, свойство, где указывается количество добавляемых записей - 10, 20 и т.д.)?

Нравится

1 комментарий
Лучший ответ

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

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

Добрый день. Как правильно добавлять в BPM ссылку на внешнюю службу asmx?

Обычно в VS необходимо добавить ссылку и ввести url службы, но при вызове службы Terrasoft.Configuration.Dev.НазваниеСлужбы приложение не компилируется.

ERROR: The type or namespace name 'Dev' does not exist in the namespace 'Terrasoft.Configuration' (are you missing an assembly reference?) FILE: ICLObject.ICL_Entity.cs LINE: 27

Нравится

5 комментариев
Лучший ответ

Там где параметры БП, есть вкладка методы в самом вверху этой вкладки есть Using, возле нее жми + и добавляй свой assembly reference.

Так же посмотри на статью Вызов веб-сервисов из бизнес-процессов

 

 

 

Там где параметры БП, есть вкладка методы в самом вверху этой вкладки есть Using, возле нее жми + и добавляй свой assembly reference.

Так же посмотри на статью Вызов веб-сервисов из бизнес-процессов

 

 

 

А если не из БП вызывать,а из событийного процесса объекта?

То есть я не хочу указывать сборку в using, а только url сервиса

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

Во встроенном процессе можно вызвать элемент-подпроцесс, в котором уже добавить вызов сервиса.

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

Сервис типа soap, по нему не нашел документации.

Если у сервиса есть возможность обратиться к нему по URL, то используйте соответствующий элемент БП.

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

Здравствуйте, коллеги.

Появилась необходимость добавить смайлики к модулю HtmlEditModule (используется для написания email внутри bpm'online, а так же в различных текстовых полях вроде Примечаний). Насколько удалось докопаться, данный модуль реализован с помощью CKEditor, на оф.сайте которого предлагается уже разработанный аддон Smiley. В принципе, понятно каким образом можно его добавить для системы, развёрнутой on-site, поскольку необходимо всего лишь поместить соответствующие файлы с оф.сайта в папку CKEditor ([директория установки экземпляра bpm'online]\Terrasoft.WebApp\Resources\ui\CKEditor) и произвести необходимые замещения в модулях системы. Но возникает вопрос, каким образом этот аддон можно установить на системе, развёрнутой в облаке? Terrasoft предоставляет подобный сервис или же для облачных систем такая кастомизация в принципе невозможна?

И, раз уж на то пошло, если у кого-нибудь был опыт работы с аддонами CKEditor, не могли бы вы поделиться советами по данному вопросу?

Заранее спасибо!

Нравится

2 комментария
Лучший ответ

Запросите у поддержки возможность обновить CKEditor  для вашего сайта в облаке....

Запросите у поддержки возможность обновить CKEditor  для вашего сайта в облаке....

Если есть тестовый локальный сайт, можно протестировать на нём, а потом передать в поддержку готовые файлы и инструкцию, куда их класть.

Но, например, добавление шрифтов в CKEditor делается без доступа на сервер, чисто в конфигурации. Возможно, и аддон Smiley можно добавить похожим образом.

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

Добрый день, коллеги.

Появился вопрос насчёт разделения прочитанных и непрочитанных email сообщений в соответствующем разделе коммуникационной панели. Возможно ли как-то визуально разделять email по прочитанности в этом списке? Подтягивается ли этот параметр каждого письма через интеграцию с почтой или в контексте bpm'online возможно разделение только на обработанные и необработанные письма?

Заранее спасибо!

Нравится

6 комментариев
Лучший ответ

Насколько понимаю логику работы при  синхронизации информация о ом было ли письмо прочитано не передается. По аналогии с фильтром обработанные/необработанные вы сами можете кустомизировать логику показа email

Насколько понимаю логику работы при  синхронизации информация о ом было ли письмо прочитано не передается. По аналогии с фильтром обработанные/необработанные вы сами можете кустомизировать логику показа email

Евгений, добрый день!

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

В таблице EmailMessageData нет колонки, отвечающей за то, прочитано ли письмо. Видимо, нужно дорабатывать и интеграцию с почтовым сервером для считывания, и объект для хранения этой информации.

Видимо так. Только как это сделать? Был бы рабочий пример, боюсь что собственными силами не осилю.

Для уведомлений есть дополнение, но это не письма и не по интеграции.

Спасибо за ссылку, может пригодится.

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

Добрый день!

Подскажите, как реализовать задачу?

При выборе строки в гриде модального окна Распределение продуктов устанавливать фокус в поле Количество, выделять значение, после изменения по нажатию кнопки Enter сохранять и, при необходимости, переходить на следующую строку.

Изображение удалено.

Окно вызывается в графике оплат и поставок на вкладке Паспорт в Заказе.

Нравится

4 комментария
Лучший ответ

Борис Леонов,

Немного лень экспериментировать, но я бы в функции onGridClick подменил target. а-ля:

onGridClick: function(event, target) {
	var newDiv = target.parentElement.children[5]; //берём div нужного элемента. 5 - номер колонки
	target = newDiv.children[0]; //проваливаемся в span
	.....
}

 

Как минимум лепить какой-нибудь ConfigurationGridV2.

В нем переопределять onGridClick (чтобы по клику в фокус попадало только поле количество), переопределять keyMap (там сейчас Tab классно работает, даже ряд создает. осталось всё это перенести на enter), ну и вызывать AddNewRow на клиенте по enter-ивенту из грида.

Варфоломеев Данила,

я знал что вы ответите :)

а можно пример onGridClick с назначением фокуса конкретному полю?

Борис Леонов,

Немного лень экспериментировать, но я бы в функции onGridClick подменил target. а-ля:

onGridClick: function(event, target) {
	var newDiv = target.parentElement.children[5]; //берём div нужного элемента. 5 - номер колонки
	target = newDiv.children[0]; //проваливаемся в span
	.....
}

 

Варфоломеев Данила,

Идея понятна, большое спасибо!

 

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