Московский институт стали и сплавов
Опубликован: 24.09.2015 | Доступ: свободный | Студентов: 657 / 50 | Длительность: 24:54:00
Специальности: Руководитель
Практическое занятие 11:

Внешнее хранилище данных

< Практическое занятие 10 || Практическое занятие 11
Аннотация: Цель занятия: целью занятия является изучение работы с внешним хранилищем данных, представленным в виде Excel таблиц.

Теоретические сведения

Теоретические сведения по работе ботов изложены в лекции 3 в разделе "Концепция ботов и бот-станций".

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

Для работы с внешним хранилищем в используется обработчик для бота "Внешнее хранилище данных", который обеспечивает возможность выполнения простых действий: добавления, чтения, удаления и обновления данных.

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

Порядок выполнения работы

В данной работе рассматривается разработка упрощенного варианта бизнес-процесса заказа автотранспорта для организации, располагающей собственным автопарком.

Описание бизнес-процесса.

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

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

После удовлетворения, заявка переносится в архив, заказчик получает задачу "Ознакомиться с запланированной заявкой", а "Гараж" должен отчитаться о выполненном рейсе.

Разработка бизнес-процесса.

1. Запустите RunaWFE симулятор, для этого дважды кликните по ярлыку "Start Simulation" на рабочем столе, или выполните команду меню Пуск / Программы / RunaWFE / Start Simulation. (Подробнее см. "Изучение интерфейса системы RunaWFE" )

2. Войдите в web-интерфейс системы RunaWFE под пользователем Administrator. (см. "Изучение интерфейса системы RunaWFE" ) Замечание. По умолчанию пароль пользователя Administrator - "wf".

3. Создайте следующих пользователей: (см. "Изучение интерфейса системы RunaWFE" )

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

  • Жуков Иван Ильич
  • Андреев Николай Викторович
  • Паучков Петр Петрович
  • Иванов Иван Иванович
  • Гусеницын Михаил Васильевич
  • Личинкин Василий Федорович
  • Сергеев Николай Иванович
  • Сверчков Иван Иванович

При создании, введите пароль для каждого пользователя (например - 123), знать старый пароль пользователя при этом не требуется (см. "Изучение перспективы ресурсов" ).

4. Создайте группы (см. "Изучение интерфейса системы RunaWFE" )

  • Гараж
  • Канцелярия
  • Диспетчеры
  • Сотрудники

5. Добавьте пользователей в группы

группа "Гараж":

  • Иванов Иван Иванович

группа "Канцелярия":

  • Гусеницын Михаил Васильевич
  • Личинкин Василий Федорович

группа "Диспетчеры":

  • Сергеев Николай Иванович

при этом все пользователи должны входить в группу "Сотрудники":

  • Жуков Иван Ильич
  • Андреев Николай Викторович
  • Паучков Петр Петрович
  • Иванов Иван Иванович
  • Гусеницын Михаил Васильевич
  • Личинкин Василий Федорович
  • Сергеев Николай Иванович
  • Сверчков Иван Иванович

6. Дайте полномочия группе "Сотрудники" на вход в систему (см. "Изучение интерфейса системы RunaWFE" )

7. Перейдите к пункту меню "Отношения" по ссылке "Отношения" в левой части экрана (см. "Стандарты и концепции, связанные с СУБПиАР" )

8. Кликните по ссылке "Создать отношение"

Команда создания отношения

Рис. 16.1. Команда создания отношения

9. В появившейся форме введите имя отношения ("Руководитель организации") и необязательное описание. После этого кликните на "Создать"

Ввод названия отношения

Рис. 16.2. Ввод названия отношения

10. Кликните на имени появившейся записи

Редактирование отношения

Рис. 16.3. Редактирование отношения

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

Создание пары (Сверчков-Сотрудники)

Рис. 16.4. Создание пары (Сверчков-Сотрудники)

12. Откройте среду разработки

13. Создайте новый проект "Занятие 11"

Для реализации задачи заказа автотранспорта, потребуется разработать два бизнес-процесса.

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

Бизнес-процесс "Заявка"

14. Создайте новый процесс "Заявка"

15. Добавьте элементы на схему бизнес-процесса в соответствии с рис. 16.5

Схема бизнес-процесса "Заявка"

увеличить изображение
Рис. 16.5. Схема бизнес-процесса "Заявка"

В бизнес-процессе используется следующие элементы: Начало, Действие, Задача сценария, Таймер, Исключающий шлюз, Параллельный шлюз, Окончание.

Для элемента "Задача сценария" используйте опцию компактный вид (см. "Работа с MS Word-ботом" ).

Для изменения названий по умолчанию, выделите элемент, кликнув по нему, перейдите в свойства и введите новое значение в поле "Название".

16. Создайте роли (См. "Изучение интерфейса системы RunaWFE" )

В разрабатываемом процессе используются следующие Роли:

  • Заказчик
  • Канцелярия
  • Гараж
  • Руководитель
  • бот

17. Инициализируйте роли

Роль "Заказчик" будет инициализирована пользователем, запустившим процесс, не требует инициализатора.

Роли "Канцелярия" и "Гараж" должны быть проинициализирована группами "Канцелярия" и "Гараж" соответственно. Выделите созданную роль, нажмите "Изменить", перейдите на вкладку "Группы и пользователи WF". Здесь необходимо выполнить синхронизацию с сервером, после чего "Выбрать" из списка нужную группу (см. рис. 16.6). Для проверки и ввода параметров соединения с сервером воспользуйтесь ссылкой "Настройки соединения" (см. "Изучение перспективы ресурсов" )

Инициализатор роли "Канцелярия"

Рис. 16.6. Инициализатор роли "Канцелярия"

Инициализируйте роль "Руководитель" отношением "Руководитель организации", примененным к роли "Заказчик":

Для этого выделите "Руководитель" в списке ролей на вкладке "Роли" и кликните "Изменить"

В появившейся форме перейдите на вкладку "Задать роль с помощью отношения". Нажмите на "Синхронизация", затем "Выбрать" (См. рис. 16.7)

Инициализация с помощью отношения

увеличить изображение
Рис. 16.7. Инициализация с помощью отношения

В списке будут отображаться импортированные с сервера отношения, выберите "Руководитель организации" и нажмите "ОК" (См. рис. 16.8)

Окно выбора отношения

Рис. 16.8. Окно выбора отношения

Откройте список для поля "Параметр отношения" и выберите роль "Заказчик" (См. рис. 16.9). Нажмите "ОК"

Инициализация роли Руководитель с помощью отношения

Рис. 16.9. Инициализация роли Руководитель с помощью отношения

Замечание. Инициализация для роли "бот" будет описана в последующих пунктах разработки.

18. Свяжите роли с узлами на графе

Роль "Заказчик" с узлами "Начало", "Ознакомиться с отказом" и "Ознакомиться с запланированной заявкой" (Подробнее см. "Изучение интерфейса системы RunaWFE" ).

Остальные роли свяжите с узлами в соответствии с рис. 16.5

19. Создайте новый тип данных

Заявка будет состоять из следующего набора данных:

  • "id" - идентификатор заявки (Строка)
  • "ФИО заказчика" (Строка)
  • "Тип авто" (Строка)
  • "Количество мест" (Целое число)
  • "С" - Дата/время подачи авто (Дата/Время)
  • "По" - Дата/время окончания рейса (Дата/Время)
  • "Статус" (Строка)

Эти данные удобно использовать в виде полей переменной пользовательского типа.

Перейдите на вкладку "Типы данных", нажмите "Создать" в области "Типы данных" В появившемся окне введите название типа - "Заявка", и нажмите "OK"

Создание нового типа

увеличить изображение
Рис. 16.10. Создание нового типа

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

Добавление атрибута

увеличить изображение
Рис. 16.11. Добавление атрибута

В появившемся окне введите название атрибута и нажмите "OK". Форма создания атрибута не отличается от формы создания переменной.

Создайте все атрибуты заявки:

Атрибуты заявки

увеличить изображение
Рис. 16.12. Атрибуты заявки

20. Создайте переменные

  • "Заявка" - переменная пользовательского типа "Заявка"
  • "Заявки" - переменная формата Список(Заявка)
  • "Комментарий заказчика" - переменная формата "Текст"
  • "Комментарий руководителя" - переменная формата "Текст"
  • "Комментарий канцелярии" - переменная формата "Текст"
Переменные процесса Заявка

увеличить изображение
Рис. 16.13. Переменные процесса Заявка

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

21. Создайте графические формы

Замечание. По умолчанию в качестве редактора форм используется CKEditor4. Однако, в случае если у вас в системе установлен браузер Microsoft Internet Explorer устаревшей версии - 6 (IE6) или 7 (IE7), формы могут отображаться некорректно. В этом случае следует переключить редактор на FCKEditor2 (как переключить редактор см. в "Изучение перспективы данных" )

Стартовая форма

На данной форме заказчик вводит данные заявки

Выделите узел "Начало" графа процесса "Заявка" правой кнопкой мыши и выберите команду "Форма" > "Создать форму" (Подробнее см. "Изучение перспективы данных" ).

На данной форме заказчик вводит данные заявки на автотранспорт.

Добавьте на форму текст "Введите данные заявки".

Нажмите на иконку вставки в форму таблицы (см. рис. 16.14), используйте 2 столбца и 4 строки (см. рис. 16.15). Расположите таблицу под текстом "Введите данные заявки".

Вставка таблицы на форму

увеличить изображение
Рис. 16.14. Вставка таблицы на форму
Свойства таблицы

Рис. 16.15. Свойства таблицы

Заполните колонки таблицы как показано на рис. 16.16. Во втором столбце используйте компонент формы "Ввод переменной". Для этого перейдите на вкладку "Компоненты форм", выделите необходимый компонент, в данном случае это "Ввод переменной" и с помощью мыши перетащите его на форму (Подробнее см. "Изучение перспективы операций" ).

Замечание. Альтернативным способом добавления на форму может быть двойной клик левой клавишей мыши по компоненту, после чего он будет добавлен в текущее положение курсора на форме.

Для вызова свойств добавленного на форму компонента используйте двойной клик левой клавишей мыши или пункт "Параметры компонента" контекстного меню (вызывается правой клавишей мыши).

В качестве параметра "Название переменной" задайте соответствующие поля переменной пользовательского формата "Заявка" (см. рис. 16.17)

Заполненная таблица ввода данных заявки

увеличить изображение
Рис. 16.16. Заполненная таблица ввода данных заявки
Ввод полей пользовательской переменной "Заявка"

Рис. 16.17. Ввод полей пользовательской переменной "Заявка"

Расположите под таблицей компонент для ввода переменной "Комментарий заказчика"

Стартовая форма процесса "Заявка"

увеличить изображение
Рис. 16.18. Стартовая форма процесса "Заявка"

Сохраните и закройте форму.

Задайте валидацию для переменных стартовой формы

Для этого кликните на стартовой форме правой клавишей мыши и выберите пункт "Форма > Проверка переменных формы", в появившейся форме выделяйте переменные и устанавливайте необходимые валидаторы. (Подробнее см. "Изучение перспективы операций" ).

Для "Заявка.Тип авто" добавьте валидатор "Обязательное поле". В поле "Сообщение об ошибке" введите - "Обязательное поле".

Для "Заявка.Количество мест" добавьте валидатор "Обязательное поле", а также "Диапазон числа" установив минимальное значение в "1" включительно (см. рис. 16.19), при этом в поле "Сообщение об ошибке" введите - "Должно быть задано минимум одно место"

Для "Заявка.С" добавьте валидатор "Обязательное поле", а также "Диапазон даты относительно текущей" установив параметр "Сдвиг в прошлое" в значение "0" (см. рис. 16.20), при этом в поле "Сообщение об ошибке" введите - "Дата подачи авто не может быть в прошлом"

Для "Заявка.По" используйте такие же валидаторы как и для "Заявка.С"

Валидатор "Диапазон числа" для "Заявка.Количество мест"

увеличить изображение
Рис. 16.19. Валидатор "Диапазон числа" для "Заявка.Количество мест"
Валидатор "Диапазон даты относительно текущей" для "Заявка.С"

увеличить изображение
Рис. 16.20. Валидатор "Диапазон даты относительно текущей" для "Заявка.С"

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

Заявка.По позже Заявка.С
а). переход

увеличить изображение
Рис. 16.21a. а). переход
б). добавление

увеличить изображение
Рис. 16.21b. б). добавление
в). конфигуратор глобального валидатора

увеличить изображение
Рис. 16.21c. в). конфигуратор глобального валидатора

Форма узла "Одобрить заявку"

Создайте форму для узла "Одобрить заявку"

Здесь руководитель просматривает заявку и вводит комментарий.

Форма "Одобрить заявку"

увеличить изображение
Рис. 16.22. Форма "Одобрить заявку"

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

Компонент "Отобразить переменную"

Рис. 16.23. Компонент "Отобразить переменную"

Создайте аналогичным образом остальные формы.

Форма "Принять заявку"

Рис. 16.24. Форма "Принять заявку"
Форма "Ознакомиться с отказом"

Рис. 16.25. Форма "Ознакомиться с отказом"
Форма "Ознакомиться с запланированной заявкой"

Рис. 16.26. Форма "Ознакомиться с запланированной заявкой"

22. Выберите класс обработчиков и задайте конфигурации

Задача сценария "Получить ФИО заказчика"

Необходима для получения ФИО заказчика.

Выделите задачу сценария (см. рис. 16.27), введите в свойство "Название" - "Получить ФИО заказчика"

Задача сценария "Получить ФИО заказчика"

Рис. 16.27. Задача сценария "Получить ФИО заказчика"

Выберите в качестве класса обработчика - "Получить информацию об исполнителе" (см. рис. 16.28).

Выбор класса обработчика для задачи "Получить ФИО заказчика"

Рис. 16.28. Выбор класса обработчика для задачи "Получить ФИО заказчика"

Вызовите конфигуратор обработчика. Для этого нажмите на выбор конфигурации в свойствах задачи сценария. И введите параметры как показано на рис. 16.29.

Конфигурация задачи сценария "Получить ФИО заказчика"

Рис. 16.29. Конфигурация задачи сценария "Получить ФИО заказчика"

Задача сценария "Сформировать id заявки"

Задача предназначена для формирования id подаваемой заявки. Данный идентификатор является уникальным и фактически равен id запущенного экземпляра процесса "Заявка". Кроме того, в данной задаче инициализируется статус заявки ("Не обработана").

Выберите в качестве класса обработчика - "Выполнить формулу" (см. рис. 16.30).

Выбор класса обработчика для задачи "Сформировать id заявки"

Рис. 16.30. Выбор класса обработчика для задачи "Сформировать id заявки"

Задайте конфигурацию:

Заявка.id=get_process_id()
Заявка.Статус="Не обработана"
Конфигурация задачи "Сформировать id заявки"

Рис. 16.31. Конфигурация задачи "Сформировать id заявки"

Задача сценария "Получить заявку из списка"

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

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

Свойства задачи "Получить заявку из списка"

Рис. 16.32. Свойства задачи "Получить заявку из списка"
Конфигурация задачи "Получить заявку из списка"

Рис. 16.33. Конфигурация задачи "Получить заявку из списка"

Подробная работа с внешним хранилищем будет описана в последующих пунктах.

23. Задайте задержку для Таймера

В процессе "Заявка" используется таймер для установки периода считывания заявки из внешнего хранилища. Кликните по таймеру правой клавишей мыши и выберите пункт "Задержка"

Вызов контекстного меню на элементе Таймер

Рис. 16.34. Вызов контекстного меню на элементе Таймер

Настройте задержку Таймера в соответствии с рис. 16.35

Задержка таймера

Рис. 16.35. Задержка таймера

24. Добавьте конфигурацию исключающего шлюза

В цикле опроса заявки с проверкой на предмет изменения ее статуса используется исключающий шлюз. Вызовите конструктор. Для этого кликните правой клавишей мыши по элементу и выберите пункт "Конфигурация". Это же можно сделать и через свойства элемента.

Вызов конструктора конфигурации исключающего шлюза

Рис. 16.36. Вызов конструктора конфигурации исключающего шлюза

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

"Заявка.Статус" не равно "Не обработана"
Конфигурация исключающего шлюза

увеличить изображение
Рис. 16.37. Конфигурация исключающего шлюза

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

Бизнес-процесс "Планирование"

25. Создайте новый процесс "Планирование"

26. Добавьте элементы на схему бизнес-процесса в соответствии с рис. 16.38

Схема бизнес-процесса "Планирование"

увеличить изображение
Рис. 16.38. Схема бизнес-процесса "Планирование"

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

Здесь используется тот же набор элементов что и для процесса "Заявка".

27. Создайте роли (См. "Изучение интерфейса системы RunaWFE" )

В разрабатываемом процессе используются следующие Роли:

  • Диспетчер
  • Бот

Роль "Диспетчер" будет инициализирована пользователем, запустившим процесс, не требует инициализатора.

Замечание. Инициализация для роли "бот" будет описана в последующих пунктах данной части практикума.

28. Свяжите роли с узлами на графе в соответствии с рис. 16.38

Подробнее см. "Изучение интерфейса системы RunaWFE"

29. Создайте переменные

Откройте процесс "Заявка", перейдите на вкладку "Переменные", выделите переменную "Заявка" и нажмите кнопку "Копировать" (см. рис. 16.39)

Копирование переменной

Рис. 16.39. Копирование переменной

Вернитесь в разрабатываемый процесс "Планирование", перейдите на вкладку "Переменные" и нажмите "Вставить" (см. рис. 16.40)

Вставка переменной

Рис. 16.40. Вставка переменной

Замечание. Вместе с переменной будет скопирован и пользовательский тип "Заявка"

Создайте остальные переменные:

  • "Все заявки" - переменная формата Список(Заявка), будет содержать считанные из внешнего хранилища необработанные заявки
  • "Отобранные заявки" - переменная формата Список(Заявка), будет содержать отобранные диспетчером заявки
  • "Количество заявок" - переменная формата "Целое число", хранит количество заявок
  • "индекс заявки" - переменная формата "Целое число", используется для хранения индекса обрабатываемой заявки
Переменные процесса "Планирование"

Рис. 16.41. Переменные процесса "Планирование"

30. Создайте графические формы

Замечание. По умолчанию в качестве редактора форм используется CKEditor4. Однако, в случае если у вас в системе установлен браузер Microsoft Internet Explorer устаревшей версии - 6 (IE6) или 7 (IE7), формы могут отображаться некорректно. В этом случае следует переключить редактор на FCKEditor2 (как переключить редактор см. в "Изучение перспективы данных" )

Отобрать заявки

На данной форме заказчик отбирает заявки которые будут запланированы.

Выделите узел "Отобрать заявки" графа процесса "Планирование" правой кнопкой мыши и выберите команду "Форма" > "Создать форму" (Подробнее см. "Изучение перспективы данных" ).

Добавьте на форму текст "Выберите заявки для обработки:", под которым расположите компонент "Множественный выбор из списка пользовательских переменных"

Для этого перейдите в панель "Компоненты форм", выделите компонент "Множественный выбор из списка пользовательских переменных" и с помощью мыши перетащите его на форму (Подробнее см. "Изучение перспективы операций" ).

Замечание. Альтернативным способом добавления на форму может быть двойной клик левой клавишей мыши по компоненту, после чего он будет добавлен в текущее положение курсора на форме.

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

Форма узла "Отобрать заявки"

увеличить изображение
Рис. 16.42. Форма узла "Отобрать заявки"

Для вызова свойств добавленного на форму компонента используйте двойной клик левой клавишей мыши или пункт "Параметры компонента" контекстного меню (вызывается правой клавишей мыши).

Заполните параметры компонента как показано на рис. 16.43.

Параметры множественного выбора из списка пользовательских переменных

Рис. 16.43. Параметры множественного выбора из списка пользовательских переменных

Разъяснение по параметрам:

  • "Входные данные" - это список из элементов которого выполняется отбор. В данном случае это все необработанные заявки - переменная "Все заявки"
  • "Название переменной" - это список в который будут сохранены отобранные элементы списка, указанного в параметре "Входные данные"
  • "Форма отображения" - используйте классический вариант отображения - "Двумерная таблица"
  • "Поле используемое для сортировки" - здесь критерий для предварительной сортировки таблицы. Используйте сортировку по "ФИО заказчика"

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

Запланировать заявки

Создайте форму для узла "Запланировать заявки". Расположите на форме компонент "Отобразить список пользовательских переменных". Используйте для этого двойной клик по компоненту из палитры.

Форма узла "Запланировать заявки"

увеличить изображение
Рис. 16.44. Форма узла "Запланировать заявки"

Двойным кликом мыши или с помощью контекстного меню перейдите в параметры компонента и заполните их в соответствии с рис. 16.45

Параметры компонента "Отобразить список пользовательских переменных"

Рис. 16.45. Параметры компонента "Отобразить список пользовательских переменных"

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

Обрабатывать еще заявки?

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

Узел "Обрабатывать еще заявки?"

Рис. 16.46. Узел "Обрабатывать еще заявки?"
Форма узла "Обрабатывать еще заявки?"

Рис. 16.47. Форма узла "Обрабатывать еще заявки?"

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

31. Выберите класс обработчиков и задайте конфигурации

Задача сценария "Определить количество заявок" требуется для определения количества необработанных заявок, считанных из внешнего хранилища.

Выделите задачу сценария (см. рис. 16.48), введите в свойство "Название" - "Определить количество заявок" Выберите в качестве класса обработчика - "Агрегатная функция над списком" (см. рис. 16.48).

Задача сценария "Определить количество заявок"

Рис. 16.48. Задача сценария "Определить количество заявок"

Вызовите конфигуратор обработчика. Для этого нажмите на выбор конфигурации в свойствах задачи сценария. И введите параметры как показано на рис. 16.49.

Конфигурация обработчика задачи сценария "Определить количество заявок"

Рис. 16.49. Конфигурация обработчика задачи сценария "Определить количество заявок"

Для определения количества элементов в списке используется функция "COUNT".

Задача сценария "Определить количество отобранных заявок"

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

Конфигурация обработчика задачи сценария "Определить количество отобранных заявок"

Рис. 16.50. Конфигурация обработчика задачи сценария "Определить количество отобранных заявок"

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

Задача "Инициализация индекса заявки" используется перед началом цикла, устанавливает индекс на последний элемент списка (обход заявок в обратном порядке). Выберите "Выполнить формулу" в качестве класса обработчика. Задайте конфигурацию:

'индекс заявки'='Количество заявок';
Задача сценария "Инициализация индекса заявки"

увеличить изображение
Рис. 16.51. Задача сценария "Инициализация индекса заявки"

Используйте переменные "индекс заявки" и "Количество заявок"

Задача "Получить заявку из списка отобранных" используется для получения заявки по индексу из списка отобранных заявок.

Класс обработчика - "Получить элемент списка".

Задача сценария "Получить заявку из списка отобранных"

Рис. 16.52. Задача сценария "Получить заявку из списка отобранных"

Задача сценария "Изменить статус заявки" предназначена для изменения статуса отобранной заявки с "Не обработана" на "Запланирована".

Класс обработчика "Выполнить формулу", конфигурация:

Заявка.Статус="Запланирована"
Задача сценария "Изменить статус заявки"

Рис. 16.53. Задача сценария "Изменить статус заявки"

Задача сценария "Индекс следующей заявки". - В цикле используется обход заявок в обратном порядке, поэтому в данной задаче сценария выполняется уменьшение индекса на 1.

Класс обработчика "Выполнить формулу", конфигурация:

'индекс заявки'='индекс заявки'-1;
Задача сценария "Индекс следующей заявки"

Рис. 16.54. Задача сценария "Индекс следующей заявки"

32. Задайте задержку для Таймера

В процессе "Планирование" используется таймер для установки периода считывания необработанных заявок из внешнего хранилища. Кликните по таймеру правой клавишей мыши и выберите пункт "Задержка". Установите задержу равной 10 секунд от даты прихода управления в состояние.

Настройка задержки таймера в процессе "Планирование"

Рис. 16.55. Настройка задержки таймера в процессе "Планирование"

33. Добавьте конфигурацию для исключающих шлюзов

Первый исключающий шлюз используется для проверки количества необработанных заявок, если их 0, то управление возвращается в задачу "Считать необработанные заявки", иначе идет по переходу "Отобрать заявки".

Конфигурация шлюза представлена на рис. 16.56.

Конфигурация исключающего шлюза 1

Рис. 16.56. Конфигурация исключающего шлюза 1

Второй исключающий шлюз используется для проверки количества отобранных диспетчером заявок, если диспетчер не отобрал ни одной заявки, то управление переходит в задачу "Обрабатывать еще заявки", иначе идет по переходу "Отобраны".

Конфигурация шлюза представлена на рис. 16.57.

Конфигурация исключающего шлюза 2

Рис. 16.57. Конфигурация исключающего шлюза 2

Третий исключающий шлюз используется в цикле обновления статуса запланированных заявок.

Если индекс обрабатываемой заявки достиг нуля, то статус всех отобранных заявок обновлен и цикл завершается, управление идет по переходу "все заявки обновлены".

Конфигурация шлюза представлена на рис. 16.58.

Конфигурация исключающего шлюза 3

Рис. 16.58. Конфигурация исключающего шлюза 3

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

Внешнее хранилище данных. Бот работы с внешним хранилищем.

В качестве внешнего хранилища данных о заявках используются Excel-листы. Строки на Excel листе соответствуют заявкам, а столбцы атрибутам заявки (id, Тип авто, Статус и т.д.).

Например, на рис. 16.59 представлен Excel лист с данными по четырем заявкам.

Пример внешнего хранилища

Рис. 16.59. Пример внешнего хранилища

Для работы с данным хранилищем используется специальный обработчик "Внешнее хранилище данных" (ru.runa.wfe.office.storage.handler.ExternalStorageHandler), позволяющий выполнять простейшие действия с данными:

Действие INSERT

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

Действие SELECT

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

Замечание. В качестве результата всегда возвращает список, даже если был получен только один элемент. Именно поэтому в процессе "Заявка", после чтения заявки по ее id, дополнительно используется обработчик "Получить элемент списка".

Действие UPDATE

Предназначено для обновления переменной пользовательского типа во внешнем хранилище. Обязательно использование условия для определения переменной, которую требуется обновить (иначе будут обновлены все переменные во внешнем хранилище).

Например, в разрабатываемом процессе используется для обновления заявки после изменения ее статуса с "Не обработана" на "Запланирована", зная ее id.

Действие DELETE

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

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

Рекомендации для корректной работы с "Внешним хранилищем данных":

  1. Один Excel-лист должен соответствовать одной таблице.
  2. Обработчик, реализующий коннектор к Excel-файлу, необходимо использовать только в задаче бота. Это нужно для того, чтобы исключить одновременный доступ к хранилищу из разных экземпляров процессов, в результате чего могут быть потеряны данные. При этом бот-станция должна быть настроена на последовательное выполнение заданий бота в рамках одного потока, работающего с внешним хранилищем. Таким образом может быть получен простейший аналог транзакций системы управления БД.
  3. Excel файл должен быть предварительно создан. Если в файле предполагается хранить более одной таблицы (расположенных на разных листах), то необходимо предварительно создать эти листы.
  4. Таблица всегда должна располагаться начиная с 1-го столбца, поэтому в конфигурации обработчика "Внешнее хранилище данных" параметр "Столбец" всегда должен быть равным "1".
  5. В момент выполнения обработчика, использующего одно из действий INSERT, DELETE, UPDATE, файлы внешнего хранилища данных не должны быть открыты, иначе действие не будет выполнено.
  6. Атрибуты пользовательского типа данных не должны содержать пробелы т.к. в случае использования такого поля в условии конфигурации обработчика внешнего хранилища, действие будет выполнено некорректно. Например, "Заказ.Количество мест" не будет работать в условии конфигурации обработчика внешнего хранилища, используйте "Заказ.Количество"

34. Откройте среду разработки

35. Перейдите на вкладку "Боты" среды разработки (если данная вкладка не отображается, ее можно включить в меню "Окно" > "Боты").

36. ОБЯЗАТЕЛЬНО (!) удалите все ботстанции из среды разработки, иначе создание ботов и задач будет приводить к ошибкам и некорректной работе.

Для этого выделите ботстанцию, кликните правой клавишей мыши, и выберите пункт "удалить" контекстного меню.

37. Импортируйте ботстанцию localbotstation с сервера WFE (Подробнее см. "Работа с MS Word-ботом" )

Если на сервере отсутствует ботстанция localbotstation, то создайте ее (подробнее см. "Работа с MS Word-ботом" ).

38. Создайте в среде разработки нового бота "Бот работы с внешним хранилищем"

Создание нового бота

Рис. 16.60. Создание нового бота
Ввод имени бота

Рис. 16.61. Ввод имени бота

39. Создайте задачи бота работы с внешним хранилищем

Для создания новой задачи бота: выделите бот, кликните правой клавишей мыши и выберите "Новая задача бота". Введите название задачи и нажмите "Готово".

Создание задачи бота

Рис. 16.62. Создание задачи бота

Далее выберите класс обработчика "Внешнее хранилище данных"

Выбор класса обработчика задачи бота

Рис. 16.63. Выбор класса обработчика задачи бота

Задача "Добавить заявку на обработку"

Данная задача бота предназначена для добавления заявки во внешнее хранилище.

Создайте новую задачу бота с названием "Добавить заявку на обработку". Выберите в качестве обработчика "Внешнее хранилище данных".

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

Входной параметр для задачи "Добавить заявку на обработку"

увеличить изображение
Рис. 16.64. Входной параметр для задачи "Добавить заявку на обработку"

Перейдите в секцию конфигурации задачи. Нажмите "Изменить"

Изменение конфигурации задачи

увеличить изображение
Рис. 16.65. Изменение конфигурации задачи

Будет открыт конструктор конфигурации задачи.

Конструктор конфигурации обработчика "Внешнее хранилище данных"

Рис. 16.66. Конструктор конфигурации обработчика "Внешнее хранилище данных"

Выберите из списка действий - INSERT.

Параметр "Входной файл" определяет Excel файл, выступающий в качестве внешнего хранилища. Задайте его как путь к файлу - C:\DB.xlsx

Нажмите "Добавить атрибут", в поле "Переменная" выберите входной параметр "Заявка".

Таблица с заявками будет располагаться на первой листе Excel, поэтому параметр "Страница по номеру" должен быть равен "1"

Параметр "Столбец" оставьте по умолчанию равными "1".

Замечание. Таблица всегда должна располагаться начиная с 1-го столбца, поэтому параметр "Столбец" всегда должен быть равным "1".

Таким образом, переменная связанная со входным параметром "Заявка" с помощью действия INSERT будет добавлена во внешнее хранилище, представленное файлом C:\DB.xlsx.

Конфигурация задачи "Добавить заявку на обработку"

Рис. 16.67. Конфигурация задачи "Добавить заявку на обработку"

Сохраните и закройте задачу бота.

Задача "Считать заявку"

Данная задача бота предназначена для считывания заявки из внешнего хранилища по ее id (уникальному идентификатору).

Создайте новую задачу бота с названием "Считать заявку". Выберите в качестве обработчика "Внешнее хранилище данных".

Добавьте входной параметр с названием "id" типа "Строка, Текст".

Добавьте выходной параметр с названием "Заявки" типа "Список".

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

Замечание. Действие SELECT в качестве результата всегда возвращает список, даже если предполагается получить только один экземпляр пользовательской переменной (например заявку по ее уникальному идентификатору), поэтому тип выходного параметра должен быть "Список".

Параметры задачи "Считать заявку"

увеличить изображение
Рис. 16.68. Параметры задачи "Считать заявку"

Перейдите в секцию конфигурации и нажмите "Изменить". Будет вызван конструктор конфигурации.

Выберите выполняемое действие - SELECT.

Укажите входной файл - C:\DB.xlsx

Добавьте атрибут - выходной параметр список "Заявки"

"Страница по номеру" - "1"

"Столбец" - "1"

Замечание. Таблица всегда должна располагаться начиная с 1-го столбца, поэтому параметр "Столбец" всегда должен быть равным "1".

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

Синтаксис условий следующий:

[имяАтрибута] оператор значение
  • [имяАтрибута] - это поле пользовательской переменной, заданной в параметре "Переменная" секции "Атрибут". Квадратные скобки у имени атрибута обязательны.

Замечание. Использование пробелов в [имениАтрибута], например [Количество мест] недопустимо, условие будет работать некорректно. Поэтому рекомендуется давать названия атрибутам пользовательского типа без пробелов, дабы их можно было использовать в условии конфигурации обработчика.

  • оператор - поддерживаются операторы < , > , <= , >= , != , == , like
  • значение - могут быть использованы как константное значение, например проверка статуса на равенство значению 'Не обработана', так и параметры используемые во входных параметрах задачи. Если используется параметр, то перед ним ставят символ @, например @id.

Кроме того, поддерживаются составные условия с применением скобок и логических операторов AND, OR.

Например, выполнить SELECT для заявок со статусом 'Не обработана', у которых 'Количество мест' больше или равно 10

[Статус] == 'Не обработана' AND [Количество мест] >= 10

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

В данной задаче требуется получить из хранилища заявку по ее уникальному идентификатору, поэтому используйте следующее условие:

[id] == @id

где [id] - это атрибут пользовательского типа "Заявка", @id - это входной параметр задачи (был добавлен в секции "Входные параметры" задачи)

Конфигурация задачи "Считать заявку"

Рис. 16.69. Конфигурация задачи "Считать заявку"

Задача "Добавить заявку в архив"

Задача выполняет добавление заявки в архивное внешнее хранилище.

Процесс создания данной задачи аналогичен созданию задачи "Добавить заявку на обработку". Отличие только в использовании другого Excel файла.

Пусть архивное внешнее хранилище будет в файле C:\Archiv.xlsx

Параметры задачи "Добавить заявку в архив"

Рис. 16.70. Параметры задачи "Добавить заявку в архив"
Конфигурация задачи "Добавить заявку в архив"

Рис. 16.71. Конфигурация задачи "Добавить заявку в архив"

Задача "Удалить заявку"

После добавления заявки в Архив, ее требуется удалить из основного хранилища.

Создайте новую задачу бота с названием "Удалить заявку". Выберите в качестве обработчика "Внешнее хранилище данных".

Добавьте входные параметры:

  • "id" типа "Строка, Текст"
  • "Заявка" типа "Пользовательский тип данных"
Параметры задачи "Удалить заявку"

Рис. 16.72. Параметры задачи "Удалить заявку"

Создайте конфигурацию задачи. Используйте действие DELETE.

Задайте условие удаления заявки по идентификатору

[id] == @id

Добавьте атрибут. Используйте входной параметр "Заявка"

Конфигурация задачи "Удалить заявку"

Рис. 16.73. Конфигурация задачи "Удалить заявку"

Задача "Считать необработанные заявки"

В процессе "Планирование" требуется считывать заявки со статусом "Не обработана".

Создайте новую задачу бота "Считать необработанные заявки". Используйте обработчик "Внешнее хранилище данных".

Добавьте выходной параметр "Заявки" типа "Список".

Выходные параметры задачи "Считать необработанные заявки"

Рис. 16.74. Выходные параметры задачи "Считать необработанные заявки"

Добавьте конфигурацию задачи.

Используйте действие "SELECT". В качестве атрибута используйте выходной параметр "Заявки".

Условие считывания необработанных заявок:

[Статус] == 'Не обработана'
Конфигурация задачи "Считать необработанные заявки"

Рис. 16.75. Конфигурация задачи "Считать необработанные заявки"

Задача "Обновить заявку"

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

Создайте новую задачу бота "Обновить заявку". Используйте обработчик "Внешнее хранилище данных".

Добавьте входные параметры "id" типа "Строка, Текст", "Заявка" типа "Пользовательский тип данных"

Входные параметры задачи "Обновить заявку"

Рис. 16.76. Входные параметры задачи "Обновить заявку"

Добавьте конфигурацию задачи.

Используйте действие "UPDATE". В качестве атрибута используйте входной параметр "Заявка".

Условие - обновить заявку зная ее идентификатор (передается во входном параметре задачи):

[id] == @id
Конфигурация задачи "Обновить заявку"

Рис. 16.77. Конфигурация задачи "Обновить заявку"

40. Экспортируйте бота вместе с задачами на сервер WFE (Подробнее см. "Работа с MS Word-ботом" )

41. Откройте процесс "Заявка"

42. Перейдите на вкладку "Роли"

43. Инициализируйте роль "бот"

Для этого выделите роль, нажмите "Изменить", в открывшемся окне выберите вкладку "Бот".

В выпадающем списке "исполнитель по имени" должен быть доступен "Бот работы с внешним хранилищем", выберите его.

Инициализатор роли ботом

увеличить изображение
Рис. 16.78. Инициализатор роли ботом

44. Повторите инициализацию роли бот и в процессе "Планирование"

45. Выполните привязку задач ботов в процессе "Заявка"

Кликните правой клавишей мыши на узле "Добавить заявку на обработку" и выберите пункт "Задача бота" > "Привязать".

В списке задач выберите "Добавить заявку на обработку"

Список доступных для привязки задач

Рис. 16.79. Список доступных для привязки задач

Нажмите ОК, будет открыта форма редактирования параметров задачи, выберите параметры в соответствии с рис. 16.80

Редактирование параметров задачи "Добавить заявку на обработку"

Рис. 16.80. Редактирование параметров задачи "Добавить заявку на обработку"

Аналогично выполните привязку для остальных задач.

Узел "Считать заявку по id" - задача бота "Считать заявку"

Редактирование параметров задачи "Считать заявку по id"

Рис. 16.81. Редактирование параметров задачи "Считать заявку по id"

Узел "Добавить заявку в архив" - задача бота "Добавить заявку в архив"

Редактирование параметров задачи "Добавить заявку в архив"

Рис. 16.82. Редактирование параметров задачи "Добавить заявку в архив"

Узел "Удалить заявку из основного хранилища" - задача бота "Удалить заявку"

Редактирование параметров задачи "Удалить заявку из основного хранилища"

Рис. 16.83. Редактирование параметров задачи "Удалить заявку из основного хранилища"

46. Выполните привязку задач ботов в процессе "Планирование"

Узел "Считать необработанные заявки" - задача бота "Считать необработанные заявки"

Редактирование параметров задачи "Считать необработанные заявки"

Рис. 16.84. Редактирование параметров задачи "Считать необработанные заявки"

Узел "Обновить заявку" - задача бота "Обновить заявку"

Редактирование параметров задачи "Обновить заявку"

Рис. 16.85. Редактирование параметров задачи "Обновить заявку"

47. Сохраните процессы и экспортируйте их на сервер WFE (Подробнее см. "Изучение перспективы потока управления" )

Выполнение процессов:

Замечание. Разработанные бизнес-процессы заказа автотранспорта могут выполняться некорректно в устаревших версиях браузера Internet Explorer (IE7 и ниже). Рекомендуется использовать актуальные версии современных браузеров.

48. Откройте web интерфейс системы RunaWFE

49. Войдите под пользователем Administrator, пароль – wf

50. Дайте права на запуск процесса "Заявка" для группы "Сотрудники"

Откройте "Запустить процесс", и перейдите в свойства определения бизнес-процесса "Заявка"

Переход в свойства определения бизнес-процесса

увеличить изображение
Рис. 16.86. Переход в свойства определения бизнес-процесса

Нажмите на ссылку "Обладатели полномочий".

Дайте право на чтение и запуск процесса "Заявка" для группы "Сотрудники"

Право на запуск бизнес-процесса для группы "Сотрудники"

увеличить изображение
Рис. 16.87. Право на запуск бизнес-процесса для группы "Сотрудники"

51. Дайте права на запуск, чтение, чтение экземпляра, а также остановку процесса "Планирование" для группы "Диспетчеры"

Обладатели полномочий на бизнес-процесс "Планирование"

увеличить изображение
Рис. 16.88. Обладатели полномочий на бизнес-процесс "Планирование"

52. Перейдите в меню "Бот станции"

53. Откройте ботстанцию localbotstation

54. Откройте бот работы с внешним хранилищем

Ботстанция localbotstation

увеличить изображение
Рис. 16.89. Ботстанция localbotstation

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

Опция последовательного выполнения задач бота

увеличить изображение
Рис. 16.90. Опция последовательного выполнения задач бота

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

56. Создайте в корне диска "C" пустые Excel файлы "DB.xlsx" и "Archiv.xlsx", являющиеся файлами внешнего хранилища

57. Войдите в систему под пользователем Сергеев, входящим в группу "Диспетчеры"

58. Запустите процесс "Планирование"

59. Перейдите в "Запущенные процессы" и откройте только что запущенный экземпляр процесса "Планирование"

Замечание. По умолчанию запущенные процессы отсортированы по возрастанию номера экземпляра, что неудобно при необходимости просмотреть "недавно" запущенный экземпляр. Измените тип сортировки - по убыванию номера экземпляра процесса. Подробнее о том как это сделать см. "Работа с MS Word-ботом"

Цикл считывания необработанных заявок в экземпляре процесса "Планирование"

Рис. 16.91. Цикл считывания необработанных заявок в экземпляре процесса "Планирование"

Как видите, управление пришло в цикл считывания необработанных заявок и будет находиться здесь пока во внешнее хранилище не добавят хотя бы одну заявку.

60. Войдите в систему под пользователем входящим в группу "Сотрудники", например Жуков

61. Запустите новый экземпляр процесса "Заявка"

62. Введите данные заявки заказа автотранспорта и нажмите "Запустить"

Подача заявки на автотранспорт от Жукова

Рис. 16.92. Подача заявки на автотранспорт от Жукова

63. Подайте еще пару заявок, например под пользователями Андреев и Паучков

Подача заявки на автотранспорт от Андреева

увеличить изображение
Рис. 16.93. Подача заявки на автотранспорт от Андреева
Подача заявки на автотранспорт от Паучкова

увеличить изображение
Рис. 16.94. Подача заявки на автотранспорт от Паучкова

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

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

Поступившие на рассмотрение к руководителю организации заявки

увеличить изображение
Рис. 16.95. Поступившие на рассмотрение к руководителю организации заявки

65. Откройте каждое из заданий, и одобрите заявки

Одобрение заявки руководителем

Рис. 16.96. Одобрение заявки руководителем

Каждой заявке присвоен уникальный идентификатор id (равный id соответствующего экземпляра процесса "Заявка") и статус "Не обработана".

Заявки будут направлены в канцелярию.

66. Войдите под пользователем Гусеницын, входящим в группу "Канцелярия"

67. Примите все заявки

Принятие заявки канцелярией

Рис. 16.97. Принятие заявки канцелярией

68. Войдите на сервер WFE под пользователем Administrator (пароль wf)

69. Откройте один из экземпляров процесса "Заявка"

Бот выполнил задачу добавления заявки на обработку

Рис. 16.98. Бот выполнил задачу добавления заявки на обработку

Как видно, бот выполнил задачу добавления заявки на обработку.

Управление пришло в цикл опроса статуса заявки.

70. Откройте файл внешнего хранилища данных - C:\DB.xlsx

Заявки во внешнем хранилище

увеличить изображение
Рис. 16.99. Заявки во внешнем хранилище

Все три поданные заявки добавлены в хранилище.

71. Закройте файл внешнего хранилища данных

72. Войдите под диспетчером "Сергеев"

73. Откройте задание "Отобрать заявки"

Задание "Отобрать заявки"

увеличить изображение
Рис. 16.100. Задание "Отобрать заявки"

Замечание. Периодичность проверки хранилища на предмет присутствия в нем необработанных заявок равна 10 секунд, первые 2 заявки были поданы как раз в течении этих 10 секунд, а 3-я позже. Именно поэтому, как видно из рис. 16.100, диспетчеру отображаются только 2 заявки.

74. Отберите обе заявки

Для этого поставьте галочку напротив каждой из заявок и выполните задание.

Множественный выбор заявок

увеличить изображение
Рис. 16.101. Множественный выбор заявок

75. Откройте полученное задание "Запланировать заявки"

Замечание. Убедитесь, что перед выполнением данного задания, файл DB.xlsx не открыт для просмотра, иначе бот не сможет вносить изменения во внешнее хранилище.

Нажмите "Запланировать заявки"

Задание "Запланировать отобранные заявки"

увеличить изображение
Рис. 16.102. Задание "Запланировать отобранные заявки"

76. Откройте выполняемый экземпляр процесса "Планирование"

Убедитесь, что бот выполнил задачу "Обновить статус".

Бот обновил статус отобранных заявок

Рис. 16.103. Бот обновил статус отобранных заявок

77. Войдите под пользователем "Administrator"

78. Откройте те экземпляры процесса "Заявка", заявки которых были отобраны и запланированы

Проверьте, что управление вышло из цикла опроса статуса заявки и бот успешно выполнил задачи переноса заявки в архив.

Бот выполнил задачи переноса заявки в архив

увеличить изображение
Рис. 16.104. Бот выполнил задачи переноса заявки в архив

79. Откройте основное и внешнее хранилище данных (файлы C:\DB.xlsx и C:\Archiv.xlsx)

Убедитесь, что все запланированные заявки были перенесены из основного хранилища в архив.

Основное хранилище данных

Рис. 16.105. Основное хранилище данных

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

80. Выполните активные задачи заказчиков и гаража: "Ознакомиться с запланированной заявкой", "Отчитаться о рейсе"

81. Войдите под диспетчером "Сергеев" и выполните задачу "Обрабатывать еще заявки?", выбрав "Да"

Продолжить обработку заявок

увеличить изображение
Рис. 16.107. Продолжить обработку заявок

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

82. Запланируйте оставшиеся заявки (если они имеются)

Замечание. Убедитесь, что перед выполнением данного задания, файлы DB.xlsx и Archiv.slsx не открыты для просмотра, иначе бот не сможет вносить в них изменения.

Задание для самостоятельной работы

Разработайте учебный вариант бизнес-процесса "Заказ канцтоваров" по следующему описанию.

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

  • "Экономный сотрудник" - товары, которые нужны для работы практически всем (ручка, карандаш, бумага и т.п.)
  • "Сотрудник" - товары, которые могут потребоваться сотруднику, но это происходит относительно редко (бокс для CD, булавки, калькулятор "Citizen" и т.п.)
  • "Отдел" - товары, которые предназначены не одному сотруднику, а сразу отделу (зарядное устройство для аккумуляторов, аккумуляторы пальчиковые, батарейки пальчиковые и т.п.)
  • "Фирменные материалы" - специальные товары, содержащие символику компании (блокнот А5 фирменный, конверт фирменный A4, конверт фирменный A5, пакет полиэтиленовый фирменный большой, портфель фирменный, ручка фирменная и т.п.)

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

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

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

Значок добавления вкладки

Рис. 16.108. Значок добавления вкладки

Каждое нажатие на данный значок приводит к добавлению новой вкладки на форму.

Добавленные на форму вкладки

Рис. 16.109. Добавленные на форму вкладки

Для редактирования названия вкладки:

  • кликните по вкладке
  • перейдите на страницу "Код"
  • измените необходимые названия
  • вернитесь на страницу "Дизайн" и сохраните форму
Вкладки с названиями по умолчанию

Рис. 16.110. Вкладки с названиями по умолчанию
Редактирование названий вкладок

Рис. 16.111. Редактирование названий вкладок

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

Форма выбора товаров для заказа

Рис. 16.112. Форма выбора товаров для заказа

Информация по заказанным товарам должна сохраняться во внешнем хранилище на отдельном листе "Заказанные товары", и содержать следующие данные:

  • id экземпляра процесса заказа канцтоваров
  • название товара
  • количество

Информация о принадлежности к группе товаров в "Заказанные товары" - отсутствует.

Заказанными товарами являются только те товары, у которых значение в поле "Количество" больше "0".

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

Замечание. Внешнее хранилище, представленное в виде excel файла, должно быть предварительно создано, в том числе и соответствующие листы. Кроме того, внимательно прочитайте рекомендации по использованию обработчика внешнего хранилища, описанные между пунктами 34 и 35 практического занятия "Разработка бизнес-процесса "Заказ автотранспорта"

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

По предоставленной информации работник склада решает - скомплектовать или отказать заказ.

В случае отказа:

  • работник склада должен ввести комментарий, содержащий причину отказа
  • товар должен быть удален из заказанных товаров
  • сотрудник, который заказывал товар должен получить задание "Ознакомиться с отказом" с отображением причины отказа

В случае решения скомплектовать заказ:

  • товары переносятся с листа "Заказанные товары" на лист "Архив скомплектованных заказов"
  • на складе обновляются остатки по товарам, которые были скомплектованы
  • работник склада получает задание "Выдать товар"
  • сотрудник, который заказывал товар, получает задания "Ознакомиться - заказ скомплектован" и "Получить товар"

На следующем рисунке изображена одна из возможных схем процесса заказа канцтоваров.

Схема бизнес-процесса "Заказ канцтоваров"

увеличить изображение
Рис. 16.113. Схема бизнес-процесса "Заказ канцтоваров"

Рассмотрим подробнее подпроцесс выполняющий обновление остатков товара на складе.

Схема подпроцесса "Обновление остатков товара на складе"

увеличить изображение
Рис. 16.114. Схема подпроцесса "Обновление остатков товара на складе"

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

Сам процесс организован в виде цикла с обходом заказанных товаров. Перед циклом определяется количество заказанных товаров. Используйте для этого обработчик "Агрегатная функция над списком" - COUNT.

Определение количества заказанных товаров

Рис. 16.115. Определение количества заказанных товаров

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

Переменные подпроцесса "Обновить остатки на складе"

Рис. 16.116. Переменные подпроцесса "Обновить остатки на складе"

В цикле выполняются следующие действия:

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

Рис. 16.117. Получение очередного товара из списка заказанных
  • бот выполняет считывание информации о товаре со склада по его названию

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

Параметры задачи "Считать товар со склада по названию"

Рис. 16.118. Параметры задачи "Считать товар со склада по названию"
Конфигурация задачи "Считать товар со склада по названию"

Рис. 16.119. Конфигурация задачи "Считать товар со склада по названию"
  • с помощью агрегатной функции COUNT определяется количество элементов в полученном после выполнения SELECT списке
Определение количества элементов в списке считанных товаров по названию

Рис. 16.120. Определение количества элементов в списке считанных товаров по названию
  • если count больше нуля, т.е. на складе есть товар с таким названием, то выполняется выборка товара из списка
Конфигурация исключающего шлюза

Рис. 16.121. Конфигурация исключающего шлюза
Получение товара из списка товаров

Рис. 16.122. Получение товара из списка товаров
  • обновление значения поля "Количество"

Замечание. Процесс является учебным вариантом, поэтом нет необходимости в проверке условия достаточности для заказа товара на складе.

Конфигурация обработчика "Выполнить формулу" для обновления количества товара на складе

Рис. 16.123. Конфигурация обработчика "Выполнить формулу" для обновления количества товара на складе
  • бот обновляет информацию по товару на складе
Параметры задачи бота "Обновить товар"

Рис. 16.124. Параметры задачи бота "Обновить товар"
Конфигурация задачи бота "Обновить товар"

Рис. 16.125. Конфигурация задачи бота "Обновить товар"
  • далее увеличивается индекс и из списка заказанных выбирается следующий товар

Условием выхода из цикла является обход всех заказанных товаров

Проверка условия "По всем ли заказанным товарам обновлены остатки на складе"

Рис. 16.126. Проверка условия "По всем ли заказанным товарам обновлены остатки на складе"

Требования к представлению результатов занятия

Должны быть представлены преподавателю отчет, внешнее хранилище в виде Excel-листов, файл с данными archive.datafile, полученный командой "Система/Выгрузить файл с данными/Экспортировать", содержащий разработанные на занятии бизнес-процессы и бот для работ с внешним хранилищем.

В отчете должны содержаться следующие выходные данные:

  1. Скриншоты основных действий, совершенных на занятии, с пояснениями
  2. Скриншоты, содержащие маршруты точек управления для экземпляров бизнес-процессов, доведенных до завершения.
  3. Описание возникших при выполнении задания проблем и найденных путей их решения (не обязательно, только если возникли проблемы при выполнении задания).

Контрольные вопросы

  1. Какие действия с внешним хранилищем можно выполнять с помощью обработчика "Внешнее хранилище данных" ?
  2. Почему работа с внешним хранилищем данных построена с помощью задач бота, а не задач сценариев? Объясните назначение опции бота - "Последовательное выполнение".
< Практическое занятие 10 || Практическое занятие 11
Александр Шальных-Булатов
Александр Шальных-Булатов

Вижу по теме информацию о том, что преподавателю нужно отправить отчет и контрольный файл.

Всего вопросов 2.

1. Куда и как отправлять преподавателю контрольный файл?

2. Какой отчет, о чем писать?

Инна Инна
Инна Инна

Та же проблема, что и у Марины. Содержание черного окошка и версию Java отправила на указанный почтовый адрес.