Имеется:
Объект1 у него Раздел1
Объект2 у него Раздел2 и Деталь1 привязанная к Разделу 1

Кейс.

Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...и запускает БП, который до заполняет поля в разделе 2.
Потом сотрудник нажимает Сохранить-Закрыть.
И тут автоматом создается О2.

У меня вопрос почему происходит автоматическое создание еще записи ?

Этого не происходит если:
Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...
Потом сотрудник нажимает Сохранить-Закрыть.
Открывает О1 и запускает БП, который до заполняет поля в разделе 2.

Нравится

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

Предположу...т.к. О2 создается из Раздела1 О1 то и при создании система чудит.

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

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

В разделе "Договоры" создали деталь "Счета договора" соответственно это Объект - Счета.

Пользователь создает в детали "Счет договора" , счет нажатием знака + на детали.
Создается новая запись Счет, с привязкой к Счету. С номером 1

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

До заполнив остальные поля, сотрудник сохраняет счет и закрывает.
И тут создается новый счет сразу , С номером 2.

Предположу..что есть заложена логика при создании записи из детали и послед-й возвратом на раздел где нажималась +

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

Добрый день. При запуске БП с элементом "изменение данных" получаю ошибку в элементе:
"Превышено ограничение 20000 записей при выгрузке данных объекта"
Как обойти это ограничение?
Нашел системную настройку "Максимальное количество импортируемых записей из Excel" с таким же значением.
Но его изменение не помогло.

Нравится

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

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

Конечно не помогло - ограничение на уровне web.config приложения:smile:, параметр maxEntityRowCount.

Да, поддержка on-demand уже просветила :smile:

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

Добрый день!

В бизнес-процессах есть возможность создавать активности с помощью элемента "Выполнить задачу" или "Добавить данные" в объект Activity

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

Спасибо!

Нравится

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

Добрый день!
Существенные различия между этими двумя методами создания активности, которые заметила наша команда, были как визуальные так и на уровне работы с колонками самой активности.

1. Визуальные.
При создании задачи через элемент "Выполнить задачу" мы можем четко ограничивать пользователя в выборе предоставляемых результатов завершения активности. При использовании элемента "Добавить данные" при данном кейсе придётся на уровне схемы подменять фильтрацию поля результат, что по факту трудоёмко и необходимо вводить дополнительные флаги к активности, мол, что это за активность открыта и какие результаты нужно в ней показывать, что в свою очередь не применяется для схем миникарточек активности.
Т.е. допустим вы добавили 3 новых варианта, привязали их к категории выполнить и типу Задача, если править только схему карточки Активности то в карточке всё будет гуд отображаться, но при этом в миникарточке активности станут доступны все нововведенные результаты.
Плюс при использовании Выполнить задачу вы ограничиваетесь потоками выполнения в зависимости от выбранного результата, тогда как при "Добавить данные" вам необходимо под каждый тип активностей создавать отдельный БП по обработке результатов активности.

2. При работе с данными колонок Активности и сторонними параметрами БП.
При создании через добавить данные у вас не возникнет проблем с заполнением какой-то кастомной колонки и set'е туда значения из параметра БП.
При создании через Выполнить задачу вы ограничены определенным набором доступных колонок, которые можно посмотреть через расширенные настройки. Если вам потребуется что-то устанавливать в нововведенные колонки значения, то в целом можно использовать С# модуль под названием "После сохранения активности" в этом же элементе. Но есть одно но, context выполнения этого кода ограничен только параметрами самого элемента Выполнить задачу, т.е. простым путём у вас не получится выполнить SetColumnValue со сторонним параметром БП, нужно будет этот сторонний параметр пробрасывать в контекст и потом парсить (если это потребуется).

Вот с чем мы столкнулись в последний месяц при работе с этими элементами.
На мой взгляд лучше всего использовать Выполнить задачу, так как даже на уровне js'a будет проще выполнять иные действия при клике на тот или иной результат, но это сугубо моё мнение.

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

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

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

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

Нравится

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

Здравствуйте, элемент "Выполнить задачу" после себя предоставляет все свои колонки включая Id, следовательно по этому Id можно данную задачу видоизменять после создания, см. скр:

"Максим Шевченко" написал:

Здравствуйте, элемент "Выполнить задачу" после себя предоставляет все свои колонки включая Id, следовательно по этому Id можно данную задачу видоизменять после создания, см. скр:


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

В момент создания? Тогда либо использовать параметры из расширенного режима, они заполняют именно до сохранения в бд активности значения:


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

А скрипт о котором говорится вначале, все равно работает после сохранения и аналогичен тому что я предложил в своем первом комментарии.

"Максим Шевченко" написал:А скрипт о котором говорится вначале, все равно работает после сохранения и аналогичен тому что я предложил в своем первом комментарии.

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

Кисловский Михаил Андреевич,

Доброго дня. Подскажите, получилось ли решить Вашу задачу?

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

 

Как вариант, можно создавать запись в таблице активностей со всеми значениями нужных полей в коде. А потом открывать пользователю её карточку при помощи элемента БП «Открыть страницу». Или даже не создавать, а перед открытием наполнить коллекцию defValues, сохранить в данных сессии и передать в элемент открытия страницы ссылку. См. логику скрипта в стандартных БП «Создать активность для контакта», «Создать активность для контрагента» или «Создать активность для документа».

Мамлютов Виктор Александрович, разобрались давно.

Пример того как можно делать Update через данную вкладку:

 

activity.SetColumnValue("IsCheckOfTerms", true); //название параметра в объекте активности, потом значение которое необходимо установить

activity.Save();

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

Добрый день,

Хочу использовать фичу элемента Выполнить задачу выполнения кода после сохранения активности.
Например хочу взять последнюю созданную задачу и изменить значение колонки:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
esq.AddColumn("CreatedOn").OrderByDesc();
esq.AddAllSchemaColumns();
esq.RowCount = 1;
esq.AddColumn("isDetailedResultRequired");
var entities = esq.GetEntityCollection(UserConnection);
        foreach(var entity in entities){
    entity.SetColumnValue("isDetailedResultRequired", true);
        }
entities.Save();

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

Может кто подскажет в чем может быть проблема и как работать с этой фичей ?

Второй вопрос:

В исходниках видно, что в этот метод передается параметр в виде экземпляра созданной активности Entity activity. Можно ли поменять значения некоторых колонок и сохранить эту активность еще раз?
Если да, кто где взять доступные методы работы с Entity?

С уважением.

Нравится

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

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

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

Касательно второго вопроса не совсем понял, про какой конкретно метод идет речь. Информацию касательно ядровых методов можно найти на SDK:
https://academy.terrasoft.ru/api/SDKNETAPI/7.10.0/NetCoreAPI_Help.html#…
Или же поискать по конфигурации готовые примеры.

Илья, добрый день!

Спасибо за ответ.
Уже разобрался - код почему-то не работал именно в этом БП. Сделал тоже самое в другом БП и всё заработало.

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

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

Нравится

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

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

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

Добрый день!

Появилась потребность формировать фильтры для динамических групп автоматически, собственно, нашел как они формируются из JS-ного кода и хранятся в таблице [раздел]Folder в виде шестнадцатеричного кода. Вопрос, как формировать и сериализовывать их для записи в таблицу?

Нравится

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

"Шамшин Олег" написал:Вопрос, как формировать и сериализовывать их для записи в таблицу?

Для нашего "узкого" вопроса мы формировали их, копировали код в справочник, а потом использовали. То есть, в итоге получалось не совсем формирование на лету, а выбор из кучи заранее сформированных

Олег,

а какую бизнес-задачу Вы хотите решить таким образом?

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

Заранее благодарю за ответ ;-)

"Алла Савельева" написал:а какую бизнес-задачу Вы хотите решить таким образом?

Мы решали следующую задачу: для подбора персонала заполняются некоторые поля в карточке вакансии. На основании этих полей хотелось построить динамический фильтр в разделе Контакты, чтобы пользователи могли его дополнить/изменить и выбрать кандидатов

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

"Алла Савельева" написал:а какую бизнес-задачу Вы хотите решить таким образом?

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

"Шамшин Олег" написал:статические группы не работают в 7.10

Это не решает задачу, но в 7.10 вместо статических групп можно использовать тэги, по которым уже строить динамические группы.

Олег,

Можно реализовать некий справочник, который будет хранить структуру каталога продуктов. В каждом продукте добавить поле (назовем его [Каталог]), которое будет ссылаться на этот справочник и хранить принадлежность продукта к определенному каталогу.
На основании информации в поле [Каталог] настроить структуру динамических групп, какой угодно вложенности.

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

Олег, а какой именно у вас продукт bpm'online? В Enterprise этот вопрос решен уже

"Владимир Соколов" написал:какой именно у вас продукт bpm'online

Владимир, BPMOnline Sales Enterprise 7.10.1, а каким образом вопрос решен?

"Алла Савельева" написал:такой способ не позволяет менять саму структуру каталога

Алла, рассматривали похожий вариант - не подходит, т.к. надо менять структуру без участия пользователя/людей вообще, то бишь автоматически.

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

Группа = каталог (название группы - это название каталога), а продукт, который принадлежит каталогу входит в группу.

Если настроить импорт записей соответственно, то получится менять структуру автоматически.
Если появляется новый каталог, то добавляется новая статическая группа, в которую добавляются нужные продукты.
Из плюсов такого подхода: возможность хранения каталога в виде иерархического списка сколько угодно уровней вложенности.
Таким образом в Bpm'online для этого уже все реализовано, остается только вопрос в реализации импорта, а это фактически запись нужных данных в нужные таблицы :wink:

Небольшая поправка, если у Вас продукт bpm'online sales enterprise 7.10.1, тогда статических групп у Вас нет (они есть только в продукте bpm'online marketing), а вместо них есть тэги, о которых писал Владимир.

"Шамшин Олег" написал:Владимир, BPMOnline Sales Enterprise 7.10.1, а каким образом вопрос решен?

Олег, мне кажется, функционал каталога продуктов вам поможет - как раз динамически формируется структура: https://academy.terrasoft.ua/documents/sales-enterprise/7-10/katalog-pr…

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

Добрый день.
Если я копирую процесс (кнопка "Копировать диаграмму") который находится в пакете "MyPackage", то копия создается в пакете "Custom". Даже если в системной настройке CurrentPackageId установлен "MyPackage".

Является ли данное поведение корректным?
И есть ли возможность при создании копии указывать в какой пакет создавать эту копию?
Версия 7.10.0.1742

Нравится

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

В новой диаграмме, которая создалась после копирования, нужно перейти на закладку Settings (Настройки) и в поле Package (Пакет) указать нужное значение (см. прикрепленный файл).

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

Насчет корректности такого поведения системы (копирования в Custom). Логично копировать в тот пакет, который указан пользовательским. Вы пишите, что сменили значение настройки CurrentPackageId, попробуйте изменить значение настройки CustomPackageUId, после вылогиниться и потом зайти и проверить, куда будет скопирована диаграмма.

"Алла Савельева" написал:В новой диаграмме, которая создалась после копирования, нужно перейти на закладку Settings (Настройки) и в поле Package (Пакет) указать нужное значение (см. прикрепленный файл).

При разработке мы так же меняем системную настройку Maintainer, по этому изменение пакета к которому относится диаграмма оказывается достаточно сложным процессом:

"Алла Савельева" написал:
...
попробуйте изменить значение настройки CustomPackageUId
...

Спасибо за подсказку, действительно, после того как изменил эту настройку копия процесса начала создаваться в нужном пакете.
В документации нигде не нашел про существование этой настройки...

Просьба к сотрудникам Террасофт:
Может стоит указать об этой особенности копирования диаграмм в документации или исправить код который смотрит на CustomPackageUId вместо CurrentPackageId?

На самом деле в документации информация об этой настройке есть на Академии по ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/paket-custom, хотя, как по мне, объяснение отличий не очень очевидно :confused:

Информацию по работе с пакетами можно найти тут: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-paketami

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

Добрый день.

Не могу понять как запустить БП из другого БП через элемент "Задание-сценарий". Подскажите, можно ли это сделать?
Так же в запускаемый процесс мне нужно передать параметр.

Нравится

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

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

Запустить БП из ScriptTask можно. Для передачи параметров необходимо использовать словарь. Пример:
DateTime someDate = Get("dateTimeParam");
IDictionary parameters = new Dictionary();
parameters["ContactNum"] = Get("ContactNum");
parameters["starttime"] = someDate.ToString();
IProcessExecutor processExecutor = userConnection.ProcessEngine.ProcessExecutor;
processExecutor.Execute("UsrSomeProcessName ", parameters);

"Зарицкий Олег" написал:Здравствуйте!

Запустить БП из ScriptTask можно. Для передачи параметров необходимо использовать словарь. Пример:
DateTime someDate = Get("dateTimeParam");
IDictionary parameters = new Dictionary();
parameters["ContactNum"] = Get("ContactNum");
parameters["starttime"] = someDate.ToString();
IProcessExecutor processExecutor = userConnection.ProcessEngine.ProcessExecutor;
processExecutor.Execute("UsrSomeProcessName ", parameters);

Спасибо. Попробовала сделать как вы сказали. В элементе "Задание-сценарий" прописала:

UserConnection userConnection=context.UserConnection;
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters["param1"] = idSale.ToString();
IProcessExecutor processExecutor = userConnection.ProcessEngine.ProcessExecutor;
processExecutor.Execute("UsrProcess23", parameters);

При сохранении и публикации процесса возникает ошибка (скриншот прикрепляю).
Не подскажите что я делаю не так?

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

Зачем придумывать велосипед? Есть элемент "Подпроцесс" - можно использовать его. Альтернативный вариант был описан в теме:
http://www.community.terrasoft.ru/forum/topic/25071

"Демьяник Алексей" написал:Зачем придумывать велосипед? Есть элемент "Подпроцесс" - можно использовать его.

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

Можете из скриптаска дернуть веб сервис, вот статья:
https://academy.terrasoft.ru/documents/technic-sdk/7-4-0/zapusk-process…

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

Добрый день, у нас возникли следующие проблемы с активностью при создании активности через БП:
- при выборе “тип сообщения” = исходящее в активности все равно выставляется входящее:

- к активности подсоединяется контакт, но в самом контакте в истории активность не отображается, но сам заголовок активности, связанной с данным контактом отображается в категории email (даже при типе и категории "задача) ":

- в разделе “Туры“ также в истории не отображаются активности, однако отображается вверху в панели “следующие шаги”:

Подскажите, пожалуйста, как можно устранить данные проблемы? :smile:

Нравится

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

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

Попробуйте заполнять не поле "Направление звонка", а поле "Тип сообщения". Внесите исправления в процесс.

Также создаваемые активности имеют тип "Email". Активности с типом "Email" отображаются на детали "Email", однако на детали "Активности" они не отображатся, т.к. на ней установлена фильрация по типу записи.

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