Всем доброго дня. Версия 7.14.

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

 

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

Удалось найти, что список цветов задаётся в модуле DashboardEnums. Но добавление новых относится к запрещённому ныне переопределению модулей. Быть может есть всё-таки обходные пути?

Нравится

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

Добрый день, Денис!



В последних версиях bpm'online запрещено замещать базовые модули, это сделано для защиты приложения от потенциальных ошибок, которые могут нарушить базовую логику. 

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

Мотков Илья,

Подскажите ситуация изменилась? Теперь можно свои цвета задавать при построении графиков?

На данный момент, изменить базовые цвета графиков на кастомные возможности нет. 

Такие изменения запланированы на начало следующего года вместе с переводом страницы настройки Итогов на Angular.

 

Для самостоятельной доработки Вам необходимо создать свой модуль на основе DashboardEnums. Но есть несколько нюансов, которые нужно учесть:

1. В Вашем модуле необходимо перезаписать данные свойства -  Terrasoft.DashboardEnums.WidgetColorSetTerrasoft.DashboardEnums.StyleColorsTerrasoft.DashboardEnums.WidgetColor.

2. Так же необходимо изменить/дописать все CSS связанные с ключевыми словами этих цветов - например везде где упоминается свойства widget-green.

3. Чтобы подключить этот модуль к приложению, а так же измененные/дописанные стили, необходимо указать их в зависимости к модулю BootstrapModulesV2 (предварительно сделав замещающею схему).

 

 

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

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

 

Даниэль, цвета задаются не для одной диаграммы, а для всех графиков. Сами константы заданы в DashboardEnums.

    Terrasoft.DashboardEnums.WidgetColorSet = [
    /** 0: ####### */
        "#03a9f4",
    /** 1: ####### */
        "#20c964",
    /** 2: ######### */
        "#ffc107",
    /** 3: ######### */
        "#ff9800",
    /** 4: ########## */
        "#ff7043",
    /** 5: ########## */
        "#9575cd",
    /** 6: ##### */
        "#0091ea",
    /** 7: ######### */
        "#00bfa5",
    /** 8: #####-######### */
        "#009688"
    ];

Например, если в консоли браузера написать:

Terrasoft.DashboardEnums.WidgetColorSet[0]='#00FF00';

Terrasoft.DashboardEnums.WidgetColorSet[1]='#0000FF';

и т. д., и зайти в итоги, то цвета графиков изменятся:

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

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

Проблемы с отправкой запроса. 

Как убрать из заголовка запроса Expect: 100-continue? 

Вызываем веб-сервис из бизнес процесса. 

Нравится

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

1) В блоке скриптаск самому реализовать на c# работу с вэб сервисом

2) Изменить параметр Максимальное число повторений в свойствах БП ниже названия и пакета (нужно проверить) 

1) В блоке скриптаск самому реализовать на c# работу с вэб сервисом

2) Изменить параметр Максимальное число повторений в свойствах БП ниже названия и пакета (нужно проверить) 

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

1) В блоке скриптаск самому реализовать на c# работу с вэб сервисом

2) Изменить параметр Максимальное число повторений в свойствах БП ниже названия и пакета (нужно проверить) 

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

сейчас стоит 5000

Стандартное значение равно 100. Видимо, с какой-то целью увеличивали.

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

Коллеги,

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

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

Нравится

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

Добрый день!

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

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;

 

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

 

Добрый день!

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

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;

 

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

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

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

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

В 7.16.1 добавится возможность пользовательской настройки  последовательного запуска одинаковых подпроцессов по каждому элементу коллекции из параметра.

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

Добрый день!

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

Entity.SetColumnValue("Name","txt1");

Entity.Save();

return true;

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

Нравится

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

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

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

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

Изначально требуется вызывать 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;

 

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

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

Код успешно компилируется.

В режиме отладки вижу, что первая строка кода:

var collection = Get<ICompositeObjectList<ICompositeObject>>("WebService1.UsrTestResult_Out");

не получает никаких данных.

В чем может быть проблема?

Параметры на выходе блока WS такие

Код сейчас такой использую:

var collection = Get<ICompositeObjectList<ICompositeObject>>("WebService1.UsrTestResult_Out");

var result = new List<string>();

foreach (var row in collection){

    row.TryGetValue("UsrTestResultName_Out", out string name);

    row.TryGetValue("UsrTestResultComment_Out", out string comment);

    result.Add($"{name}:{comment}");

}

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

Set("Name2", "qwe");

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") &amp;&amp; thtis.get("Stage").MaxProbability || 0;
		this.set("Probability", probabilityFromLookup);
	}
}

 

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

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

 

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

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

Нравится

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

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

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

Нравится

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

Добрый день!

 

Хотел уточнить, можно-ли в почтовом клиенте 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…

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