Практикум. Система учета заявок на канцтовары. Объектная модель.
Общие сведения об объектной модели
Реализация любого приложения начинается с создания предметной области, типов объекта, их атрибутов и настройки связи между элементами объектной модели.
Перед тем как приступить к настройке приложения необходимо выделить основные используемые понятия:
-
Атрибут – значимая характеристика объекта, используется для идентификации, классификации, выражения количественной характеристики или состояния объекта;
-
Тип объектов – набор характеристик(атрибутов);
-
Экземпляр – набор сведений о конкретном объекте, создается Системой при заполнении данными;
-
Реестр объектов – накопитель сведений одного типа;
-
Связь – индикатор взаимоотношений между объектами. Существует 3 типа связей: наследования, агрегации и ассоциации.
При проектировании объектной модели существует возможность использовать готовые и создавать новые типы объектов. После описания типов данных и определения их характеристик платформа автоматически создаст оптимальные таблицы, ключи, индексы, связи и структуры.
Работа с объектной моделью включает в себя несколько этапов:
-
Создание предметной области, на которой будет происходить создание объектной модели;
-
Создание типов объекта. Перед созданием типа объекта необходима проверка отсутствия в Системе, что позволит обойти дублирование данных;
-
Определение атрибутивного состава нового типа объектов и других настроек;
-
Настройка связей ассоциации и агрегации между типами объекта;
-
Наполнение типа объектов данными – экземплярами объектов – и последующее использование созданного типа в реализации бизнес-приложения.
Описание модуля
Для решения рассматриваемой бизнес-задачи необходимо построить объектную модель, содержащую следующие типы объектов:
-
Заявка – ключевой тип объектов, с которым взаимодействуют пользователи. Сотрудники-инициаторы создают экземпляры типа, а Сотрудник АХР просматривает и редактирует их;
-
Позиция в заявке – таблица для хранения данных о канцелярском товаре, заказанном количестве и цене. Связывает заявку и справочник канцтоваров;
-
Справочник канцтоваров – справочник для хранения данных о канцтоварах для заказа;
-
Категория – справочник, в котором хранятся экземпляры типов товаров.
Целевая объектная модель должна выглядеть следующим образом:
Создание предметной области
Для удобства работы на платформе предусмотрена работа с моделью данных в виде ER-диаграммы (диаграммы предметной области), которая наглядно отображает состав и связи между элементами настраиваемой объектной модели.
Для создания новой ER-диаграммы есть два способа:
-
На стартовой странице в виджете «Предметные области» нажмите на кнопку «Создать».
-
Через главное меню перейти в пункт «Администрирование» – «Управление объектами» – «Предметные области». После перехода в реестре предметных областей создать новый экземпляр типа с помощью кнопки «Создать».
Создайте новую предметную область. Задайте для предметной области Наименование «Система учета заявок по канцтоварам». Сохраните экземпляр с помощью кнопки на панели управления.
Определение типов объектов
Для реализации объектной модели используются типы объектов для описания сущностей.
В редакторе предметной области предусмотрено добавление уже имеющихся типов объектов и создание новых.
Определение типа объекта «Справочник»
Создайте новый тип объектов «Справочник» - тип объектов, хранящий экземпляры дочерних справочников. Он используется для стандартизации атрибутивного состава для типов-справочников, а также реализации их связи для обращения к значениям каждого при необходимости.
Создайте тип объектов «Справочник» [DICTIONARY], в качестве родителя укажите тип объектов «Объект» - он является абстрактным объектом, содержащим минимально необходимый набор атрибутов. При необходимости добавить новый справочник, в качестве родителя можно будет использовать этот тип объектов.
Необходимо сразу корректно заполнить поля «Наименование таблицы» и «Родитель», так как после сохранения данного типа, изменить их будет нельзя. |
Сохраните настройки типа объекта с помощью кнопки «Ок» и вернитесь к предметной области – созданный тип объектов будет расположен на ней в виде прямоугольника с наименованием.
Чтобы не усложнять предметную область, уберите его с предметной области. Для этого раскройте панель действий, нажав на тип объектов правой кнопки мыши. Затем выберите способ удаления «Убрать Тип объекта из Предметной области».
После этого предметная область будет пуста, но к типу объектов «Справочник» также можно обращаться, так как из системы он не удален. Сохраните настройки предметной области.
Определение типа объекта «Справочник канцтоваров»
Создайте тип объектов: заполните поле Наименование – «Справочник канцтоваров», и Наименование таблицы – OFFICE_SUPPLY. В качестве родителя выберите тип объектов «Справочник» и сохраните настройки типа объектов.
В нижней части окна на первой вкладке расположены атрибуты объекта. На вкладке «Атрибуты» отображается список всех атрибутов данного типа в виде таблицы. В списке атрибутов указываются унаследованные (родительские), существующие и созданные пользователем атрибуты. Для того чтобы отобразить список родительских атрибутов, необходимо активировать переключатель «Показать атрибуты родительского типа».
Чтобы добавить существующие в системе атрибуты, нажмите на кнопку «Добавить существующий» и в появившемся модальном окне выберите необходимый из перечня атрибутов. Использование существующих атрибутов позволит обойти дублирование данных и расширение базы данных.
Добавьте существующий атрибут «Изображение» [SYS_IMAGE], который будет содержать изображения товаров. Для этого нажмите на кнопку «Добавить существующий», в появившемся модальном окне активируйте переключатель «Выбор атрибута из полного списка атрибутов» и в раскрывающемся списке с помощью поиска найдите и выберите «Изображение» [SYS_IMAGE]. После этого нажмите на кнопку «Добавить», чтобы добавить его в список атрибутов текущего типа объекта.
Создание новых пользовательских атрибутов происходит с помощью кнопки «Добавить новый», расположенной на панели инструментов.
При добавлении атрибута могут быть определены не только его основные характеристики, но и внешний вид, версионность и дополнительные настройки.
Добавьте для типа объектов «Справочник канцтоваров» новый атрибут «Описание товара» [ITEM_DESRIPTION], оставьте тип «Строка».
Изменение типа и наименования поля для таблицы недоступно для изменения после сохранения атрибута. |
На вкладке «Визуал» можно изменить внешний вид атрибута на визуале объекта – настройки визуалов объекта типа объектов будут рассмотрены позже. В зависимости от типа настраиваемого атрибута Система позволяет выбрать необходимый визуал. Перейдите на вкладку «Визуал» и для того, чтобы отображать данные полем в несколько строк, из раскрывающегося списка выберите «Многострочный ввод».
Аналогичным образом создайте новый атрибут «Цена (руб.)» [PRICE] и установите следующие значения: • Тип – «Денежный»; • Минимум – 0; • Значение по умолчанию – 0; • Обязательность – Да.
После добавления атрибутов сохраните изменения в настройках типа объекта с помощью кнопки «Ок» и вернитесь к предметной области. Сохраните предметную область.
Определение типа объекта «Категория»
Создайте новый тип объектов «Категория» [CATEGORY] и установите для него родителя - «Справочник». Экземпляры этого типа объектов будут содержать справочные данные о категориях канцтоваров. В этот тип объектов добавлять атрибуты не нужно, так как он наследует необходимые атрибуты от родительского типа объектов.
После сохранения типа объектов появятся дополнительные возможности, представленные кнопками в верхней части окна настройки типа объектов. Для того чтобы заполнить Тип объектов экземплярами, следует перейти к реестру с помощью кнопки «Открыть реестр».
В реестре объектов могут быть добавлены новые записи, отредактированы или удалены существующие. Создайте новую запись в реестре используя кнопку на панели управления.
Заполните поле «Наименование» - «Бумага для офисной техники» и сохраните объект.
Вернитесь к реестру и аналогичным образом создайте экземпляры справочника категорий канцтоваров, указанные в приложении:
-
Канцелярские мелочи;
-
Календари, планинги, органайзеры;
-
Папки и системы архивации;
-
Письменные принадлежности;
-
Записные книги, блокноты.
Закройте вкладку и вернитесь к настройке предметной области.
Определение типа объектов «Позиция в заявке»
Создайте новый тип объектов «Позиция в заявке» [SUPPLY_ORDER], экземпляры этого типа объектов будут содержать сведения о количестве и итоговой цене конкретного товара. В качестве родителя выберите тип объектов «Объект» и сохраните настройки типа объектов.
Добавьте новый атрибут «Количество» [SUPPLIES_QUANTITY], в котором будет храниться информация о количестве товара в заказе. В модальном окне заполните поля следующими значениями:
-
Тип – «Целое число»;
-
Обязательность – Да;
-
Минимум – 0;
-
Значение по умолчанию – 1.
Добавьте новый атрибут «Стоимость (руб.)» [SUPPLIES_COST], в котором будет храниться информация об итоговой стоимости конкретного товара. В модальном окне заполните поля следующими значениями:
-
Тип – «Денежный»;
-
количество знаков после запятой – 2;
-
Обязательность – Да;
-
Минимум – 0;
-
Значение по умолчанию – 1.
Перейдите на вкладку «Дополнительное» и активируйте переключатель «Доступен только для чтения», чтобы пользователь не мог изменить значение поля атрибута вручную.
Добавьте новый атрибут «Наличие товара» [IS_AVAILABLE], в котором будет храниться информация о наличии товара. В модальном окне заполните поля следующими значениями:
-
Тип – «Логический»;
-
Значение по умолчанию – Нет;
-
Обязательность – Да.
На вкладке «Визуал» выберите из раскрывающегося списка вариант представления «Логический атрибут в виде checkbox’а».
Сохраните тип объектов и вернитесь к предметной области.
Определение типа объектов «Заявка»
Создайте новый тип объектов «Заявка» [SUPPLIES_REQ], экземпляры этого типа объектов будут содержать информацию о заявках сотрудников. В качестве родителя выберите тип объектов «https://docs-public.gdcloud.org/platform/ru/system-classes-of-business-processes.html[ДО.Документ]» и сохраните настройки типа объектов.
Тип объектов «ДО.Документ» это системный тип объектов, настройки которого нельзя изменить. Но его можно использовать в качестве родителя для типов объектов, по данным которых в дальнейшем будут формироваться документы, так как он имеет необходимые для этого атрибуты «Дата документа», «Номер документа» и «Прикрепленные файлы». Чтобы просмотреть все родительские атрибуты, нажмите на кнопку «Показать атрибуты родительского типа».
В экземплярах типа, для которого тип «ДО.Документ» - родительский, можно менять настройки унаследованных атрибутов. Настройте следующие атрибуты родительского типа:
-
Состояние [STATE_ID] – обязательность – Да, Значение по умолчанию – Черновик (такое состояние будет у заявки до того, как она будет отправлена на рассмотрение, пока у заявки такой статус ее инициатор может менять ее);
-
Дата документа [DOC_DATA] – Обязательность – Да, Значение по умолчанию – текущая дата;
Добавьте новый атрибут «Итоговая стоимость» [TOTAL_COST], в котором будет храниться информация об итоговой цене всей заявки. В модальном окне заполните поля следующими значениями:
-
Тип – «Денежный»;
-
Количество знаков после запятой – 2;
-
Обязательность – Да;
-
Минимум – 0;
-
Значение по умолчанию – 0.
Сохраните тип объектов и вернитесь к предметной области.
Настройка связей между типами объекта
Настройте связи между типами объектов на предметной области.
На платформе реализован функционал установки связей для сопоставления данных между двумя типами объектов.
Настройте связь между типом «Справочник канцтоваров» и «Категория», для того чтобы на форме товара отражалась его категория.
Создайте ассоциативную связь от типа объектов «Справочник канцтоваров» к типу объектов «Категория». Для этого выберите тип объектов «Справочник канцтоваров» и откройте выпадающий список действий, выберите команду «Создать ассоциативную связь» и щелкните по типу объектов «Категория».
После этого откроется модальное окно создания атрибута: установите в нем обязательность – «Да». При необходимости в текущем окне можно изменить настройки атрибута до сохранения, но после часть настроек будет недоступна для редактирования. Сохраните изменения, нажав на кнопку «Ок».
Таким образом, в типе объектов «Справочник канцтоваров» будет создан объектный атрибут, ссылающийся на Тип объектов «Категория».
Сохраните предметную область.
Чтобы при работе с типом объекта «Позиция в заявке» у пользователей была возможность обращения к экземплярам справочника канцтоваров, для типа объектов «Позиция в заявке» добавьте объектный атрибут со ссылкой на объект «Справочник канцтоваров».
Для этого создайте ассоциативную связь от типа «Позиция в заявке» к типу «Справочник канцтоваров», тем самым создав объектный атрибут «Товар» [OFFICE_SUPPLY_ID]. Укажите обязательность – Да. Сохраните объектный атрибут.
Создайте ассоциативную связь от типа «Позиция в заявке» к типу «Заявка», тем самым создайте атрибут «Заявка» [SUPPLIES_REQ_ID] и укажите обязательность – Да. Таким образом, каждый элемент типа объекта «Позиция в заявке» будет ссылаться на элемент типа «Заявка».
Для того чтобы в заявке указывался список экземпляров типа «Позиция в заявке», измените связь ассоциации на связь агрегации.
На предметной области выделите стрелку, обозначающую связь и в выпадающем списке действий выберите «Преобразовать в связь агрегации».
Создайте дочерний атрибут «Позиции» [SUPPLY_ORDER_LIST] и укажите обязательность – Да.
Определение выражений для типов объекта
Выражения – это алгоритмы на типе объекта, выполняющие автоматическое заполнение привязанных к ним атрибутов. С помощью выражений можно реализовать автонаименование объектов, их нумерацию, расчет вычислимых показателей, а также заполнение атрибутов данными.
Создание и настройка выражений происходит в настройках типа объекта на вкладке «Выражения\Автокалькуляции». Все системные и созданные пользователями алгоритмы выражений хранятся в реестре алгоритмов объектов в папке «Карточки объектов», в который можно перейти с помощью главного меню: «Администрирование» - «Управление объектами» - «Алгоритмы объектов».
Также можно создать собственную папку для хранения созданных алгоритмов с помощью кнопки на верхней панели. |
Если выражения наследуются от родительского типа объектов, их невозможно отредактировать и удалить на уровне дочернего типа. Например, все типы объектов по умолчанию содержат выражение для автоматического заполнения наименования объекта. Указанное выражение наследуется от типа «Объект». Для задания нового алгоритма следует использовать кнопку «Переопределить настройки».
Для создания нового выражения воспользуйтесь кнопкой «Добавить новое выражение».
Выражения для типа «Позиция в заявке»
Настройте алгоритм для автоматического наименования экземпляра для типа объектов «Позиция в заявке». Для этого в настройках типа объектов «Позиция в заявке» на вкладке «Выражения/Автокалькуляция» выберите строку с алгоритмом наименования и выберите «Переопределить настройки».
Редактор алгоритмов содержит в себе поле для формулы и панель «Инструменты», на которой располагаются доступные функции: набор функций определяется типом алгоритма.
Создайте алгоритм «Алгоритм наименования позиции» [ORDER_ITEM_NAME_ALG], который будет автоматически генерировать значение для атрибута «Наименование» при создании экземпляра. Наименование будет содержать информацию о выбранном товаре, заказанном количестве и стоимости. Сохраните настройки алгоритма с помощью кнопки сохранения на панели управления.
Заполните формулу алгоритма.
Для этого воспользуйтесь следующими функциями:
Выполните следующую последовательность действий чтобы создать формулу алгоритма:
-
На панели инструментов в разделе «Источники» выберите функцию attr. В появившемся окне выберите атрибут, значение которого будет подставляться в алгоритм – Товар. Наименование;
-
Введите с клавиатуры «+» для конкатенации(склеивания) элементов и строк формулы алгоритма между собой;
-
На панели инструментов в разделе «Текст» вызовите функцию text, укажите в кавычках « в количестве », а затем введите «+» и вставьте атрибут «Количество» с помощью функции attr, аналогично шагу 1;
-
Аналогично шагам 2-3 добавьте в алгоритм + “, по цене: ” + Стоимость(руб.).
Сохраните алгоритм и вернитесь к настройке типа объектов «Позиция в заявке».
Дважды щелкните по созданному экземпляру выражения наименования или воспользуйтесь кнопкой на панели управления для редактирования. Переведите в активное положение переключатель «Рассчитать в момент создания новых объектов» и в поле Автоматический пересчет выражения выберите из списка значение «При изменении любых атрибутов данного типа».
Создайте новое выражение для подсчета стоимости товара в заказе. Для этого создайте новое выражение с помощью кнопки на вкладке «Выражения/Автокалькуляции». В появившемся окне оставьте активным переключатель «Выражение». Чтобы создать алгоритм выражения, в поле Алгоритм, на основании которого считается выражение раскройте список дополнительных действий и выберите «Добавить».
Создайте алгоритм «Алгоритм стоимости позиции» [ORDER_ITEM_COST_ALG], который будет автоматически рассчитывать стоимость выбранного товара и возвращать данное значение в атрибуте.
Заполните формулу алгоритма
Воспользуйтесь функцией attr из группы «Источники».
Выполните шаги, чтобы повторить формулу алгоритма:
-
Вставьте атрибут Товар.Цена(руб.) с помощью функции attr;
-
Введите с клавиатуры знак умножения;
-
Вставьте атрибут Количество также с помощью функции attr.
Сохраните настройки алгоритма и в модальном окне переведите в активное положение переключатель «Расчет в момент создания новых объектов». Заполните поле значением из выпадающего списка Стоимость (руб.) (SUPPLIES_COST) и в поле Автоматический пересчет выражения выберите из списка значение «При изменении атрибутов, используемых в алгоритме».
Сохраните изменения на типе объектов и вернитесь к предметной области.
Выражения для типа «Заявка»
Необходимо создать выражение, которое будет автоматически нумеровать заявки. Для реализации механизма автонумерации на платформе представлен отдельный тип объектов «https://docs-public.gdcloud.org/platform/ru/autonumbering-object-type.html[Автонумерация]» [SYS_SEQUENCE]. Для того чтобы перейти к нему, откройте главное меню и перейдите в раздел «Справочники» - «Автонумерация».
В открывшемся реестре создайте новый экземпляр «Автонумерация заявок» [REQ_NUM], укажите текущее значение – 1. Сохраните объект.
Перейдите на стартовую страницу, нажав на логотип в главном меню, и откройте предметную область, нажав на ее иконку.
Откройте настройки типа объектов «Заявка» и перейдите на вкладку «Выражения/Автокалькуляции». Переопределите настройки выражения для Автоматической нумерации документов.
В появившемся окне оставьте активным переключатель «Выражение» и добавьте новый алгоритм выражения.
Создайте алгоритм «Нумерация заявок» [REQ_NUM_ALG], который будет автоматически последовательно нумеровать заявки.
Заполните поле формулой алгоритма
Воспользуйтесь функциями:
Выполните следующие шаги чтобы повторить формулу алгоритма:
-
На панели инструментов в разделе «Текст» вызовите функцию text и впишите в кавычках «Заявка №»;
-
Введите с клавиатуры «+» для конкатенации(склеивания) элементов и строк формулы алгоритма между собой;
-
После знака «+» вызовите функцию sequenceNextVal – в появившемся окне выберите только что созданный экземпляр «Заявка».
Сохраните изменения и вернитесь к настройке выражений типа. Создайте новое выражение для подсчета итоговой суммы заказа в заявке с помощью кнопки .
На вкладке «Выражения/Автокалькуляции» нажмите на кнопку создания выражения и активируйте переключатель «Автокалькуляция».
Заполните поля следующими значениями:
-
Атрибут со списком объектов – Позиции;
-
Атрибут для сохранения значения – Итоговая стоимость;
-
Атрибут для агрегации значения – Стоимость (руб.);
-
Способ агрегации – Сумма.
Ниже активируйте переключатель «Не запускать расчет выражения при сохранении (если значение прислал браузер)», чтобы итоговая стоимость не менялась после сохранения объекта.
Сохраните и вернитесь к настройкам типа объекта с помощью кнопки «Сохранить». Сохраните и примените настройки типа объекта по кнопке «Ок».