Подтип (Subtype)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Создание нового типа через Глобальное Хранилище) |
||
Строка 25: | Строка 25: | ||
# В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке '''Атрибуты'''. | # В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке '''Атрибуты'''. | ||
# Откроем [[Хранилище|Глобальное Хранилище]], найдем папку SubTypes. | # Откроем [[Хранилище|Глобальное Хранилище]], найдем папку SubTypes. | ||
− | # Добавим строковую переменную с именем '''TgdcGood'''. Установим ей значение '''Food''' -- это будет имя нашего подтипа для класса '''Продукт питания'''. | + | # Добавим строковую переменную с именем '''TgdcGood'''. Установим ей значение '''Food''' -- это будет имя нашего подтипа для класса '''Продукт питания'''. Если для некоторого класса задается несколько подтипов, то они перечисляются через запятую в строке. |
# Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в [[Исследователь системы|Исследователе]] создадим команду, укажем имя '''Продукт питания''', класс '''TgdcGood''' и подтип '''Food'''. Откроем и настроим соответствующие формы. | # Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в [[Исследователь системы|Исследователе]] создадим команду, укажем имя '''Продукт питания''', класс '''TgdcGood''' и подтип '''Food'''. Откроем и настроим соответствующие формы. | ||
# Пример доступа к новому классу из программного кода: | # Пример доступа к новому классу из программного кода: |
Версия 16:53, 16 июня 2014
Платформа Гедымин написана на объектно-ориентированном языке Object Pascal. Например, иерархия классов справочника контактов выглядит так:
Глядя на нее можно сказать, что Банк -- это особый вид компании, Компания -- Контакта, Контакт -- вид бизнес-объекта. Все указанные классы находятся в модуле gdcContacts.pas и компилируются в исполняемый файл gedemin.exe.
Возникает вопрос: как разработчик на платформе Гедымин может создавать новые классы бизнес-объектов если у него нет доступа ни к исходным кодам, ни к компилятору Delphi? Да и пишет он программный код на языке VBScript.
Для создания бизнес-классов в платформе, в класс TgdcBase добавлено строковое свойство SubType (Подтип):
property SubType: String read GetSubType write SetSubType;
Если в Паскале класс однозначно идентифицируется по его имени, то в платформе Гедымин бизнес-класс идентифицируется коомбинацией Имя класса + Подтип. Подтип может отсутствовать (пустая строка). Ниже приведены три способа создания Подтипов (т.е. фактически создания новых бизнес-классов).
Создание нового типа через Глобальное Хранилище
Рассмотрим на примере создания класса Продукт питания, наследника класса ТМЦ (TgdcGood).
- Продукту питания присущи специфические свойства: калорийность, содержание белков, жиров, углеводов, витаминов, пищевых добавок и т.п.
- Для хранения соответствующей информации в базе данных добавим поля в таблицу GD_GOOD (не делайте добавляемые поля обязательными для заполнения -- NOT NULL. При необходимости, контролируйте корректность значений с помощью триггеров).
- В диалоговом окне Товара поля для ввода данных автоматически появятся на вкладке Атрибуты.
- Откроем Глобальное Хранилище, найдем папку SubTypes.
- Добавим строковую переменную с именем TgdcGood. Установим ей значение Food -- это будет имя нашего подтипа для класса Продукт питания. Если для некоторого класса задается несколько подтипов, то они перечисляются через запятую в строке.
- Чтобы получить доступ к форме просмотра и диалоговому окну созданного класса, в Исследователе создадим команду, укажем имя Продукт питания, класс TgdcGood и подтип Food. Откроем и настроим соответствующие формы.
- Пример доступа к новому классу из программного кода:
... Dim Food, Creator Set Creator = New TCreator Set Food = Creator.GetObject(nil, "TgdcGood", "") Food.SubType = "Food" ' без присвоения подтипа это будет просто ТМЦ Food.SubSet = "All" Food.Open ...
Стоит обратить внимание, что указанным способом можно создать подтипы только для классов, прописанных в исходном коде платформы.
Создание нового справочника
Создание нового бизнес-класса справочника начинается с создания таблицы в разделе Исследователь-Сервис-Атрибуты. Имя этой таблицы и будет подтипом для одного из следующих классов:
- TgdcAttrUserDefined -- для таблиц с линейной (не древовидной) структурой.
- TgdcAttrUserDefinedTree -- для таблиц древовидной структуры.
- TgdcAttrUserDefinedLBRBTree -- для таблиц со структурой интервального дерева.
В диалоговом окне создания таблицы указывается ветка Исследователя для размещения команды вызова формы просмотра создаваемого класса.
Создание нового типа документов
Бизнес-классы документов (синоним типы документов, типовые документы) создаются в разделе Исследователь-Сервис-Типовые документы. В зависимости от того, какой раздел выбран в левой части окна, можно создать Документ пользователя, Складской документ или Прайс-лист. Информация о типах документов записывается в таблицу GD_DOCUMENTTYPE. RUID записи в таблице GD_DOCUMENTTYPE является Подтипом и используется в совокупности с одним из следующих классов:
- TgdcUserDocument -- для шапок пользовательских документов.
- TgdcUserDocumentLine -- для позиций пользовательских документов.
- TgdcInvDocument -- для шапок складских документов.
- TgdcInvDocumentLine -- для позиций складских документов.
- TgdcInvPriceList -- для шапок прайс-листов.
- TgdcInvPriceListLine -- для позиций прайс-листов.
Вышеупомянутые классы образуют следующую иерархию:
Функция класса TgdcBase.GetSubTypeList
Список допустимых подтипов возвращает функция GetSubTypeList. Смотрите комментарии для каждого из приведенных классов:
- TgdcBase.GetSubTypeList
- TgdcAttrUserDefined.GetSubTypeList
- TgdcUserBaseDocument.GetSubTypeList
- TgdcSelectedGood.GetSubTypeList