Каким образом можно реализовать условные операторы в модуле Планирование? Например, если Факт отрицательное значение, то % выполнения считать как 0.

Нравится

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

Евгений, сейчас такой возможности нет.

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

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

Доброго времен суток!

 

Подскажите, 

Есть на marketplace (https://marketplace.terrasoft.ru/template/vydelenie-cvetom-zapisey-v-ra…)

приложение для выделения цветом записей в заказах и 

обращениях. Как, используя это приложение как template, добиться того же и в счетах?

Нравится

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

Привет. 



При запуске процесса из элемента "Задание сценарий" следующим образом: 



var manager    = UserConnection.ProcessSchemaManager;

var flowEngine = new FlowEngine(UserConnection);

var processSchema = manager.GetInstanceByName("test process");

Dictionary parameter = new Dictionary();

TestCompositeObjectList list = new TestCompositeObjectList();

list.Add(new A { ColName= "test1" });

list.Add(new A { ColName= "test2" });

parameter.Add("TestCollection", list);

parameter.Add("Name", "Test");

flowEngine.RunProcess(processSchema, parameter);

return true;

 

Сам класс TestCompositeObjectList был создан по этому примеру.

 

При запуске процесса ловим: 

System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'System.Collections.Generic.List`1[System.String]'.



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

TestCollection - и есть коллекция записей с полем стринг.

Name - просто ещё один параметр.



Дайте пожалуйста пример как сделать это.

 

 

Нравится

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

Разобрался. 

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



Код вызова: 

 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary<string, object> parameter = new Dictionary<string, object>();
 
CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
 
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 

 

CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");

 

if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {

                    var flowEngine = new FlowEngine(userConnection);

                    Dictionary<string, string> parameter = new Dictionary<string, string>();

                    parameter.Add("CaseRecordId", CaseRecordId.ToString());

                    flowEngine.RunProcess(processSchema, parameter);

                } else {

                    var moduleProcess = processSchema.CreateProcess(userConnection);

                    if (processSchema.Parameters.ExistsByName("CaseRecordId")) {

                        moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);

                    }

                    moduleProcess.Execute(userConnection);

                }

Полозюков Евгений Петрович,

У вас в примере обычный параметр, а не лист. С обычными то все понятно. Меня интересует передача именно параметра типа коллекция записей.

Возможно ли это вообщ? Потому что тут последний коммент говорит что "неа".

Разобрался. 

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



Код вызова: 

 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary&lt;string, object&gt; parameter = new Dictionary&lt;string, object&gt;();
 
CompositeObjectList&lt;CompositeObject&gt; objList = new CompositeObjectList&lt;CompositeObject&gt;();
 
objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 

 

CompositeObjectList&lt;CompositeObject&gt; collection = Get&lt;CompositeObjectList&lt;CompositeObject&gt;&gt;("CollectionName");

 

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

Добрый день, всем. Очень долго выполняются запросы связанные с UpdateQuery, SelectQuery, InsertQuery. Кто-нибудь сталкивался с этим? Какие пути использовали, для нахождения проблемы?

Нравится

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

Для анализа запросов есть профайлер в mssql. Запускаете профайлере, делаете запрос из клиентской части. Смотрите какой sql для select получается в профайлере.

Еще может быть, что у вас тормозит обмен по websocket. Надо посмотреть в консоль разработчика в браузере, нет ли там ошибки с подключение к websocket.

И еще creatio требовательна к ресурсам, если вам кажется что все работает медленно, то стоит проанализировать производительность ваших серверов.

Для анализа запросов есть профайлер в mssql. Запускаете профайлере, делаете запрос из клиентской части. Смотрите какой sql для select получается в профайлере.

Еще может быть, что у вас тормозит обмен по websocket. Надо посмотреть в консоль разработчика в браузере, нет ли там ошибки с подключение к websocket.

И еще creatio требовательна к ресурсам, если вам кажется что все работает медленно, то стоит проанализировать производительность ваших серверов.

В profiler смотрел, запросы выполняются за доли миллисекунд.

Websocket работает отлично.

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

Саид Иманмагомедов,

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

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

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

Привет. 

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

Нравится

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

Страница входа это у вас что IntroPage или /Login/NuiLogin.aspx?

 

Полозюков Евгений Петрович,

Второе. 

Уточните, Вам нужно поменять саму ссылку на вход? Или нужно редактировать наполнение страницы?

support,

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

Андреев Андрей Сергеевич,

 

Пользовательскими средствами нет возможности каким-либо образом конфигурировать страницу входа. Вся логика описана в js-модулях - \Terrasoft.WebApp\Resources\ui\Terrasoft\amd\sspLoginModule.js и \Terrasoft.WebApp\Resources\ui\Terrasoft\amd\loginModule.js

 

Соответственно, изменить логику на странице входа можно только посредством модификации этих файлов.

Олег Нефедьев,

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

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

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

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

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

Вопрос следующий: потребовалось переназначить это действие на другого пользователя. Каким образом это можно сделать? 

 

Нравится

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

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

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

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

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

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

А каким то образом можно изменить пользователя, который заполняет эту страницу в запущенном экземпляре процесса?

Нравится

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

Добрый день!

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

https://academy.terrasoft.ru/docs/user/biznes_processy/spravka_po_eleme…

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

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

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

Но как создать на C# (не в бизнес процессе) уведомление без этой ссылки, как это реализовано например у уведомлений об синхронизации с LDAP?

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

Нравится

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

Создаете в с# в таблице Remindings запись, вот и будет вам текст без ссылки. Откройте таблицу Remindings и посмотрите запись у которой дата 24.02.2021 в 17:57 и увидите какие поля должны быть заполнены чтобы получить такое уведомление.

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

Александр Тыра,

Мне эти ссылки не нужны. Приложите код которым создаете уведомление и скриншоты с полями в двух записях бд, та которая у вас создается уведомление и уведомление с ldap. 

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

Александр Тыра,

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

А исходные данные мне нужны чтобы понять куда вы смотрите и почему разницу не видите.

Данные из бд можно работая в SQL Server Management Studio  выгрузить в csv, можно выделить и скопировать в excel.

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

И приложите свой c# код создания уведомления и файл с двумя записями из Reminding.

От

Полозюков Евгений Петрович,

Ответ простой - в 7.13 нельзя создать уведомление без ссылки, потому это поправили в более поздних версиях

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

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

Ситуация:

Каждое утро начальник смотрит по счетам и путем выборки отправляет группу на оплату.

Спасибо!

Нравится

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

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

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

А в каком виде вы отправлять собрались?

Полозюков Евгений Петрович,

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

Думаю добавить логическое поле, и по этому критерию осуществить выборку в БП.

Левон Т.,

Если представляете значит у вас задачи нет. Сначала проведите анализ бизнес требований и сформулируйте на их основе задачу.

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

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

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

 

Доброго времени суток,

 

Подскажите, что я делаю не так?

На первом шаге БП читает коллекцию счетов, дальше, при формировании тела письма, коллекция как параметр, не отображается...

Вам надо сделать процесс, который посылает письмо для одного контакта. И в этот процесс передавать коллекцию.



В итоге процесс запустится для каждого контакта из коллекции.



Но тут надо быть внимательным с количеством вызовов этого процесса? Вы его примерно можете оценить?

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

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

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

Добрый день!

Посоветуйте, как реализовать вывод ссылки на загруженный файл на мини- карточку, или же preview самого файла.

Ситуация такая, нужно чтобы при наведении курсора на номер счета, отображался документ..

Спасибо!

Нравится

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

Левон, вот статья о создании мини-карточки со ссылкой на скачивание файла, что выглядит так:

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

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

Спасибо !

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

 

В статье описывается именно тот функционал, который мне нужен, но уровень сложности великоват!

Есть человек(фрилансер), который может помочь с реализацией данной функциональности?

Левон, в Маркете есть раздел с компаниями-партнёрами. К сожалению, кого выбрать, не подскажу.

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