How-to: Импорт данных
Пример 1
Условие
Есть книги, для которых заданы наименование и цена. Также определена логика заказов.
REQUIRE Utils;
CLASS Book 'Книга';
name 'Наименование' = DATA ISTRING[100] (Book) IN id;
id 'Код' = DATA STRING[20] (Book) IN id;
book 'Книга' (STRING[20] id) = GROUP AGGR Book b BY id(b);
CLASS Order 'Заказ';
date 'Дата' = DATA DATE (Order);
number 'Номер' = DATA STRING[10] (Order);
CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail) NONULL DELETE;
book 'Книга' = DATA Book (OrderDetail) NONULL;
nameBook 'Книга' (OrderDetail d) = name(book(d));
quantity 'Количество' = DATA INTEGER (OrderDetail);
price 'Цена' = DATA NUMERIC[14,2] (OrderDetail);
FORM order 'Заказ'
OBJECTS o = Order PANEL
PROPERTIES(o) date, number
OBJECTS d = OrderDetail
PROPERTIES(d) nameBook, quantity, price, NEW, DELETE
FILTERS order(d) == o
EDIT Order OBJECT o
;
FORM orders 'Заказы'
OBJECTS o = Order
PROPERTIES(o) READONLY date, number
PROPERTIES(o) NEWSESSION NEW, EDIT, DELETE
;
NAVIGATOR {
NEW orders;
}
Нужно сделать кнопку, которая загрузит содержимое заказа из Excel-файла, выбранного пользователем на своем компьютере.
Решение
importXlsx 'Импортировать из XLS' (Order o) {
INPUT f = EXCELFILE DO {
LOCAL bookId = STRING[20] (INTEGER);
LOCAL quantity = INTEGER (INTEGER);
LOCAL price = NUMERIC[14,2] (INTEGER);
IMPORT XLS FROM f TO bookId = A, quantity = B, price = C;
FOR imported(INTEGER i) NEW d = OrderDetail DO {
order(d) <- o;
book(d) <- book(bookId(i));
quantity(d) <- quantity(i);
price(d) <- price(i);
}
}
}
EXTEND FORM order
PROPERTIES(o) importXlsx
;