Refs #1633 CUBA documentation (Studio)

This commit is contained in:
Konstantin Krivopustov 2012-12-29 10:55:25 +00:00
parent 6bda371838
commit 4acaf9e250
4 changed files with 10443 additions and 10444 deletions

View File

@ -2,7 +2,6 @@
<!-- This document was created with Syntext Serna Free. --><!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> <!-- This document was created with Syntext Serna Free. --><!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
<chapter id="chapter_framework" lang="ru"> <chapter id="chapter_framework" lang="ru">
<title>Устройство платформы</title> <title>Устройство платформы</title>
<para>Данная глава содержит подробное описание архитектуры, компонентов и механизмов платформы CUBA.</para>
<section> <section>
<title>Архитектура</title> <title>Архитектура</title>
<para>В данной главе рассмотрена архитектура CUBA-приложений в различных разрезах: по уровням, блокам, модулям, и по используемым базовым проектам.</para> <para>В данной главе рассмотрена архитектура CUBA-приложений в различных разрезах: по уровням, блокам, модулям, и по используемым базовым проектам.</para>

View File

@ -54,117 +54,6 @@
</itemizedlist> </itemizedlist>
<para>Приложение должно поддерживать русский и английский язык интерфейса.</para> <para>Приложение должно поддерживать русский и английский язык интерфейса.</para>
</section> </section>
<section>
<title>Создание приложения в CUBA Studio</title>
<section>
<title>Создание проекта</title>
<para>На Вашей рабочей машине уже должно быть установлена и настроена <application>CUBA Studio</application>, см. <xref linkend="cubaStudio_install"/>.</para>
<para>Необходимо запустить <application>CUBA Studio</application> и создать пустой проект:</para>
<orderedlist>
<listitem>
<para>Запустите <application>CUBA Studio</application> (см. шаги 4-7, <xref linkend="cubaStudio_install"/>).</para>
</listitem>
<listitem>
<para>В стартовом окне нажмите на кнопку <guibutton>Open project</guibutton>. </para>
</listitem>
<listitem>
<para>В отобразившемся окне <guilabel>Select project</guilabel> нажмите на кнопку <guibutton>New</guibutton>.</para>
</listitem>
<listitem>
<para>В окне <guilabel>New project</guilabel> нажмите на кнопку <guibutton>+</guibutton> и задайте имя каталога нового проекта, например, <filename>sales</filename>.</para>
</listitem>
<listitem>
<para>Выберите каталог <filename>sales</filename> в дереве. В полях ниже автоматически сгенерируются:</para>
<itemizedlist>
<listitem>
<para><guilabel>Project name</guilabel> имя проекта. Должно содержать только латинские буквы, цифры и знак подчеркивания. Тщательно продумайте имя проекта на данном этапе, так как в дальнейшем его невозможно изменить без сложного ручного вмешательства.</para>
</listitem>
<listitem>
<para><guilabel>Root package</guilabel> корневой пакет Java-классов. Может быть скорректирован позже, однако сгенерированные на этапе создания классы перемещены не будут.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Нажмите на кнопку <guibutton>OK</guibutton>. В указанном каталоге будет создан пустой проект, и откроется главное окно студии.</para>
</listitem>
<listitem>
<para>Собираем проект. В главном меню студии перейдите в пункт меню <guimenu>Build</guimenu> &gt; <guimenu>Assemble project</guimenu>. На этом этапе будут загружены все необходимые библиотеки.</para>
</listitem>
<listitem>
<para>Создаем базу данных на локальном сервере <application>PostgreSQL</application> с помощью пункта меню <guimenu>Run</guimenu> &gt; <guimenu>Create database</guimenu>. Имя базы совпадает с именем проекта.</para>
</listitem>
<listitem>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Deploy</guimenu>. В подкаталоге <filename>build</filename> проекта будет установлен <application>Tomcat</application> с собранным приложением.</para>
</listitem>
<listitem>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Start application</guimenu>. Через несколько секунд ссылка рядом с надписью <guilabel>Web application</guilabel> станет доступной, и по ней можно осуществить переход непосредственно из студии.</para>
<para>Логин и пароль пользователя admin / admin.</para>
<para>Запущенное приложение содержит два главных пункта меню (<guimenu>Администрирование</guimenu> и <guimenu>Помощь</guimenu>), функциональность подсистемы безопасности и администрирования системы.</para>
</listitem>
</orderedlist>
</section>
<section>
<title>Создание сущностей</title>
<para>Перейдите на вкладку <guilabel>Entities</guilabel> на панели навигатора и нажмите на кнопку <guibutton>New</guibutton>. На рабочей панели отобразится страница редактора сущностей.</para>
<para>Создадим класс <glossterm linkend="entity">сущности</glossterm> <code>Покупатель (Customer)</code>.</para>
<para>В поле <guilabel>Class Name</guilabel> введите название класса сущности <code>Customer</code>.</para>
<para>В полях <guilabel>Name</guilabel> и <guilabel>Table</guilabel> автоматически сгенерируются имя сущности и имя таблицы в базе данных.</para>
<para>В поле <guilabel>Parent class</guilabel> оставьте установленное значение <link linkend="standardEntity">StandardEntity</link>. </para>
<para>Нажмите на кнопку <guibutton>...</guibutton> рядом с именем сущности. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать <glossterm linkend="localization">локализацию</glossterm> имени сущности на доступных языках.</para>
<para>Далее создадим атрибуты сущности. Для этого нажмите на кнопку <guibutton>New</guibutton>, находящуюся под таблицей <guilabel>Attributes</guilabel>.</para>
<para>В отобразившемся окне <guilabel>Create attribute</guilabel> в поле <guilabel>Name</guilabel> введите название атрибута сущности <userinput>name</userinput>, в списке <guilabel>Attribute type</guilabel> выберите значение <link linkend="datatype">DATATYPE</link>, в поле <guilabel>Type</guilabel> укажите тип атрибута <userinput>String</userinput> и далее укажите длину текстового атрибута в поле <guilabel>Length</guilabel>, равной 100 символам. Установите галочку <guilabel>Mandatory</guilabel>. Установленная галочка означает, что атрибут является обязательным к заполнению. В поле <guilabel>Column</guilabel> автоматически сгенерируется имя колонки в базе данных. Далее нажмите на кнопку <guibutton>...</guibutton> рядом с названием атрибута. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать локализацию названия атрибута на доступных языках.</para>
<para>Атрибут <code>email</code> создается таким же образом, за исключением того, что в поле <guilabel>Length</guilabel> следует указать значение <userinput>50</userinput>.</para>
<para>После создания атрибутов перейдите на вкладку <guilabel>Instance name</guilabel> дизайнера сущностей для задания <link linkend="namePattern">Name pattern</link>. В списке <guilabel>Available attributes</guilabel> выделите атрибут <guilabel>name</guilabel> и нажмите на кнопку с изображением стрелки вправо.</para>
<para>На этом создание сущности <classname>Customer</classname> завершено. Нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу дизайнера сущностей для сохранения изменений.</para>
<para>Создадим сущность <code>Order (Заказ)</code>. Ее создание ничем не отличается от создания сущности <code>Customer</code>. Атрибуты сущности: </para>
<itemizedlist>
<listitem>
<para><guilabel>Name</guilabel> <userinput>customer</userinput>, <guilabel>Attribute type</guilabel> <link linkend="associationType">ASSOCIATION</link>, <guilabel>Type</guilabel> <userinput>Customer</userinput>, <guilabel>Cardinality</guilabel> <link linkend="manyToOne">MANY_TO_ONE</link>.</para>
</listitem>
<listitem>
<para><guilabel>Name</guilabel> <userinput>date</userinput>, <guilabel>Attribute type</guilabel> <link linkend="datatype">DATATYPE</link>, <guilabel>Type</guilabel> <userinput>Date</userinput>. Для атрибута <code>date</code> установите галочку <guilabel>Mandatory</guilabel>.</para>
</listitem>
<listitem>
<para><guilabel>Name</guilabel> <userinput>amount</userinput>, <guilabel>Attribute type</guilabel> <link linkend="datatype">DATATYPE</link>, <guilabel>Type</guilabel> <userinput>Decimal</userinput>.</para>
</listitem>
</itemizedlist>
<para>Для каждого атрибута укажите <glossterm linkend="localization">локализованные</glossterm> названия.</para>
</section>
<section>
<title>Создание таблиц базы данных</title>
<para>Для создания таблиц базы данных достаточно выделить название пакета <filename>com.company.sales.entity</filename> на вкладке <guilabel>Entities</guilabel> на панели навигатора и нажать на кнопку <guibutton>Generate DB scripts</guibutton>. После этого откроется страница <guilabel>Database update scripts</guilabel> с открытой вкладкой <guilabel>Update scripts</guilabel>. На вкладке будут сгенерированы скрипты обновления базы данных, отдельные для каждой из таблиц и ограничений. Эти же скрипты будут занесены в скрипт инициализации базы данных, который располагается на вкладке <guilabel>Init tables</guilabel>. Далее нажмите на кнопку <guibutton>Save scripts</guibutton> в верхнем правом углу рабочей панели. Для запуска скриптов обновления в главном меню студии выберите пункт <guimenu>Run</guimenu> &gt; <guimenu>Update database</guimenu>.</para>
</section>
<section>
<title>Создание пользовательского интерфейса приложения</title>
<section>
<title>Экраны управления Покупателями</title>
<para>Для создания экрана просмотра Покупателей и экрана редактирования Покупателя необходимо выделить название класса <classname>com.company.sales.entity.Customer</classname> на вкладке <guilabel>Entities</guilabel> на панели навигатора и нажать на кнопку <guibutton>Create screens</guibutton>. После этого на экране отобразится окно <guilabel>Create standard screens</guilabel>. Все поля этого окна заполнены значениями по умолчанию. В них ничего менять не нужно. Нажмите на кнопку <guibutton>Create</guibutton>. Во вкладке <guilabel>Screens</guilabel> на панели навигатора в модуле GUI Module появятся файлы <filename>customer-edit.xml</filename> и <filename>customer-browse.xml</filename>. Для этих файлов следует задать <glossterm linkend="localization">локализацию</glossterm> заголовков. Для этого выделите один из файлов и нажмите на кнопку <guibutton>Edit</guibutton>. Отобразится страница <guilabel>Screen designer</guilabel>, вкладка <guilabel>Properties</guilabel>. Нажмите на кнопку <guibutton>...</guibutton> рядом с полем <guilabel>Caption</guilabel> и задайте локализованные названия экрана. Повторите те же действия для другого экрана.</para>
</section>
<section>
<title>Экраны управления Заказами</title>
<para>Сущность <code>Заказ (Order)</code> имеет следующую особенность: так как среди прочих атрибутов существует <link linkend="associationType">ссылочный</link> атрибут <code>Order.customer</code>, требуется определить <glossterm linkend="views">представление</glossterm> сущности <code>Order</code>, включающее этот атрибут (стандартные представления <code>_local</code> и <code>_minimal</code> не включают ссылочных атрибутов). Для этого перейдите на вкладку <guilabel>Entities</guilabel> на панели навигатора, выделите сущность <code>Order</code> и нажмите на кнопку <guibutton>New</guibutton>. Отобразится страница <guilabel>View designer</guilabel>, в котором определяется представление. В качестве имени введите <userinput>orderWithCustomer</userinput>, в списке атрибутов нажмите два раза на атрибут <code>customer</code> и на отобразившейся справа панели выберите представление <code>_minimal</code> для сущности <code>Customer</code>. Нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу.</para>
<para>Далее выделите сущность <code>Order</code> и нажмите на кнопку <guibutton>Create screens</guibutton>. В отобразившемся окне <guilabel>Create standard screens</guilabel> в качестве <guilabel>Browse view</guilabel> и <guilabel>Edit view</guilabel> выберите значение <userinput>orderWithCustomer</userinput> и нажмите на кнопку <guibutton>Create</guibutton>. Студия сгенерирует файлы экранов в пакете GUI Module.</para>
</section>
<section>
<title>Создание новых пунктов меню</title>
<para>Чтобы вызывать экраны из главного меню приложения, добавьте новые пункты в меню. Для этого перейдите на вкладку <guilabel>Web menu</guilabel> на панели навигатора и нажмите на кнопку <guibutton>Edit</guibutton>. Отобразится страница <guilabel>Menu configuration</guilabel>. В списке найдите пункт меню <guilabel>application</guilabel> и выделите его. Далее нажмите на кнопку <guibutton>New</guibutton>. Отобразится окно <guilabel>Create menu item</guilabel>. В поле <guilabel>Id</guilabel> выберите из списка первый экран, нажмите на кнопку <guibutton>edit</guibutton> и задайте локализованные названия для экрана. Далее нажмите на кнопку <guibutton>Add</guibutton>. Аналогичным образом создайте остальные три пункта меню.</para>
<para>После создания пунктов меню нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу рабочей панели.</para>
</section>
<section>
<title>Экран редактирования Покупателя со списком Заказов</title>
<para>Вернемся к задаче отображения списка Заказов в окне редактирования Покупателя.</para>
<para>Выделите файл <filename>customer-edit.xml</filename> и нажмите на кнопку <guibutton>Edit</guibutton>. Далее на странице <guilabel>Screens designer</guilabel> перейдите на вкладку <guilabel>Datasources</guilabel> и нажмите на кнопку <guibutton>New</guibutton>. После выделения созданного <glossterm linkend="datasources">источника данных</glossterm> справа отобразятся его характеристики. В качестве типа укажите <userinput>collectionDatasource</userinput>, в поле <guilabel>Id</guilabel> введите <userinput>ordersDs</userinput>, в списке <guilabel>Entity</guilabel> выберите сущность <userinput>com.company.studiosales.entity.Order</userinput>, в списке <guilabel>View</guilabel> выберите <userinput>_local</userinput>, в поле <guilabel>Query</guilabel> введите следующий запрос: <code>select o from sales$Order o where o.customer.id = :ds$customerDs order by o.date</code>. Здесь запрос содержит условие отбора Заказов с параметром <code>ds$customerDs</code>. Значением параметра с именем вида <code>ds${datasource_name}</code> будет идентификатор сущности, установленной в данный момент в источнике данных <code>datasource_name</code>, в данном случае идентификатор редактируемого Покупателя. Нажмите на кнопку <guibutton>Apply</guibutton> для сохранения изменений.</para>
<para>Далее перейдите на вкладку <guilabel>Layout</guilabel> в дизайнере экрана и в палитре компонентов найдите компонент <code>Label</code>. Перетащите этот компонент на панель иерархии компонентов экрана, между <code>fieldGroup</code> и <code>windowActions</code>. Далее перейдите на вкладку <guilabel>Properties</guilabel> на панели свойств. В качестве значения поля <guilabel>value</guilabel> введите <userinput>msg://orders</userinput>, нажмите на кнопку <guibutton>...</guibutton> рядом с полем. В отобразившемся окне укажите локализованные названия. </para>
<para> После этого найдите компонент <code>Table</code> в палитре компонентов и перетащите его на панель иерархии компонентов между <code>label</code> и <code>windowActions</code>. Выделите компонент в иерархии и на панели свойств на вкладке <guilabel>Layout</guilabel> задайте размеры таблицы: в поле <guilabel>width</guilabel> укажите <userinput>100%</userinput>, в поле <guilabel>height</guilabel> просто уберите значение по умолчанию; после дезактивации поля <guilabel>height</guilabel> в нем установится значение <userinput>auto</userinput>. Далее перейдите на вкладку <guilabel>Properties</guilabel>. В качестве идентификатора укажите значение <userinput>ordersTable</userinput>, из списка доступных источников данных выберите <userinput>orderDs</userinput>. Далее нажмите на кнопку <guibutton>...</guibutton>, относящуюся к <guilabel>columns</guilabel>. На экране отобразится окно управления колонками таблицы. В первой строке в колонке <guilabel>ID</guilabel> из выпадающего списка выберите значение <userinput>date</userinput>, во второй строке <userinput>amount</userinput>. Далее нажмите на кнопку <guibutton>Ok</guibutton>.</para>
<para>Для сохранения изменений в экране редактирования Покупателя нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу рабочей панели.</para>
<para>Посмотрим, как созданные нами экраны выглядят в работающем приложении. Для этого пересоберите проект из пункта меню <guimenu>Run</guimenu> &gt; <guimenu>Restart application</guimenu>.</para>
<para>Зайдите в систему, выбрав русский язык в окне логина. Откройте пункт меню <guimenu>Продажи</guimenu> &gt; <guimenu>Покупатели</guimenu>. Экран списка покупателей показан на <xref linkend="figure_customerBrowse"/></para>
<para>Нажмите на кнопку <guibutton>Создать</guibutton>. Экран создания нового покупателя показан на <xref linkend="figure_customerEdit"/></para>
<para>Откройте пункт меню <guimenu>Продажи</guimenu> &gt; <guimenu>Заказы</guimenu>. Экран списка заказов показан на <xref linkend="figure_orderBrowse"/></para>
<para>Нажмите на кнопку <guibutton>Создать</guibutton>. Экран создания нового заказа показан на <xref linkend="figure_orderEdit"/></para>
</section>
</section>
</section>
<section> <section>
<title>Создание приложения вручную</title> <title>Создание приложения вручную</title>
<section> <section>
@ -500,4 +389,117 @@ menu-config.sales$Customer.lookup=Покупатели</programlisting>
</section> </section>
</section> </section>
</section> </section>
<section>
<title>Создание приложения в CUBA Studio</title>
<section>
<title>Создание проекта</title>
<orderedlist>
<listitem>
<para>Запустите <application>CUBA Studio</application> и откройте ее веб-интерфейс (см. <xref linkend="cubaStudio_install"/>).</para>
</listitem>
<listitem>
<para>В стартовом окне нажмите на кнопку <guibutton>Open project</guibutton>. </para>
</listitem>
<listitem>
<para>В отобразившемся окне <guilabel>Select project</guilabel> нажмите на кнопку <guibutton>New</guibutton>.</para>
</listitem>
<listitem>
<para>В окне <guilabel>New project</guilabel> нажмите на кнопку <guibutton>+</guibutton> и задайте имя каталога нового проекта, например, <filename>sales</filename>.</para>
</listitem>
<listitem>
<para>Выберите каталог <filename>sales</filename> в дереве. В полях ниже автоматически сгенерируются:</para>
<itemizedlist>
<listitem>
<para><guilabel>Project name</guilabel> имя проекта. Должно содержать только латинские буквы, цифры и знак подчеркивания. Тщательно продумайте имя проекта на данном этапе, так как в дальнейшем его невозможно изменить без сложного ручного вмешательства.</para>
<para>В данном случае оставим предложенное название <literal>sales</literal>.</para>
</listitem>
<listitem>
<para><guilabel>Root package</guilabel> корневой пакет Java-классов. Может быть скорректирован позже, однако сгенерированные на этапе создания классы перемещены не будут.</para>
<para>В данном случае введем значение <literal>com.sample.sales</literal>.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Нажмите на кнопку <guibutton>OK</guibutton>. В указанном каталоге будет создан пустой проект, и откроется главное окно студии.</para>
</listitem>
<listitem>
<para>Сборка проекта. В главном меню студии перейдите в пункт меню <guimenu>Build</guimenu> &gt; <guimenu>Assemble project</guimenu>. На этом этапе будут загружены все необходимые библиотеки и в подкаталогах <filename>bin</filename> модулей будут собраны артефакты проекта.</para>
</listitem>
<listitem>
<para>Создание базы данных на локальном сервере <application>PostgreSQL</application>. Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Create database</guimenu>. Имя БД по умолчанию совпадает с именем проекта.</para>
</listitem>
<listitem>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Deploy</guimenu>. В подкаталоге <filename>build</filename> проекта будет установлен сервер <application>Tomcat</application> с собранным приложением.</para>
</listitem>
<listitem>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Start application</guimenu>. Через несколько секунд в панели статуса ссылка рядом с надписью <guilabel>Web application</guilabel> станет доступной, и по ней можно осуществить переход к приложению непосредственно из Студии.</para>
<para>Логин и пароль пользователя admin / admin.</para>
<para>Запущенное приложение содержит два главных пункта меню (<guimenu>Администрирование</guimenu> и <guimenu>Помощь</guimenu>), функциональность подсистемы безопасности и администрирования системы.</para>
</listitem>
</orderedlist>
</section>
<section>
<title>Создание сущностей</title>
<para>Перейдите на вкладку <guilabel>Entities</guilabel> на панели навигатора и нажмите на кнопку <guibutton>New</guibutton>. На рабочей панели отобразится страница редактора сущностей.</para>
<para>Создадим класс <glossterm linkend="entity">сущности</glossterm> <code>Покупатель (Customer)</code>.</para>
<para>В поле <guilabel>Class Name</guilabel> введите название класса сущности <code>Customer</code>.</para>
<para>В полях <guilabel>Name</guilabel> и <guilabel>Table</guilabel> автоматически сгенерируются имя сущности и имя таблицы в базе данных.</para>
<para>В поле <guilabel>Parent class</guilabel> оставьте установленное значение <link linkend="standardEntity">StandardEntity</link>. </para>
<para>Нажмите на кнопку <guibutton>...</guibutton> рядом с именем сущности. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать <link linkend="localization">локализацию</link> имени сущности на доступных языках.</para>
<para>Далее создадим атрибуты сущности. Для этого нажмите на кнопку <guibutton>New</guibutton>, находящуюся под таблицей <guilabel>Attributes</guilabel>.</para>
<para>В отобразившемся окне <guilabel>Create attribute</guilabel> в поле <guilabel>Name</guilabel> введите название атрибута сущности <userinput>name</userinput>, в списке <guilabel>Attribute type</guilabel> выберите значение <link linkend="datatype">DATATYPE</link>, в поле <guilabel>Type</guilabel> укажите тип атрибута <userinput>String</userinput> и далее укажите длину текстового атрибута в поле <guilabel>Length</guilabel>, равной 100 символам. Установите флажок <guilabel>Mandatory</guilabel>. Установленный флажок означает, что атрибут является обязательным к заполнению. В поле <guilabel>Column</guilabel> автоматически сгенерируется имя колонки в базе данных. Далее нажмите на кнопку <guibutton>...</guibutton> рядом с названием атрибута. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать локализацию названия атрибута на доступных языках.</para>
<para>Атрибут <code>email</code> создается таким же образом, за исключением того, что в поле <guilabel>Length</guilabel> следует указать значение <userinput>50</userinput>.</para>
<para>После создания атрибутов перейдите на вкладку <guilabel>Instance name</guilabel> дизайнера сущностей для задания <link linkend="namePattern">Name pattern</link>. В списке <guilabel>Available attributes</guilabel> выделите атрибут <guilabel>name</guilabel> и нажмите на кнопку с изображением стрелки вправо.</para>
<para>На этом создание сущности <classname>Customer</classname> завершено. Нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу дизайнера сущностей для сохранения изменений.</para>
<para>После сохранения новой сущности на экране появится сообщение о необходимости обновить базу данных и станет доступной кнопка <guibutton>Generate DB scripts</guibutton> внизу панели <guilabel>Entities</guilabel>. Пока игнорируем это сообщение.</para>
<para>Создадим сущность <code>Order (Заказ)</code>. В панели <guilabel>Entities</guilabel> выберите пакет и нажмите кнопку <guibutton>New</guibutton>. Атрибуты сущности: </para>
<itemizedlist>
<listitem>
<para><guilabel>Name</guilabel> <userinput>customer</userinput>, <guilabel>Attribute type</guilabel> <link linkend="associationType">ASSOCIATION</link>, <guilabel>Type</guilabel> <userinput>Customer</userinput>, <guilabel>Cardinality</guilabel> <link linkend="manyToOne">MANY_TO_ONE</link>.</para>
</listitem>
<listitem>
<para><guilabel>Name</guilabel> <userinput>date</userinput>, <guilabel>Attribute type</guilabel> <link linkend="datatype">DATATYPE</link>, <guilabel>Type</guilabel> <userinput>Date</userinput>. Для атрибута <code>date</code> установите галочку <guilabel>Mandatory</guilabel>.</para>
</listitem>
<listitem>
<para><guilabel>Name</guilabel> <userinput>amount</userinput>, <guilabel>Attribute type</guilabel> <link linkend="datatype">DATATYPE</link>, <guilabel>Type</guilabel> <userinput>Decimal</userinput>.</para>
</listitem>
</itemizedlist>
<para>Для каждого атрибута укажите <link linkend="localization">локализованные</link> названия.</para>
</section>
<section>
<title>Создание таблиц базы данных</title>
<para>Для создания таблиц базы данных достаточно на вкладке <guilabel>Entities</guilabel> панели навигатора нажать кнопку <guibutton>Generate DB scripts</guibutton>. После этого откроется страница <guilabel>Database update scripts</guilabel>. На вкладке будут сгенерированы скрипты обновления базы данных от текущего ее состояния (<guilabel>Update scripts</guilabel>), и скрипты создания БД с нуля (<guilabel>Init tables</guilabel>, <guilabel>Init constraints</guilabel>, <guilabel>Init data</guilabel>). Нажмите на кнопку <guibutton>Save scripts</guibutton> в верхнем правом углу рабочей панели и затем <guibutton>Close</guibutton>. Для запуска скриптов обновления остановите запущенное приложение: <guimenu>Run</guimenu> -&gt; <guimenu>Stop application</guimenu>, затем выполните <guimenu>Run</guimenu> &gt; <guimenu>Update database</guimenu>.</para>
</section>
<section>
<title>Создание пользовательского интерфейса приложения</title>
<section>
<title>Экраны управления Покупателями</title>
<para>Для создания стандартных экранов просмотра и редактирования Покупателей необходимо выделить класс <classname>com.company.sales.entity.Customer</classname> на вкладке <guilabel>Entities</guilabel> панели навигатора и нажать на кнопку <guibutton>Create screens</guibutton>. После этого на экране отобразится окно <guilabel>Create standard screens</guilabel>. Все поля этого окна заполнены значениями по умолчанию, менять их не нужно. Нажмите на кнопку <guibutton>Create</guibutton>. Во вкладке <guilabel>Screens</guilabel> панели навигатора в модуле GUI Module появятся файлы <filename>customer-edit.xml</filename> и <filename>customer-browse.xml</filename>. Для этих файлов следует задать <glossterm linkend="localization">локализацию</glossterm> заголовков. Для этого выделите один из файлов и нажмите на кнопку <guibutton>Edit</guibutton>. Отобразится страница <guilabel>Screen designer</guilabel>, вкладка <guilabel>Properties</guilabel>. Нажмите на кнопку <guibutton>...</guibutton> рядом с полем <guilabel>Caption</guilabel> и задайте локализованные названия экрана. Повторите те же действия для другого экрана.</para>
</section>
<section>
<title>Экраны управления Заказами</title>
<para>Сущность <code>Заказ (Order)</code> имеет следующую особенность: так как среди прочих атрибутов существует <link linkend="associationType">ссылочный</link> атрибут <code>Order.customer</code>, требуется определить <link linkend="views">представление</link> сущности <code>Order</code>, включающее этот атрибут (стандартные представления <code>_local</code> и <code>_minimal</code> не включают ссылочных атрибутов). Для этого перейдите на вкладку <guilabel>Entities</guilabel> на панели навигатора, выделите сущность <code>Order</code> и нажмите на кнопку <guibutton>New</guibutton>. Отобразится страница <guilabel>View designer</guilabel>, в котором определяется представление. В качестве имени введите <userinput>orderWithCustomer</userinput>, в списке атрибутов нажмите два раза на атрибут <code>customer</code> и на отобразившейся справа панели выберите представление <code>_minimal</code> для сущности <code>Customer</code>. Нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу.</para>
<para>Далее выделите сущность <code>Order</code> и нажмите на кнопку <guibutton>Create screens</guibutton>. В отобразившемся окне <guilabel>Create standard screens</guilabel> в качестве <guilabel>Browse view</guilabel> и <guilabel>Edit view</guilabel> выберите значение <userinput>orderWithCustomer</userinput> и нажмите на кнопку <guibutton>Create</guibutton>. Студия сгенерирует файлы экранов в пакете GUI Module.</para>
</section>
<section>
<title>Создание пунктов меню</title>
<para>Чтобы вызывать экраны из главного меню приложения, добавьте новые пункты в меню. Для этого перейдите на вкладку <guilabel>Main menu</guilabel> на панели навигатора и нажмите на кнопку <guibutton>Edit</guibutton>. Отобразится страница <guilabel>Menu configuration</guilabel>. В списке найдите пункт меню <guilabel>application</guilabel> и выделите его. Далее нажмите на кнопку <guibutton>New</guibutton>. Отобразится окно <guilabel>Create menu item</guilabel>. В поле <guilabel>Id</guilabel> выберите из списка экран <literal>sales$Customer.lookup</literal>, нажмите на кнопку <guilabel>Caption</guilabel> <guibutton>edit</guibutton> и задайте локализованные названия пункта меню. Нажмите на кнопку <guibutton>Add</guibutton>. </para>
<para>Аналогичным образом создайте пункт меню для экрана <literal>sales$Order.lookup</literal>.</para>
<para>После создания пунктов меню нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу рабочей панели.</para>
</section>
<section>
<title>Экран редактирования Покупателя со списком Заказов</title>
<para>Займемся задачей отображения списка Заказов в окне редактирования Покупателя.</para>
<para>Выделите файл <filename>customer-edit.xml</filename> и нажмите на кнопку <guibutton>Edit</guibutton>. Далее на странице <guilabel>Screens designer</guilabel> перейдите на вкладку <guilabel>Datasources</guilabel> и нажмите на кнопку <guibutton>New</guibutton>. После выделения созданного <link linkend="datasources">источника данных</link> справа отобразятся его характеристики. В качестве типа укажите <userinput>collectionDatasource</userinput>, в поле <guilabel>Id</guilabel> введите <userinput>ordersDs</userinput>, в списке <guilabel>Entity</guilabel> выберите сущность <userinput>com.company.studiosales.entity.Order</userinput>, в списке <guilabel>View</guilabel> выберите <userinput>_local</userinput>, в поле <guilabel>Query</guilabel> введите следующий запрос: <code>select o from sales$Order o where o.customer.id = :ds$customerDs order by o.date</code>. Здесь запрос содержит условие отбора Заказов с параметром <code>ds$customerDs</code>. Значением параметра с именем вида <code>ds${datasource_name}</code> будет идентификатор сущности, установленной в данный момент в источнике данных <code>datasource_name</code>, в данном случае идентификатор редактируемого Покупателя. Нажмите на кнопку <guibutton>Apply</guibutton> для сохранения изменений.</para>
<para>Далее перейдите на вкладку <guilabel>Layout</guilabel> в дизайнере экрана и в палитре компонентов найдите компонент <code>Label</code>. Перетащите этот компонент на панель иерархии компонентов экрана, между <code>fieldGroup</code> и <code>windowActions</code>. Далее перейдите на вкладку <guilabel>Properties</guilabel> на панели свойств. В качестве значения поля <guilabel>value</guilabel> введите <userinput>Orders</userinput>. </para>
<para> После этого найдите компонент <code>Table</code> в палитре компонентов и перетащите его на панель иерархии компонентов между <code>label</code> и <code>windowActions</code>. Выделите компонент в иерархии и на панели свойств на вкладке <guilabel>Layout</guilabel> задайте размеры таблицы: в поле <guilabel>width</guilabel> укажите <userinput>100%</userinput>, в поле <guilabel>height</guilabel> установите значение <userinput>200px</userinput>. Далее перейдите на вкладку <guilabel>Properties</guilabel>. В качестве идентификатора укажите значение <userinput>ordersTable</userinput>, из списка доступных источников данных выберите <userinput>orderDs</userinput>. Далее нажмите на кнопку <guibutton>...</guibutton>, относящуюся к <guilabel>columns</guilabel>. На экране отобразится окно управления колонками таблицы. В первой строке в колонке <guilabel>ID</guilabel> из выпадающего списка выберите значение <userinput>date</userinput>, во второй строке <userinput>amount</userinput>. Далее нажмите на кнопку <guibutton>Ok</guibutton>.</para>
<para>Для сохранения изменений в экране редактирования Покупателя нажмите на кнопку <guibutton>Apply</guibutton> в верхнем правом углу рабочей панели.</para>
<para>Посмотрим, как созданные нами экраны выглядят в работающем приложении. Для этого выполните <guimenu>Run</guimenu> &gt; <guimenu>Restart application</guimenu>.</para>
<para>Зайдите в систему, выбрав русский язык в окне логина. Откройте пункт меню <guimenu>Продажи</guimenu> &gt; <guimenu>Покупатели</guimenu>. Экран списка покупателей показан на <xref linkend="figure_customerBrowse"/></para>
<para>Нажмите на кнопку <guibutton>Создать</guibutton>. Экран создания нового покупателя показан на <xref linkend="figure_customerEdit"/></para>
<para>Откройте пункт меню <guimenu>Продажи</guimenu> &gt; <guimenu>Заказы</guimenu>. Экран списка заказов показан на <xref linkend="figure_orderBrowse"/></para>
<para>Нажмите на кнопку <guibutton>Создать</guibutton>. Экран создания нового заказа показан на <xref linkend="figure_orderEdit"/></para>
</section>
</section>
</section>
</chapter> </chapter>

View File

@ -158,7 +158,7 @@
<para>В случае неудачного запуска команды вернитесь к <link linkend="path_setting">пункту 7</link> и проверьте правильность установки переменных среды <envar>JAVA_HOME</envar> и <envar>Path</envar>.</para> <para>В случае неудачного запуска команды вернитесь к <link linkend="path_setting">пункту 7</link> и проверьте правильность установки переменных среды <envar>JAVA_HOME</envar> и <envar>Path</envar>.</para>
<para>Установка и настройка <application>Java</application> завершена.</para> <para>Установка и настройка <application>Java</application> завершена.</para>
</section> </section>
<section> <section id="gradle_install">
<title>Установка Gradle 1.0</title> <title>Установка Gradle 1.0</title>
<para>Сайт компании-разработчика: <ulink url="http://www.gradle.org/">http://www.gradle.org</ulink></para> <para>Сайт компании-разработчика: <ulink url="http://www.gradle.org/">http://www.gradle.org</ulink></para>
<para>Дистрибутив: <ulink url="http://services.gradle.org/distributions/gradle-1.0-all.zip">http://services.gradle.org/distributions/gradle-1.0-all.zip</ulink></para> <para>Дистрибутив: <ulink url="http://services.gradle.org/distributions/gradle-1.0-all.zip">http://services.gradle.org/distributions/gradle-1.0-all.zip</ulink></para>
@ -236,14 +236,14 @@
<para>Установка и настройка среды разработки <application>IntelliJ IDEA</application> завершена.</para> <para>Установка и настройка среды разработки <application>IntelliJ IDEA</application> завершена.</para>
</section> </section>
<section id="cubaStudio_install"> <section id="cubaStudio_install">
<title>Установка и настройка CUBA Studio</title> <title>Установка CUBA Studio</title>
<para>Если Вы предполагаете вести разработку приложения на платформе <trademark>CUBA</trademark> при помощи студии, ее следует предварительно установить.</para> <para>Данный этап необходим, если Вы предполагаете вести разработку приложения на платформе <trademark>CUBA</trademark> при помощи Студии.</para>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Установите инструменты сборки и настройте окружение согласно <xref linkend="chapter_setup"/>.</para> <para>Установите инструменты сборки и настройте окружение согласно предыдущим разделам данной главы.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Загрузите последнюю версию архива <filename>studio-X.Y.Z.zip</filename> из <ulink url="http://repository.haulmont.com:8587/nexus/content/repositories/snapshots/com/haulmont/studio/studio">http://repository.haulmont.com:8587/nexus/content/repositories/snapshots/com/haulmont/studio/studio</ulink></para> <para>Загрузите архив <filename>studio-0.1.zip</filename> по ссылке <ulink url="http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.1/studio-0.1.zip">http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.1/studio-0.1.zip</ulink> (для доступа к репозиторию используйте имя <userinput>cuba</userinput> и пароль <userinput>cuba123</userinput>).</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Распакуйте архив в локальный путь, не содержащий пробелов, например, <filename>c:/work/studio</filename></para> <para>Распакуйте архив в локальный путь, не содержащий пробелов, например, <filename>c:/work/studio</filename></para>
@ -258,7 +258,9 @@
<para><guilabel>Workspace</guilabel> каталог, в котором будут создаваться проекты, например, <filename>c:/work</filename></para> <para><guilabel>Workspace</guilabel> каталог, в котором будут создаваться проекты, например, <filename>c:/work</filename></para>
</listitem> </listitem>
<listitem> <listitem>
<para><guilabel>Gradle home</guilabel> путь к установленному <application>Gradle</application></para> <para><guilabel>Gradle home</guilabel> путь к установленному <application>
<link linkend="gradle_install">Gradle</link>
</application></para>
</listitem> </listitem>
<listitem> <listitem>
<para><guilabel>Server port</guilabel> порт, на котором будет запущен сервер <application>CUBA Studio</application></para> <para><guilabel>Server port</guilabel> порт, на котором будет запущен сервер <application>CUBA Studio</application></para>
@ -267,7 +269,7 @@
<para><guilabel>IDE port</guilabel> порт, на котором будет принимать подключения плагин к IDE</para> <para><guilabel>IDE port</guilabel> порт, на котором будет принимать подключения плагин к IDE</para>
</listitem> </listitem>
<listitem> <listitem>
<para><guilabel>Repository</guilabel> URL репозитория бинарных артефактов</para> <para><guilabel>Repository</guilabel> URL <link linkend="artifact_repository">репозитория</link> бинарных артефактов. Нажмите кнопку <guibutton>Auth</guibutton> и укажите имя <userinput>cuba</userinput> и пароль <userinput>cuba123</userinput>.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
@ -276,10 +278,6 @@
</listitem> </listitem>
<listitem> <listitem>
<para>Запустите веб-браузер и перейдите по указанному адресу.</para> <para>Запустите веб-браузер и перейдите по указанному адресу.</para>
<tip>
<title>Совет</title>
<para>Рекомендуемым браузером является <application>Google Chrome</application>, в других браузерах <application>CUBA Studio</application> может работать некорректно.</para>
</tip>
</listitem> </listitem>
</orderedlist> </orderedlist>
<para>Для интеграции с IDE выполните следующие шаги:</para> <para>Для интеграции с IDE выполните следующие шаги:</para>
@ -288,16 +286,16 @@
<para>В главном меню студии выберите пункт меню <guimenu>Build</guimenu> &gt; <guimenu>Create IDEA project files</guimenu>. В каталоге проекта будут созданы файлы <filename>*.ipr</filename>, <filename>*.iml</filename></para> <para>В главном меню студии выберите пункт меню <guimenu>Build</guimenu> &gt; <guimenu>Create IDEA project files</guimenu>. В каталоге проекта будут созданы файлы <filename>*.ipr</filename>, <filename>*.iml</filename></para>
</listitem> </listitem>
<listitem> <listitem>
<para>Распакуйте содержимое архива <filename>c:/work/studio/ideplugins/cuba-idea-plugin-XYZ.zip</filename> в подкаталог <filename>plugins</filename> установленной <application>IntelliJ IDEA 11</application>.</para> <para>Распакуйте содержимое архива <filename>c:/work/studio/ideplugins/cuba-idea-plugin-XYZ.zip</filename> в подкаталог <filename>plugins</filename> установленной <application>IntelliJ IDEA</application>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Запустите <application>IntelliJ IDEA</application> и откройте проект c:/work/sales/sales.ipr</para> <para>Запустите <application>IntelliJ IDEA</application> и откройте проект c:/work/sales/sales.ipr</para>
</listitem> </listitem>
<listitem> <listitem>
<para>В <application>IntelliJ IDEA</application> в меню <guimenu>File</guimenu> выберите пункт меню <guimenu>Settings</guimenu>. Далее слева в группе <guilabel>Project Settings</guilabel> найдите строку <guilabel>CUBA</guilabel>. На панели <guilabel>Studio integration</guilabel> установите галочку <guilabel>Enabled</guilabel> и нажмите на кнопку <guibutton>OK</guibutton>.</para> <para>В <application>IntelliJ IDEA</application> в меню <guimenu>File</guimenu> выберите пункт меню <guimenu>Settings</guimenu>. Далее слева в группе <guilabel>Project Settings</guilabel> найдите строку <guilabel>CUBA</guilabel>. На панели <guilabel>Studio integration</guilabel> установите флажок <guilabel>Enabled</guilabel> и нажмите на кнопку <guibutton>OK</guibutton>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Обратите внимание, что в главном окне студии загорелась надпись <guilabel>IDE: on</guilabel></para> <para>Обратите внимание, что в панели статуса Студии загорелась надпись <guilabel>IDE: on</guilabel></para>
</listitem> </listitem>
<listitem> <listitem>
<para>При нажатии кнопок <guilabel>IDE</guilabel> в студии соответствующие файлы исходных кодов будут открываться редактором <application>IDEA</application>.</para> <para>При нажатии кнопок <guilabel>IDE</guilabel> в студии соответствующие файлы исходных кодов будут открываться редактором <application>IDEA</application>.</para>