Вопрос

Коллеги,

Читаю в документации по бизнес-процессам как можно обрабатывать параметры типа "коллекция". В частности такой фрагмент "...Также обработать параметры типа “коллекция” можно с помощью элемента [Задание-сценарий]. Например, можно использовать сценарий для преобразования коллекций записей в отдельные записи, которые можно передать в другие элементы процесса...". Но, к сожалению, не нашел примеров такого сценария. Не может ли кто-то привести пример кода элемента бизнес-процесса [Задание-сценарий] для работы с параметром типа "коллекция"?

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

У меня такой же вопрос

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

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

 

Добрый день!
Пример работы с коллекцией (после элемента "Считать данные"):

var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList");
 
var result = "";
 
foreach(var entity in entities) 
{
    	var Name = "";
    	if (entity.TryGetValue<string>("Number", out Name))
    	{
    		result = result + Name + ", ";  
    	}
}
 
return true;

 

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

Большое спасибо.

Сидоров Александр В.,

 Большое спасибо.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Возник вопрос при правке данных сразу после создания записи. Система пишет ошибку и не отрабатывает как ожидалось. БП создает запись и далее сразу же ее пытаюсь изменить в разделе "После добавления записи".

Entity.SetColumnValue("Name","txt1");
Entity.Save();
return true;

Можете подсказать, что не так? GetColumnValue отрабатывает, а вот с изменением и дальнейшим сохранением операция не проходит.

У меня такой же вопрос

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

Сразу же у меня возникли вопросы, какая именно ошибка у вас возникает?

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

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

Изначально требуется вызывать WS, записи на выходе парсить и создавать/обновлять записи в отдельном справочнике.
На выходе из WS получаем:
{"results":[{"id":"1", "login":"qwe1", "name":"qwe1"},{"id":"2", "login":"qwe2", "name":"qwe2"},{"id":"3", "login":"qwe3", "name":"qwe3"}]}

Если не ошибаюсь, блок по работе с WS в БП не умеет корректно обрабатывать такие ответы.
Во всяком случае видел в Сообществе такого рода комментарии.
Так что сейчас пробую весь ответ внести в промежуточную служебную форму, удалить лишнее, оставив только JSON, и описать парсинг JSON с логикой по созданию/обновлению записей.

На всякий случай сразу уточню. Можно ли без c# только блоками БП настроить парсинг этого дела?
Вариант с зацикливанием проверю дополнительно.

Спасибо!

Александр Кулиш пишет:
На всякий случай сразу уточню. Можно ли без c# только блоками БП настроить парсинг этого дела?

Для работы с данными служит элемент БП «Формула», но там функций работы с текстом минимум, по сути, только слияние строк.

Проще будет записать результат вызова сервиса в строковой параметр, а потом блоком-скриптом его разобрать, записав в другие параметры или сразу создав кодом записи в таблице базы.

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

Александр Кулиш,

Обсуждалось тут так же обратите внимание на парсинг Json в c# через Newtonsoft.Json

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

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

System.NullReferenceException: Object reference not set to an instance of an object.
   at Terrasoft.Common.ReflectionUtilities.GetPropertyValueByPath(Object source, String propertyPath)
   at Terrasoft.Core.Process.ProcessModel.Get[T](String propertyPath)
   at Terrasoft.Core.Process.UsrJira2NvgIntegration3MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

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

var collection = Get<ICompositeObjectList<ICompositeObject>>("WebService1.UsrResult_Out");
var result = new List<string>();
foreach (var row in collection){
    row.TryGetValue("UsrResultsId_Out", out string id);
    row.TryGetValue("UsrResultsLogin_Out", out string login);
    row.TryGetValue("UsrResultsName_Out", out string name);
    result.Add($"{name}:{login}:{id}");
}

Set("Name1", string.Join(" | ", result.ToArray()));
return true;

 

Можете подсказать, в каком направлении при этом стоит копать?

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

При установки поля (lookup) в карточки, должны заполняться еще какие-то поля, взятые из этого поля. Как можно это реализовать?

У меня такой же вопрос

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

Я так понял, что нужно заполнить поле в карточке значением из поля в справочнике, на который ссылается другое поле карточки? Если да, то делается примерно так.

attributes: {
	"Stage": {
				lookupListConfig: {
					orders: [{columnPath: "Number"}],
					columns: ["End", "MaxProbability", "Successful"]
				}
	},
	"Probability": {
		dependencies: [{
			columns: ["Stage"],
			methodName: "onStageChanged"
		}]
	}
},
methods: {
	onStageChanged: function() {
		var probabilityFromLookup = this.get("Stage") && thtis.get("Stage").MaxProbability || 0;
		this.set("Probability", probabilityFromLookup);
	}
}

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Для title колонок в объекте у меня отображается три языка, как можно в список добавить еще один язык?

У меня такой же вопрос

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

Посмотрите эту статью на Академии.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите, кто реально работает с bpm'online и СУБД PostgreSQL? На сколько стабильная работа система с ней и какие есть сейчас ограничения в сравнении с MS Sql? Так же хотел узнать какие сейчас продукты могут работать с этой СУБД и когда по карте будут работать остальные продукты?

Я понимаю что тут ответят так же работники супорта, потому прошу их не писать в рамках вопроса об опыте использования, так как я хочу узнать опыт именно пользователей не компании Террасоф

У меня такой же вопрос

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

Только начинаю изучать, из ограничений (по документации) пока только:

В bpm’online версии 7.13 использование PostgreSQL возможно только для продукта Studio.

Только начинаю изучать, из ограничений (по документации) пока только:

В bpm’online версии 7.13 использование PostgreSQL возможно только для продукта Studio.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

 

Хотел уточнить, можно-ли в почтовом клиенте BPM'online использовать запрос доставки и получения отправляемого электронного сообщения? 

Немного погуглив наткнулся на https://en.wikipedia.org/wiki/Return_receipt 

Но не нашел никакого описания в террасофте, как при написании письма указать эти параметры?

У меня такой же вопрос

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

Добрый день!
Статусы доставки и получения электронного сообщения есть в BPM marketing (https://www.terrasoft.ru/crm/email-marketing).
Для других версий данный функционал нужно реализовывать вручную

Добрый день!
Статусы доставки и получения электронного сообщения есть в BPM marketing (https://www.terrasoft.ru/crm/email-marketing).
Для других версий данный функционал нужно реализовывать вручную

Уже обсуждалось тут

Если, как описано в Википедии, использовать способ:

A non-standard but widely used way to request return receipts is with the "Return-Receipt-To:" (RRT) field in the e-mail header, with the email return address specified. The first time a user opens an email message containing this field in the header, the client will typically prompt the user whether or not to send a return receipt.

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

Сидоров Александр В.,

спасио за ответ! Только не понял, как это связано с маркетингом, продукт "студио"

Григорий Чех пишет:

Уже обсуждалось тут

Григорий, спасибо! Но вроде бы про рассылки я ни слова не сказал. 

Зверев Александр пишет:

Если, как описано в Википедии, использовать способ:

A non-standard but widely used way to request return receipts is with the "Return-Receipt-To:" (RRT) field in the e-mail header, with the email return address specified. The first time a user opens an email message containing this field in the header, the client will typically prompt the user whether or not to send a return receipt.

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

 Александр, спасибо! В продукте студио схема EmailSender как-то используется?

Подозреваю, что она используется для отправки почты во всех продуктах, кроме вышеупомянутых рассылок в маркетинге.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте,хотелось бы спросить возможна ли загрузка пакетов в поставку которая находиться на облаке.
Я установил VISUAL SVN SERVER и создал хранилище,при нажатии на кнопку Browse,у меня всё корректно открываеться.Добавил хранилище в список хранилищ BPM ONLINE,но при попытке авторизации,авторизация не выполняется,просто идёт загрузка,и позже прерывается
Я думаю причина в том что Поставка на облаке не может подключиться к моему серверу SVN.
В общем,к хранилищу нет доступа из облака(и не только, в принципе нету,если устройства не в одной локалкьной сети,только что с ноутбука (который находился в одной сети с компьютером на котором находиться сервер SVN попробовал получить доступ к хранилищу,и у  меня получилось,затем отключился с локальной сети и раздал интернет с телефона на ноутбук,и снова попробовал подлючиться,теперь хранилище не находит.Хотелось бы узнать верны ли мои догадки,и если это действительно так,узнать решение текущей проблемы

У меня такой же вопрос

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

Тут проблема не в BPM, а в сервере SVN. Он доступен только из локальной сети. Для того, чтобы он был доступен в интернет (тогда BPM в облаке его увидит), необходимо опубликовать его «во внешку» (например http://qaru.site/questions/2575332/is-it-possible-to-set-up-a-personal-svn-remote-repository-which-can-be-accessed-through-the-internet)

Напишите в тех поддержку террасофт и узнайте о возможности работы с svn из вашего облака

Тут проблема не в BPM, а в сервере SVN. Он доступен только из локальной сети. Для того, чтобы он был доступен в интернет (тогда BPM в облаке его увидит), необходимо опубликовать его «во внешку» (например http://qaru.site/questions/2575332/is-it-possible-to-set-up-a-personal-svn-remote-repository-which-can-be-accessed-through-the-internet)

https://academy.terrasoft.ru/documents/technic-sdk/7-13/rekomenduemaya-…

ВАЖНО

Для переноса изменений в промышленную среду не рекомендуется использовать SVN, поскольку такой способ не предусматривает создание резервной копии базы данных. Перенос изменений с помощью SVN следует использовать только для сред разработки.

Для переноса изменений в приложение, размещенное в облаке, рекомендуется использовать возможности пользовательского интерфейса bpm'online. Использование WorkspaceConsole невозможно, поскольку у пользователя нет непосредственного доступа к базе данных облачного приложения.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день всем.

 

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

assembly.CreateInstance("Terrasoft.Configuration.ContactSchema")

всегда получаю ошибку

"Constructor on type 'Terrasoft.Configuration.ContactSchema' not found."

Хотя у любых других Классов их инстансы я получаю. Я понимаю что в Terrasoft.Core есть методы по получению Инстенсов по Имени или через UID схемы. Но мне в задачи требуется создать Инстенс схемы, или через данную конструкцию, что описал выше или через Activator.CreateInstanse. Помогите пожалуйста как правильно работать со схемами таблиц через данные конструкции. Спасибо.

У меня такой же вопрос

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

Власов Михаил Викторович,

Можно так

var contact = new Terrasoft.Configuration.Contact(_userConnection);

Если вас интересует именно через рефлексию, то нужно смотреть описание каждого класса, создавать параметры и передавать их в конструктор. Подробнее в https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection.assembly…

Добрый день!
У ContactSchema нет конструктора без параметров.

Сидоров Александр В.,

И как правильно тогда мне создать Инстенс Контактов, Контрагентов ?

плюс как мне определить у каких схем конструкторы без параметров у каких с параметрами? не просматривая каждую схему, программным путем как то это можно сделать. Но больше всего волнует как правильно создать через конструкцию assembly.CreateInstanse. Подскажите пожалуйста спасибо.

Власов Михаил Викторович,

Можно так

var contact = new Terrasoft.Configuration.Contact(_userConnection);

Если вас интересует именно через рефлексию, то нужно смотреть описание каждого класса, создавать параметры и передавать их в конструктор. Подробнее в https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection.assembly…

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, при доработке добавили несколько новых состояний обращения. Одно из них это "Проведен расчет", суть практически такая же как и у "Закрыто".

Суть в чем, на странице списка обращений есть галочка "отображать закрытые", которая показывает/скрывает закрытые обращения.

Каким образом модифицировать эту галку, чтобы она цепляла за собой и обращения с новым состоянием "Проведен расчет"?

У меня такой же вопрос

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

Либо у нового статуса проставить галочку IsFinal. Тогда изменять код не придется

Добрый день!
Необходимо заместить схему CaseSection и модифицировать метод getFilters

Либо у нового статуса проставить галочку IsFinal. Тогда изменять код не придется

Сидоров Александр В., Спасибо большое, надо было документацию мне повнимательней читать)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте,хотел бы узнать возможно ли развернуть все компоненты локальной среды разработки на одном компьютере

У меня такой же вопрос

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

lordlen,

Не нужно будет давать отдельные права для пула, в 

Connection string  нужно указать пользователя у которого есть полные права на используемую БД, так же нужно проверить что доступ не отрезается файрволами и тд.

 

Подробнее тут

Добрый день!
Да, установку сервера приложения, сервера БД и Redis можно провести на одном компьютере.

Инструкция по установке: https://academy.terrasoft.ru/documents/common/7-12/ustanovka-bpmonline

Сидоров Александр В.,

Благодарю за ответ,сделал всё по инструкции и в итоге после запуска сайта получаеться вот такая ошибка(

Прочитал статьи по этому поводу  на stackoverflow но решения которые там были описаны не исправили ситуацию,можете пожалуйста помочь понять мне как можно исправить эту проблему?
Использую Microsoft SQl Server Express 2012 (64-bit) (на Windows 10)

 

 

Нет доступа к базе данных.
Необходимо пользователю, под которым запущен пул (для вашего случая Nazar), предоставить доступ к базе данных. Еще можно проверить, что правильно указаны путь к серверу базы данных и название базы данных в ConnectionStrings

Сидоров Александр В.,

Спасибо большое, а имя и пароль пользователя пулла обязательно должен совпадать с именем и паролем пользователя базы данных?

Все на одной машине, просто в свойство пула поставьте Identity = LocalSystem и можно не давать отдельных прав пользователю от которого пул стартует

Григорий Чех,Спасибо,При этом не нужно будет ничего менять в настройках SQL сервера и Connection string (Так и оставить SQL аутентификацию,в место SSPI)?

В ConnectionStrings.config может быть настроен либо вход по на SQL-сервер прописанному там же логину и паролю, либо SSPI, когда к базе подключается пользователь Windows, под которым работает сайт.

Григорий Чех,Здравствуйте,к сожалению это не решило проблему,не подскажете в чём ещё могут быть причины?

 

В неправильной настройке доступа к базе. Впишите в ConnectionStrings.config верные логин и пароль к базе или разрешите доступ в базу пользователю Windows, если там указано SSPI.

lordlen,

Не нужно будет давать отдельные права для пула, в 

Connection string  нужно указать пользователя у которого есть полные права на используемую БД, так же нужно проверить что доступ не отрезается файрволами и тд.

 

Подробнее тут

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

Благодарю за помощь,уже всё работаетyes

Войдите или зарегистрируйтесь, чтобы комментировать