Данные бизнес процесса
Добрый день!
Подскажите пожалуйста где хранятся данные БП, которые живут во время жизни экземпляра?
Например нам нужно, чтобы каждый день в 9-00 операторы получили задачу проверки сообщений от пользователей в сторонней системе.
Эти сообщения нужно сохранить - создадим для них Тип объекта.
1. Также нужно сохранить дополнительные атрибуты к каждому сообщению, которые будут влиять на логику БП. Где их хранить? Кажется логичным было бы при создании БП иметь возможность указать в нём Атрибуты, но я такого не нашел.
2. Что такое "Маршрутный объект" ? Написано - " для которых может запускаться и исполняться бизнес-процесс".
2.1. А если БП запускается по расписанию - какой у него маршрутный объект?
2.2 А если БП запускается для всей БД т.е. взаимодействует с десятком Типов объектов - какой у него Маршрутный объект?
Запутался может - прошу пояснить за методологию )
Спасибо.
Комментарии
Добрый день!
У вас есть тип объекта, назовем его например "Объект для БП", в нем определен весь атрибутный состав
Так же у вас есть БП, назовем его например "БП проверка сообщений", в нем указываете связь с типом "Объект для БП"
И получается экземпляры которые будут создаваться в типе "Объект для БП", будут маршрутными объектами бизнес процесса "БП проверка сообщений"
При запуске бп по расписанию ничего не меняется маршрутный объект у бп будут так же экземпляром типа который связан с этим бп, но при запуске бп в алгоритме необходимо определять по какому именно экземпляру нужно запускать бп
Статья wiki
Спасибо.
1. Правильно я понял, что в типе данных "Объект для БП" в котором определен атрибутный состав для исполнения БП хранятся данные для разных экземпляров БП. Т.е., допустим, есть атрибуты "А" и "Б" в "Объект для БП" и если запустить 10 экземпляров параллельно этого БП, то будут хранится в атрибутах А и Б разные значения разных экземпляров этих БП. И вот каждый такой экземпляр типа объекта "Объект для БП" и называется маршрутным объектом конкретного экземпляра БП?
2. Как методологически правильно связывать БП с Типом данным? К примеру, у нас есть документ "Расходная накладная", мы этот тип данных наследовали от объекта "Документ". При конструировании какого-то БП нам нужно пользоваться (писать и читать) данными и этого типа данных и других и в т.ч. нужны специфические атрибуты для исполнения БП не имеющими отношения к Документам. Не правильным ли будет для каждого БП создавать свои Тип Данных в общем случае?
3. Не понятно выражение в конце "по какому именно экземпляру нужно запускать бп" - что значит запускать БП по экземпляру БП?
Спасибо.
Для понимания давайте определим что такое тип объекта простыми словами: это таблица в бд
Пример: то есть создали тип объекта "Объект для БП" и 4 экземпляра этого объекта с 3я кастомными атрибутами, то в бд это будет выглядеть как таблица
Соответственно по каждому экземпляру можем запускать бп
Советую прочитать блок про модель данных
1 БП = N кол-во экземпляров запущенного процесса
1 экземпляр запущенного процесса = 1 маршрутный объект
То есть запустить по одному бп можно сколько угодно маршрутных объектов, схема процесса будет у всех одна, но физически каждый маршрутный объект будет относится к своему экземпляру запущенного процесса и соответственно у маршрутных объектов будет свой набор значений в атрибутах
В тип можно добавлять любые атрибуты для покрытия любых кейсов, соответственно если создали тип "Расходная накладная" то можете расширить его атрибутный состав любыми атрибутами, тут четкого ответа нет и нужно продумать объектную модель более детально
Вот в случае когда запускаете бп из алгоритма то система автоматически не поймет с каким маршрутным объектом связать "экземпляр запущенного процесса", это нужно указывать в алгоритме
Вы пишите - "1 экземпляр запущенного процесса = 1 маршрутный объект". 1 маршрутный объект - это запись в таблице "Объект для БП"? Тогда как-же параллельный запуск БП?
Попробую задать вопрос на вымышленном примере:
Вот к примеру есть таблица "Расходные накладные" каждая запись - отдельный документ. Пусть это маршрутный объект БП "Получить скидку".
Например есть такой БП "Получить скидку" и я бы хотел, чтобы по одной накладной несколько пользователей могли бы запускать его сколько угодно раз:
Где хранить то, что выдал генератор случайных чисел? В таблице Расходных накладных его нет и он там не нужен.
Например, я хочу построить отчет вида:
1 маршрутный объект - это запись в таблице "Объект для БП"? Да, то есть экземпляр типа "Объект для БП"
Тогда как-же параллельный запуск БП? параллельный запуск означает что система разрешит по одной карточке запустить бп несколько раз, то есть будет 1 карточка и n количество экземпляров запущенного процесса (но одного конкретного бп)
По примеру из БП "Получить скидку":
Вы можете создать технический скрытый атрибут на карточке Расходных накладных который будет хранить случайное число
Или же создать отдельный тип (с атрибутами как из последней таблицы) в котором будете создавать экземпляр(строку) с заполненными полями прямо из бп при помощи алгоритмов
Я так понимаю, что Ваше предложение сделать технический атрибут фактически предлагает развязать таблицы предметной области (заявки, документы) и таблицы для БП. То, что они совпадают своими атрибутами - это частный случай для практикумов )
Именно об этом я писал выше "2. Как методологически правильно связывать БП с Типом данным? К примеру, у нас есть документ "Расходная накладная", мы этот тип данных наследовали от объекта "Документ". При конструировании какого-то БП нам нужно пользоваться (писать и читать) данными и этого типа данных и других и в т.ч. нужны специфические атрибуты для исполнения БП не имеющими отношения к Документам. Не правильным ли будет для каждого БП создавать свои Тип Данных в общем случае?"
Но вопрос все же остается. Если сделать скрытый артибут в Расходной накладной и запустить 5 параллельных экземпляров этого процесса. То в каждом из них будет своё число из генератора случайных чисел, а расходная накладная у нас одна с этим одним техническим скрытым атрибутом. Где будет хранится все эти значения параллельных процессов?
Создать отдельный тип и туда писать - это понятно, спасибо. Интересно, как сделать оптимальней.
Тех скрытый атрибут можно сделать объектным:
Создать новый тип объекта "Результаты генерации числа" с полем "Результат генерации"
Этот тип связать с типом "Расходная накладная" как дочерний объект например
И если Расходная накладная 5 раз пройдет бп, то алгоритм(нужно настроить на сервисном действии в бп) при помощи функции newInstance() создаст по экземпляру типа "Результаты генерации числа" и в каждый экземпляр запишет свое уникальное число
В алгоритме который будет создавать объекты так же нужно указать связь с текущей расходной накладной которая является маршрутным объектом
Итого когда Расходная накладная 5 раз прошла по бп, у нее сформировался реестр объектов типа "Результаты генерации числа" в каждом из которых свое уникальное число
Да, тоже выход, согласен.
По моему скромному мнению удобнее было бы ввести понятие Атрибут в БП и иметь возможность связывать некоторые атрибуты БП с некоторыми атрибутами маршрутных объектов и вообще объектов. Тогда было бы всё просто как мне кажется.