Добрый день, Уважаемые коллеги!

Подскажите пжл., как с помощью бизнес-процесса осуществить математические операции с массивом данных?
Например, как сложить данные из набора (массива) данных, созданных на детали (см. вложенный файл)

Нравится

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

1) добавляете в БП элемент "читать данные"
2) Режим чтения устанавливаете "Считать функцию", объект - "План заключения договоров" (ну или другой объект, который используется в детали),Функция - "Сумма" (или другая), Указываете колонку - "Сумма тыс руб"
3) добавляете следом за ним элемент изменить данные. Выбираете объект "Контрагент", "Какие значения полей установить для измененных записей?" - выбираете колонку "Договоров....."(т.е. то, куда надо положить сумму). Появится пустое поле. В нем щелкаете по молнии и указываете результат функции предыдущего элемента

Обращу внимание, чтоесли Бизнес-План не контрол груп, а деталь, то пункт 3 надо немного видоизменить

Спасибо, Данила!

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

При запуске БП он берет все записи из "План заключения договоров", которые относятся к данному контрагенту (забыл кстати написать, что надо бы отфильтровать в бп по контрагенту) и делает SUM() по колонке. Соответственно если кол-во записей увеличится надо как-то снова вызывать бп для пересчета

Здравствуйте, Данила!

Изменения данных в массиве соответствует событию добавления/удаления записи на/с деталь (-и).
Вам необходимо:
1) Прочитать добавленную запись
Таким образом вы получите Id записи, с которой связана добавленная
2) Элементом "Чтение данных" прочитать все записи по объекту детали, у которых в поле связи с разделом, указано значение записи раздела
3) Элементом "Изменить данные" задать результат подсчета из второго пункта.

Спасибо, уважаемые коллеги!

Только вот, как я и сомневался (или как вариант не знаю правильный формат) при описании функции сумма возникает ошибка (см. вложенный файл)

Уважаемые коллеги!

Извините, но не тот файл вложил к последнему комментарию.

"Ифутин Юрий Борисович" написал:Только вот, как я и сомневался (или как вариант не знаю правильный формат) при описании функции сумма возникает ошибка (см. вложенный файл)

В элементе #Читать договор......Сумма# уже содержится сумма по столбцам.

Спасибо, коллеги!

Я понял свою ошибку - надо читать данные через режим "Считывать функцию"... Я просто ни разу так не делал и не сразу понял, что это за режим...

Уважаемые коллеги!

Помогите пжл., выявить ошибку:
Смоделировал по Вашей рекоммендации процесс получения итоговой суммы (см. вложенный файл).
Добавление и изменение договоров обрабатывает отлично а вот удаление договора у меня не получается...

Добрый день!
Попробуйте добавить элемент [Таймер] с задержкой 1-2 секунды перед элементом “Считать сумму при удалении договора”.

Спасибо, Олег!

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

Уважаемый Олег!

Когда тестировал процесс был включен еще другой параллельный процесс...
Поэтому снимаю свой предыдущий комментарий...
После деактивации параллельного процесса, получаем следующее:
- после первого удаления договора и обновления кэша процесс работает корректно
- после второго удаления договора (например, если в списке несколько договоров) и обновления кэша, итоговая сумм не меняется...
- итоговая сумма меняется после второго обновления кэш...

Коллеги, ну, помогите победить данный процесс.... (см. вложенный файл)

Юрий, здравствуйте!

Для решения задачи следует:
1. В процессе сгенерировать сообщение по каналу Web-socket.
2. В схеме страницы редактирования контрагента подписаться на сообщения.
3. В методе “прослушки” сообщения вызывать метод который обновит страницу и отобразит актуальные данные.
Обновить страницу редактирования:
reloadEntity() – refresh page

Пример генерации и подписки на сообщение рассмотрен на форуме - http://www.community.terrasoft.ru/forum/topic/11784

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

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

Нравится

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

Добрый день!

С помощью параметра IsProcessMode определяется, что страница открывается в контексте какого-то процесса. На параметр завязана логика, реализованная в ядре приложения. Не рекомендуется изменять параметр, иначе это может привести к некорректному выполнению процесса.

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

Добрый день!

1. Подскажите, кто и как решил проблему по поиску писем?

2. Возможно ли в коммуникационной панели установить строку поиска писем по всем полям как в любом почтовом клиенте?

3. Если создать новый раздел E-MAIL, то как в нем настроить поиск писем по всем полям? Как отображать в этом разделе только письма текущего пользователя?

Нравится

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

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

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

2. Да, это возможно сделать. Для решения требуется реализовать соответствующую логику в схеме CommunicationPanelEmail:
1) Добавить строку поиска
2) Добавить кнопку поиска
3) Добавить логику фильтрации записей при нажатии на кнопку по значению, введенному в строку поиска.

3. Новый раздел на основании объекта Activity можно создать, например, через объект представления, в котором будут только письма. Далее в созданном разделе необходимо настроить доп. фильтрацию по текущему пользователю. Также необходимо реализовать корректное отображение тела письма.
Фильтровать записи (поиск по всем полям) можно использованием фильтров созданного раздела (базовый функционал).

"Новак Руслан" написал:

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

Где можно посмотреть результат отдельной реализации функционала поиска?

Здравствуйте, Евгений!

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

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

Помогите пожалуйста.
https://community.terrasoft.ru/forum/topic/24808

Нравится

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

Добрый день, уважаемые коллеги!

Подскажите пожалуйста, можно ли настроить мобильное приложение на создание представления с использованием фильтров и групп?
Такие представления очень хорошо получаются на персональном компьютере. Можно ли что-нибудь подобное сделать и на смартфоне?

Нравится

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

Здравствуйте, Юрий!

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

Спасибо, Павел!

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

Здравствуйте.
Права доступа вы настраиваете в десктоп-приложении (не мобильном). В зависимости от этих настроек пользователю будет доступен тот или иной набор данных в результате синхронизации. Что касается "бизнес-правил" фильтрации, то настройки такого плана выполняются на уровне конфигурации и уже исходя из специфики поставленной задачи, это может быть применено для определённого рабочего места или пользователя, в частности. С настройкой прав доступа вы можете ознакомиться на ресурсе https://academy.terrasoft.ru, выбрав раздел документация и соответствующий продукт. С вопросами конфигурирования - https://academy.terrasoft.ru/documents/technic-sdk/7-8/dokumentaciya-po…

Добрый день!

В релизе 7.11 реализована функциональность быстрой фильтрации в разделах и деталях мобильного приложения. Для поиска нужных записей в разделе (или на детали) можно настроить "быстрый" фильтр по колонкам объекта. 

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

Добрый день, уважаемые коллеги!

В новом релизе 7.8.4 появилась классная возможность - добавить логотип контрагента, за что большое спасибо разработчикам системы...
По умолчанию, в реестре контрагентов логотипы выводятся в форме круга (картинки логотипов некрасиво растягиваются при этом и обрезаются границы логотипов по окружности)...
Можно ли как-то настроить систему, чтобы логотипы выводились в прямоугольной форме и границы логотипов не обрезались?

Нравится

8 комментариев
.icon-spacer-32x32.grid-header a img.grid-icon-fixed-32x32 {
    /* border-radius: 50%; */
}

Правьте css-ку в реестре.

Спасибо, Данила!

К сожалению,я не программист...

Не могли бы Вы более подробно написать как это сделать.

Юрий, для изменения необходиы знания разработчика. Если Вы не знакомы с программированием, то с начала рекомендую изучить, чтобы не сделать ошибок.
Данная логика находится в ядре и через конфигурацию не получиться изменить.
Если сайт развернут локально, то Вы можете в файле "all-combined.css" ("...\Terrasoft.WebApp\Resources\ui\combined") убрать или изменить параметр "border-radius" в классе "icon-spacer-32x32", сохранить, перезапустить сайт, почистить Redis и кэш браузера.

Спасибо, Илья!

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

Уважаемые коллеги!

Иногда хочется крикнуть разработчика системы - "...на фига попу гармонь?.."

Ну, вот посмотрите (см. вложенный файл), разработчики классно сделали представление логотипа в разделе "Контакты" и "никак" сделали в разделе "Контрагенты"...
Объясните мне пжл., а что нельзя сделать тоже самое в разделе "Контрагенты" без всякого там программирования со стороны пользователя?
Ну, не понимаю я - зачем напрягать пользователей, когда всё уже хороши сделано в другом разделе?

"Ифутин Юрий Борисович" написал:Я правильно понимаю, что если через конфигурацию изменить не получиться, то можно забыть о такой настройке, так как у нас облачный продукт?

Нет. как вариант:
1) создать модуль, назвать BaseSectionCss, в LESS прописать

.icon-spacer-32x32.grid-header a img.grid-icon-fixed-32x32 {
    border-radius: 0%;
}

2) Заместить BaseSectionV2, код:

define("BaseSectionV2", ["css!BaseSectionCss"],
	function() {
		return {
			messages: {},
			mixins: {},
			attributes: {},
			methods: {},
			diff: []
		};
	});

"Ифутин Юрий Борисович" написал:разработчики классно сделали представление логотипа в разделе "Контакты" и "никак" сделали в разделе "Контрагенты"...

Квадратные иконки - для всех остальных справочников, у которых есть изображение. Закругляются только Иконки Записи, в чьем разделе мы находимся (в вашем примере попробуйте контакту изображение влепить. У меня онозакруглилось в разделе)

Спасибо Данила!

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

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

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

string processName = "UsrSendingReportMailByDayProcess";
//DateTime jobStartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day + 1, 19, 0, 0);
AppScheduler.RemoveJob(processName + "Job","Main");
IJobDetail job = AppScheduler.CreateProcessJob(processName + "Job",
                                        "Main", processName, "Default", context.UserConnection.CurrentUser.Name);
//ITrigger trigger = new SimpleTriggerImpl(processName + "Trigger", "Main", jobStartTime);
ITrigger trigger = new CronTriggerImpl(processName + "Trigger", "Main", "0 0 19 ? * *"); //Каждый день в 19:00
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Запланирован 22.11, процесс запускался 22.11 -26.11 точно в 19:00, завершался без ошибок. Далее в журнале процесса запусков не зафиксированно, но таблицах QRTZ_JOB_DETAILS, QRTZ_TRIGGERS записи о этом задание есть. В QRTZ_TRIGGERS в поле [PREV_FIRE_TIME] указанно время 28.11 19:00, т.е. триггер и джоб не пропал и выполнился, но процесс не запустился.
До этого были выполнены рекомендации из темы https://community.terrasoft.ru/forum/topic/12848
Также была установлена утилита о которой говориться в теме.

В системном журнале не зафиксированн перезапуск сервера или IIS. Единственное есть запись с уровнем "Свединие" в день когда процесс перестал запускаться: "Рабочий процесс с идентификатором процесса "4904", обслуживающий пул приложений "BPMonline", запросил повторный запуск, так как в рабочем процессе достигнут предел допустимого времени обработки."
До этого использовался запуск процесса в который планировался закоментированным выше кодом, но через несколько дней повторялась таже проблема.
Подскажите на что стоит обратить внимание. Может у кого наблюдалась подобная проблема?

Нравится

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

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

Рекомендую посмотреть логи приложения за дату, когда процесс не выполнился. Обратите внимание на файл Scheduler - именно в него пишутся логи Quartz. Исходя из сообщений можно определить причину такого поведения.

Алексей, спасибо.
Нашел ошибку "Object reference not set to an instance of an object."
Лог:
2016-11-27 19:00:00,133 [BPMonlineQuartzScheduler_Worker-1] INFO IIS APPPOOL\BPMonline Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessStart [processSchemaName:UsrSendingReportMailByDayProcess, processElementUId , userName:dmkrotov, workspaceName:Default, workspaceBaseUrl:http://crm.euro-stan.com:88/, timeZoneId:]
2016-11-27 19:00:00,149 [BPMonlineQuartzScheduler_Worker-1] INFO IIS APPPOOL\BPMonline Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessFail [processSchemaName:UsrSendingReportMailByDayProcess, processElementUId , userName:dmkrotov, workspaceName:Default, workspaceBaseUrl:http://crm.euro-stan.com:88/, timeZoneId:, Exception:System.NullReferenceException: Object reference not set to an instance of an object.
at Terrasoft.Core.ManagerItemCollection`1.FindByUId(Guid uid)
at Terrasoft.Core.Process.ProcessSchemaManager.FindInstanceFromMetaData(Guid schemaUId)
at Terrasoft.Core.SchemaManager`1.GetInstanceFromMetaData(Guid schemaUId)
at Terrasoft.Core.Process.ProcessSchemaManager.GetIsCreatedInInterpretableVersion(ISchemaManagerItem`1 managerItem)
at Terrasoft.Core.Process.ProcessSchemaManager.GetCanUseFlowEngine(UserConnection userConnection, ISchemaManagerItem`1 managerItem)
at Terrasoft.Core.Scheduler.RunProcessJob.RunProcess(UserConnection userConnection, String processSchemaName, JobDataMap dataMap, Dictionary`2 predefinedEntries)
at Terrasoft.Core.Scheduler.RunProcessJob.Execute(IJobExecutionContext context)]

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

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

Попробуйте скомпилировать приложение. Последующий запуск процесса пройдет корректно. Уточните, пожалуйста, какая у вас версия?

Версия 7.7.0.2284

Тех. поддержка ответила: "Трудно определить источник проблемы “Object reference not set to an instance of an object.” без отладки. Описанное поведение могло возникнуть:
а) в момент запуска процесса – пул приложения выключен
б) после ручного перезапуска сайта некорректно генерировался исходный код

Обе проблемы исправлены в версии 7.8. Для решения задачи необходимо обновить приложение до последней релизной версии 7.8."

Насколько я понял, после перезапуски сайта\пула, нужно скомпелировать и сгенерировать код.

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

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

Что значит обновить приложение?

Добрый день!
Подразумевается обновить приложение с версии 7.7 до 7.8.4 или 7.9.
На академии есть инструкция по обновлению - https://academy.terrasoft.ua/documents/instrukciya-po-obnovleniyu-bpmon…
У поддержки можно запросить необходимые дистрибутивы.

Добрый день!

Коллеги, может кто-то знает, чем гарантируется (если гарантируется) запуск процесса через планировщик Quartz?

Например, рассмотрим кейс, когда на следующую неделю на среду на 17:00 через планировщик запланирован запуск некоторого бизнес-процесса.

Начиная с вечера пятницы предыдущей недели никто в системе до четверга следующей недели не работал (предположим, были такие длинные праздники). Получается, что в системе никто не работает пятница - четверг. Будет ли в таком случае запущен бизнес-процесс по расписанию в среду в 17:00?

Ведь, процесс w3wp.exe, по всей видимости, будет перезапущен в этом периоде несколько раз? Пусть, для простоты, мы говорим только про on-cloud.

Здравствуйте, Андрей!

Без дополнительных настроек процесс запущен не будет. Для решений on-demand (cloud) используется сервис, который каждые 5 минут "опрашивает" главную страницу. Это позволяет "разбудить" приложение, если пул приложения был перезапущен (у IIS есть свойство перезапускаться каждые сутки).

Для решения on-site есть ряд утилит, которые выполняют аналогичное действие. Пример утилиты можно найти на msdn:
https://social.msdn.microsoft.com/Forums/en-US/8b3258e7-261c-49a0-888c-…

Алексей, спасибо за подробный ответ!

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

Здравствуйте!
Все верно. Job'ы в планировщике, которые не отработали вовремя изменяют свое состояние, становятся в очередь и ожидают запуска пула приложения.

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

Добрый день!

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

Например, по клиенту требуются одни данные, а по партнеру другие.

Нравится

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

Владимир, здравствуйте!

Для реализации необходимо расширять справочник «Полнота наполнения данными» (базовыми средствами не получится).
Как вариант можно попробовать:

- в таблице «Completeness» добавить запись и заполнить необходимым типом;
- в таблице «CompletenessParameter» добавить необходимые параметры
- по аналогии «ContactPageV2» (пакет «Completeness») добавить для своих страниц (если их несколько) необходимые контейнеры с логикой обработки.

Спасибо за обратную связь. Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях.

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

Создал деталь, унаследовался от FileDetailV2, при обновлении страницы (с очисткой кеша, или без - не имеет значения) файлы не отображаются, выдает ошибку:
GET http://***************/1/Nui/Terrasoft/ImageListViewModel.js?_dc=1480419... 404 (Not Found)
Помогает только релогин, или обновление страницы, на которой нет этой детали.
Такая же проблема наблюдается в стандартной EmailFileDetailV2. Подскажите возможно ли решить.
Версия 7.5.0.1328
P.S. Варианты ответов вроде "в 7.8 такой проблемы нет" не являются решением проблемы.

Нравится

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

Уточните каким образом была создана данная деталь (по возможности прикрепите исходный код схем детали).

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

Добрый день, уважаемые коллеги!

Обнаружил следующую проблему при тестировании БП.
У меня смоделирован и запущен БП "Уведомление участнику задачи" (см. вложенный файл)
При постановке задачи на компьютере процесс отлично срабатывает и посылает уведомление о задаче...
При постановке задачи в мобильном приложении процесс тоже правильно срабатывает, но присылает 2 одинаковых уведомления (см. вложенный файл).

Помогите разобраться, в чем тут дело....

Нравится

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

Добрый день!

Добавьте в стартовом сигнале условие: Участник != Контакт текущего пользователя. В таком случае БП будет запускаться в случае, когда Ответственный не является автором активности.

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