Есть много вопросов, поднятых такими проблемами.Например:
- в ваших таблицах Workflow определяет переходы из одного состояния в другое как изменение назначения от одного пользователя к другому.
- это может быть проблемой.Допустим, пользователь болен, уходит, в отпуск, ... Тогда ваш поток заблокирован.
- Это также не учитывает концепцию группы.
- другие (как я) определяттаблица переходов.StartState, NextState.
- Рабочий процесс представляет собой список переходов.
- Каждый переход требует, чтобы пользователь был определенного типа.Или с точки зрения управления пользователями, иметь определенную роль или быть членом группы.
Если ваш рабочий процесс является фиксированным и не подлежит изменению, ваш метод может быть в порядке.Но если рабочий процесс гибкий или может быть изменен / адаптирован, вам следует пойти на что-то более гибкое.
Тип настройки, о которой вы говорите, заставляет меня задуматься о программном обеспечении Jira (форма Atlassian), где вы определяететикеты, со статусом, рабочими процессами и пользователями.Возможно ли использовать инструмент управления рабочим процессом (т. Е. Buyasse или OpenSource)?В долгосрочной перспективе это может быть дешевле, чем строительство.
Ваша модель потенциально может быть расширена, чтобы включить:
- клиентов.Для какого клиента это предложение?
- , который является торговым представителем или менеджером по работе с клиентами, который отвечает за аудит рабочего процесса и его продвижение?
- ссылка на другие системы: как это связано с покупкой, дебиторская задолженность, ...
Все это на сегодняшний день требует глубокого анализа, который трудно выполнить на таких носителях, как этот (SO).
РЕДАКТИРОВАТЬ: 20181004
Я добавил следующую модель после вашего комментария.Я решил поместить рабочие процессы в базу данных:
Примечания (таблицы в алфавитном порядке):
Сотрудник
- Каждый сотрудник может быть связан с n номером EmployeeRole через таблицу Employee_has_EmployeeRole.
Предложение
- Сотрудник связан как сотрудник по продажам, поскольку он инициирует предложение.
- Рабочий процесс связан, поскольку для различных предложений может существовать много рабочих процессов.
Переход
- Дважды связан с государством.Начальное состояние и конечное состояние.
- Связано EmployeeRole, чтобы определить, какую роль сотрудник должен выполнять для этого перехода.
- Обеспечение выполнения приложением.
Workrlow_has_Transition
- Связывает переходы с рабочими процессами.
- Сотрудник, который завершил переход, записывается здесь.
- Theдата, в которой это было сделано, также хранится здесь.
- OrderInWorkflow - это просто число, позволяющее упорядочивать записи Workflow_has_Transition.
- Приложение должно убедиться, что переход не выполнен, прежде чем другиеболее низкого порядка (т. е. DoneDate имеет значение null).
- Также будет подтверждено, что Сотрудник, пытающийся выполнить его, имеет правильную EmployeeRole.
Сейчас, концепция группы сотрудников.Можно сказать, что в группе есть сотрудники с одинаковой EmployeeRole.Поэтому, когда ваше приложение должно отправить уведомление, отправьте его всем пользователям с ролью, необходимой для перехода.Это исключает необходимость создания таблицы EmployeeGroup, которая объединяет сотрудников.
Сценарии приложения:
- Start a Proposal
- Verify that the user trying to start a new one has the role "Sales Officer"
- Collect basic information.
- Link the Sales Officer to it (current user).
- Link a Workflow to it. Only propose the workflows which have at least 1 Workflow_has_Transition.
- Send a notification to the Employee(s) which have the EmployeeRole for the first Workflow_has_Transition for this new Workflow.
- These employees receive a notification.
- Progressing through the workflow
- An employee receives a notification about a Proposal and it's "todo" Transition.
- Employee views Proposal and Workflow (use the OrderInWorkflow to ORDER BY Transitions).
- Employee approves if he has the proper EmployeeRole, fill DoneBy_idEmployee and DoneDate.
При просмотре сценариев приложения вы найдете пробелы или пропущенные элементы.
Пример 1 Вы хотите записать отклонение Перехода?Как это будет обработано тогда?Вы отправляете уведомление сотрудникам с ролью для этого Перехода, чтобы просмотреть его?
Пример 2. Вы хотите сохранить полную историю предложения?Ex.Это Переход X отклонен дважды, но одобрен в третий раз.
Есть много подобных сценариев, которые покажут слабые стороны вашей модели, которые вы исправляете, когда завершаете этот анализ.Теперь это не идеально, я не уделял этому много времени.Но это отправная точка и иллюстрирует мою идею.