Маленькое приложение «Домашняя библиотека» с использованием базы данных.
<AppXML title="Домашняя библиотека" default-class-name="Lib" log-modifying-date="true" language="ru">
<connect type="h2" login="sa" password="" alias="file:.data/homeLib" connect="true"/>
<database component-id="homeLibDatabase">
<db version="1">
create table genre ( id integer not null auto_increment,
name varchar(50),
modified_date datetime not null,
primary key (id)
);
create table authors (id integer not null auto_increment,
name varchar(50),
lastname varchar(20),
firstname varchar(20),
middlename varchar(20),
modified_date datetime not null,
primary key (id)
);
create table books ( id integer not null auto_increment,
name varchar(50),
genre_id integer not null,
author_id integer not null,
modified_date datetime not null,
primary key (id),
constraint fk_books_genre
foreign key (genre_id) references genre(id),
constraint fk_books_author
foreign key (author_id) references authors(id)
);
</db>
</database>
<main>
<window id="mainWindow" title="Домашняя библиотека" location="center" height="600" width="800">
<panel id="treeMenu" width="150" position="left" oncreated="booksView:mainPanel">
<tree id="mainTree" title="Меню" margin="0">
<treeitem text="Список книг" onselected="booksView:mainPanel"/>
<treeitem text="Справочники">
<treeitem text="Жанр" onselected="genreView:mainPanel"/>
<treeitem text="Автор" onselected="authorView:mainPanel"/>
</treeitem>
<treeitem text="Выход" onselected="mainWindow.close = true"/>
</tree>
</panel>
<panel id="mainPanel"/>
</window>
</main>
<common>
<view id="genreView" title="Справочник жанров" grid-mode="on"
statusbar-visible="false"
margin="0"
sql="select id, name from genre #refresh# order by name"
table-name="genre" id-field="id">
<toolbar visible="true"/>
<columns>
<column name="name" text="Название"/>
</columns>
<edit unique="name">
<edititem id="name" text="Название жанра" db-field="name" required="true"/>
</edit>
</view>
<view id="authorView" title="Справочник авторов" statusbar-visible="false" margin="0" grid-mode="on"
sql="select id, name, lastname, firstname, middlename from authors #refresh# order by name"
table-name="authors" id-field="id">
<toolbar visible="true"/>
<columns>
<column name="name" text="Фамилия И.О."/>
<column name="lastname" text="Фамилия"/>
<column name="firstname" text="Имя"/>
<column name="middlename" text="Отчество"/>
</columns>
<edit>
<edititem id="name" text="Сокращенное имя" db-field="name" required="true"/>
<edititem id="lastname" text="Фамилия" db-field="lastname" required="true"/>
<edititem id="firstname" text="Имя" db-field="firstname" required="true"/>>
<edititem id="middlename" text="Отчество" db-field="middlename" required="false"/>
</edit>
</view>
<view id="booksView" title="Список книг" statusbar-visible="false" margin="0" grid-mode="on"
sql="select books.id as id,
books.name as name,
authors.name as author,
genre.name as genre
from books
LEFT JOIN authors ON (books.author_id=authors.id)
LEFT JOIN genre ON (books.genre_id=genre.id)
#refresh# order by name"
table-name="books" id-field="id">
<toolbar visible="true"/>
<columns>
<column name="name" text="Название книги"/>
<column name="author" text="Автор"/>
<column name="genre" text="Жанр"/>
</columns>
<edit>
<edititem id="name" text="Название книги" db-field="name" required="true"/>
<edititem id="author" text="Автор" db-field="author_id" reference-id="authorView" required="true"/>
<edititem id="genre_id" text="Жанр" db-field="genre_id" reference-id="genreView" required="true"/>
</edit>
</view>
</common>
</AppXML>