Перейти к основному содержимому
Версия: 5.x

How-to: Расширение форм

Предположим, что существует модуль, в котором описывается форма Sku, которая является формой для редактирования Sku:

MODULE Sku;

CLASS Sku; // объявляем класс Sku

name 'Наименование' = DATA BPSTRING[100] (Sku); // создаем ему свойство имя

FORM sku 'Sku' // создаем форму Item
// добавляем объект товар и делаем, чтобы на ней отображался ровно один экземпляр
OBJECTS s = Sku PANEL
PROPERTIES(s) name // добавляем свойство имени товара на форму

EDIT Sku OBJECT s;
;

DESIGN sku {
// создаем новый контейнер в стандартный контейнер сразу после i.box
// этот контейнер будет панелью закладок, в который можно будет добавлять закладки со свойствами товара
NEW skuDetails AFTER BOX(s) {
type = TABBED;
fill = 1; // пусть расширяется на всю форму
}
}

Необходимо реализовать функционал по добавлению к Sku множества штрих-кодов. Это можно реализовать, создав новый модуль, который введет новый класс Barcode и расширит форму редактирования Sku возможностью ввода штрих-кодов:

MODULE Barcode;

REQUIRE Sku;

CLASS Barcode; // объявляем класс штрих-кода

id = DATA BPSTRING[13] (Barcode); // создаем свойство с номером штрих-кода
sku = DATA Sku (Barcode); // создаем ссылку штрих-кода на sku

EXTEND FORM sku // создаем форму Item
OBJECTS b = Barcode // добавляем объект штрих-кодов
PROPERTIES(b) id // добавляем номер штрих-кода в таблицу штрих-кодов
PROPERTIES(b) NEW, DELETE // добавляем действия по созданию и удалению штрих-кодов
FILTERS sku(b) == s // делаем, чтобы показывались только штрих-коды этого sku
;

DESIGN sku { // расширяем дизайн формы Item
skuDetails {
// делаем контейнер, в котором находится все, что касается штрих-кодов, закладкой в предварительно
// созданной панели закладок
MOVE BOX(b);
}
}

Следует отметить, что модуль Barcode рассчитывает на то, что существует форма Sku, и в ней есть объект s и контейнер с именем skuDetails. Если форма по какой-либо причине изменится, то модуль Barcode станет неработоспособным.