1) Исправлена глава Установка CUBA Studio: исправлена ссылка на дистрибутив Студии, удалена информация о логине и пароле доступа к репозиторию.

2) Убрана информация по AccessControl
3) Изменения в соответствии с тикетом  https://youtrack.haulmont.com/issue/PL-2013
This commit is contained in:
Mariya Sukhova 2013-04-11 08:16:08 +00:00
parent 55a8d12677
commit 9e8aa15036
5 changed files with 1777 additions and 1796 deletions

View File

@ -8279,13 +8279,15 @@ protected boolean postCommit(boolean committed, boolean close) {
<warning> <warning>
<para>Обязательными вложенными элементами являются элементы <sgmltag>columns</sgmltag> и <sgmltag>rows</sgmltag>. </para> <para>Обязательными вложенными элементами являются элементы <sgmltag>columns</sgmltag> и <sgmltag>rows</sgmltag>. </para>
</warning> </warning>
<para id="gui_attr_grid_rows"><sgmltag>rows</sgmltag> обязательный элемент, содержит последовательность строк (<sgmltag>row</sgmltag>). Хотя бы один элемент строки является обязательным.</para> <para id="gui_attr_grid_columns"><sgmltag>columns</sgmltag> обязательный элемент, содержит последовательность колонок <sgmltag>column</sgmltag>.</para>
<para id="gui_attr_grid_row"><sgmltag>row</sgmltag> элемент строки, контейнер для содержимого ряда. Состоит из контейнеров или компонентов.</para>
<para id="gui_attr_grid_row_flex"><sgmltag>flex</sgmltag> необязательный атрибут для элемента <sgmltag>row</sgmltag>, задает соотношение высот рядов сетки.</para>
<para id="gui_attr_grid_columns"><sgmltag>columns</sgmltag> обязательный элемент, содержит последовательность <sgmltag>column</sgmltag>.</para>
<para id="gui_attr_grid_count">Атрибут <sgmltag>count</sgmltag> необязательный атрибут, задает количество колонок, если не заданы элементы <sgmltag>column</sgmltag>.</para> <para id="gui_attr_grid_count">Атрибут <sgmltag>count</sgmltag> необязательный атрибут, задает количество колонок, если не заданы элементы <sgmltag>column</sgmltag>.</para>
<para id="gui_attr_grid_column"><sgmltag>column</sgmltag> необязательный элемент для элемента <link linkend="gui_attr_grid_columns">columns</link>, декларирует атрибуты колонок сетки.</para> <para id="gui_attr_grid_column"><sgmltag>column</sgmltag> необязательный элемент для элемента <link linkend="gui_attr_grid_columns">columns</link>, декларирует атрибуты колонок сетки.</para>
<para id="gui_attr_grid_column_flex">Атрибут <sgmltag>flex</sgmltag> необязательный атрибут, задает соотношение ширин колонок.</para> <para id="gui_attr_grid_column_flex">Атрибут <sgmltag>flex</sgmltag> необязательный атрибут, задает соотношение ширин колонок.</para>
<para>Для того чтобы определить ширину колонок друг относительно друга, необходимо чтобы для контейнера <sgmltag>grid</sgmltag> была установлена ширина (атрибут <link linkend="gui_attr_basic_width">width</link>). Для каждого элемента <link linkend="gui_attr_grid_column">column</link> следует установить требуемое значение атрибута <sgmltag>flex</sgmltag>. Например, в примере, находящемся ниже, ширина колонок сетки определяется соотношением 3:0:1:0. Колонкам 2 и 4 устанавливаются ширины, равные ширинам содержащихся в них компонентов; оставшаяся часть делится в пропорции 3 к 1 (это ширины колонок 1 и 3). Таким образом, ширина колонки, для которой задан атрибут <sgmltag>flex</sgmltag> со значением <literal>0</literal>, равна ширине компонента, содержащегося в данной колонке. Отсутствие атрибута <sgmltag>flex</sgmltag> у элемента <link linkend="gui_attr_grid_column">column</link> приравнивается значению <code>flex=&quot;0&quot;</code>.</para>
<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="source/section_gui/grid/grid_flex.txt" encoding="UTF-8" parse="text"/></programlisting>
<para id="gui_attr_grid_rows"><sgmltag>rows</sgmltag> обязательный элемент, содержит последовательность строк (<sgmltag>row</sgmltag>). Хотя бы один элемент строки является обязательным.</para>
<para id="gui_attr_grid_row"><sgmltag>row</sgmltag> элемент строки, контейнер для содержимого ряда. Состоит из контейнеров или компонентов.</para>
<para id="gui_attr_grid_row_flex"><sgmltag>flex</sgmltag> необязательный атрибут для элемента <sgmltag>row</sgmltag>, задает соотношение высот рядов сетки. Аналогичен атрибуту <link linkend="gui_attr_grid_column_flex">flex</link> для элемента <link linkend="gui_attr_grid_column">column</link>.</para>
<para>Атрибуты <sgmltag>grid</sgmltag>:</para> <para>Атрибуты <sgmltag>grid</sgmltag>:</para>
<informaltable frame="none" pgwide="0" align="left"> <informaltable frame="none" pgwide="0" align="left">
<tgroup cols="4" colsep="1" rowsep="1" align="left"><colspec colname="c1"/><colspec colname="c2"/><colspec colname="c3"/><colspec colname="c4"/>c <tbody> <tgroup cols="4" colsep="1" rowsep="1" align="left"><colspec colname="c1"/><colspec colname="c2"/><colspec colname="c3"/><colspec colname="c4"/>c <tbody>
@ -8651,46 +8653,6 @@ protected boolean postCommit(boolean committed, boolean close) {
</section> </section>
<section> <section>
<title>Разное</title> <title>Разное</title>
<section>
<title>AccessControl</title>
<para>Компонент <sgmltag>accessControl</sgmltag> предназначен для декларативного управления доступом к частям экрана. Он представляет собой контейнер, который никак не отображает себя на экране, а только управляет атрибутами <link linkend="gui_attr_basic_visible">visible</link> и <link linkend="gui_attr_basic_editable">editable</link> входящих в него компонентов.</para>
<para>Состояние управляемых компонентов определяется на основе двух элементов, вложенных в <sgmltag>accessControl</sgmltag>: <sgmltag>visible</sgmltag> и <sgmltag>editable</sgmltag>.</para>
<para>Соответствующее значение принимается либо из скрипта, возвращающего <code>boolean</code>, либо из свойства объекта <link linkend="AccessData">AccessData</link>, связанного с компонентом.
Скрипт задается либо атрибутом <sgmltag>script</sgmltag>, либо непосредственно в тексте элемента.
Свойство объекта <link linkend="AccessData">AccessData</link> задается атрибутом <sgmltag>property</sgmltag> и имеет больший приоритет, чем скрипт.</para>
<warning>
<para>В случае <sgmltag>visible</sgmltag>=<literal>false</literal> вложенные компоненты вообще не создаются, поэтому будьте осторожны при обращении к ним из контроллера.</para>
</warning>
<para>
<programlisting>&lt;tab id=&quot;mainTab&quot; caption=&quot;msg://mainTab&quot;&gt;
&lt;accessControl data=&quot;workflow.client.web.ui.card.CardAccessData&quot; param=&quot;accessData&quot;&gt;
&lt;editable property=&quot;notStarted&quot;/&gt;
&lt;vbox margin=&quot;true&quot; expand=&quot;attachmentsPane&quot;&gt;
...</programlisting>
</para>
<section id="AccessData">
<title>Объект AccessData</title>
<para>В связи с тем что одни и те же параметры доступа могут многократно потребоваться в разных частях экрана и в коде контроллера, компонент <sgmltag>accessControl</sgmltag> может быть связан с объектом Java или Groovy, вычисляющим и хранящим эти параметры. Таким образом, дорогостоящая инициализация параметра доступа производится только один раз и затем доступна на протяжении жизни экрана.</para>
<para>Для связи компонента с данными доступа создайте класс, унаследованный от <code>AbstractAccessData</code>, и задайте следующие атрибуты компонента <code>accessControl</code>:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">data</emphasis> имя класса <code>AccessData</code></para>
</listitem>
<listitem>
<para><emphasis role="bold">param</emphasis> имя параметра экрана, в котором будет сохранен объект <code>AccessData</code></para>
</listitem>
</itemizedlist>
<para>В момент создания экрана загрузчик компонента <code>accessControl</code> проверяет наличие экземпляра <code>AccessData</code> в указанном параметре, и если его там нет, создает новый экземпляр.</para>
<para>В дальнейшем в коде контроллера можно получить экземпляр <code>AccessData</code> из параметров экрана, например:</para>
<programlisting>AbstractWfAccessData accessData = getContext().getParamValue(&quot;accessData&quot;);</programlisting>
<para>При создании класса <code>AccessData</code> следует иметь в виду, что в параметры экрана-редактора всегда передается параметр <parameter>param$item</parameter>, содержащий текущий редактируемый экземпляр сущности. Однако этот экземпляр загружен по <link linkend="views">представлению</link> вызывающего экрана, а не по представлению редактора.</para>
<para>Свойства <code>AccessData</code>, на которые можно ссылаться из компонента <code>accessControl</code>, должны быть реализованы по стандарту JavaBeans: методами с сигнатурой boolean <methodname>getXxx()</methodname></para>
<para>
<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="source/section_gui/CardAccessData.java" encoding="UTF-8" parse="text"/></programlisting>
</para>
</section>
</section>
<section id="gui_Action"> <section id="gui_Action">
<title>Action</title> <title>Action</title>
<para><code>Action</code> интерфейс, абстрагирующий действие от визуального компонента.</para> <para><code>Action</code> интерфейс, абстрагирующий действие от визуального компонента.</para>

View File

@ -428,7 +428,7 @@ menu-config.sales$Customer.lookup=Покупатели</programlisting>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Deploy</guimenu>. В подкаталоге <filename>build</filename> проекта будет установлен сервер <application>Tomcat</application> с собранным приложением.</para> <para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Deploy</guimenu>. В подкаталоге <filename>build</filename> проекта будет установлен сервер <application>Tomcat</application> с собранным приложением.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Start application</guimenu>. Через несколько секунд в панели статуса ссылка рядом с надписью <guilabel>Web application</guilabel> станет доступной, и по ней можно осуществить переход к приложению непосредственно из Студии.</para> <para>Выберите пункт меню <guimenu>Run</guimenu> &gt; <guimenu>Start application server</guimenu>. Через несколько секунд в панели статуса ссылка рядом с надписью <guilabel>Web application</guilabel> станет доступной, и по ней можно осуществить переход к приложению непосредственно из Студии.</para>
<para>Логин и пароль пользователя admin / admin.</para> <para>Логин и пароль пользователя admin / admin.</para>
<para>Запущенное приложение содержит два главных пункта меню (<guimenu>Администрирование</guimenu> и <guimenu>Помощь</guimenu>), функциональность подсистемы безопасности и администрирования системы.</para> <para>Запущенное приложение содержит два главных пункта меню (<guimenu>Администрирование</guimenu> и <guimenu>Помощь</guimenu>), функциональность подсистемы безопасности и администрирования системы.</para>
</listitem> </listitem>
@ -448,6 +448,9 @@ menu-config.sales$Customer.lookup=Покупатели</programlisting>
<listitem> <listitem>
<para>В поле <guilabel>Parent class</guilabel> оставьте установленное значение <link linkend="standardEntity">StandardEntity</link>. </para> <para>В поле <guilabel>Parent class</guilabel> оставьте установленное значение <link linkend="standardEntity">StandardEntity</link>. </para>
</listitem> </listitem>
<listitem>
<para>Поле <guilabel>Inheritance strategy</guilabel> служит для объявления стратегии наследования для создаваемой сущности. Это поле оставьте пустым.</para>
</listitem>
<listitem> <listitem>
<para>Нажмите на кнопку <guibutton>...</guibutton> рядом с именем сущности. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать <link linkend="localization">локализацию</link> имени сущности на доступных языках.</para> <para>Нажмите на кнопку <guibutton>...</guibutton> рядом с именем сущности. На экране отобразится окно <guilabel>Localized message</guilabel>, в нем следует задать <link linkend="localization">локализацию</link> имени сущности на доступных языках.</para>
</listitem> </listitem>
@ -455,7 +458,7 @@ menu-config.sales$Customer.lookup=Покупатели</programlisting>
<para>Далее создадим атрибуты сущности. Для этого нажмите на кнопку <guibutton>New</guibutton>, находящуюся под таблицей <guilabel>Attributes</guilabel>.</para> <para>Далее создадим атрибуты сущности. Для этого нажмите на кнопку <guibutton>New</guibutton>, находящуюся под таблицей <guilabel>Attributes</guilabel>.</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<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>В отобразившемся окне <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>, в нем следует задать локализацию названия атрибута на доступных языках. Для добавления атрибута нажмите на кнопку <guibutton>Add</guibutton>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Атрибут <code>email</code> создается таким же образом, за исключением того, что в поле <guilabel>Length</guilabel> следует указать значение <userinput>50</userinput>.</para> <para>Атрибут <code>email</code> создается таким же образом, за исключением того, что в поле <guilabel>Length</guilabel> следует указать значение <userinput>50</userinput>.</para>
@ -473,14 +476,14 @@ menu-config.sales$Customer.lookup=Покупатели</programlisting>
<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> <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>
<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> <para><guilabel>Name</guilabel> <userinput>amount</userinput>, <guilabel>Attribute type</guilabel> <link linkend="datatype">DATATYPE</link>, <guilabel>Type</guilabel> <userinput>BigDecimal</userinput>.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para>Для каждого атрибута укажите <link linkend="localization">локализованные</link> названия.</para> <para>Для каждого атрибута укажите <link linkend="localization">локализованные</link> названия.</para>
</section> </section>
<section> <section>
<title>Создание таблиц базы данных</title> <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> <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 server</guimenu>, затем выполните <guimenu>Run</guimenu> &gt; <guimenu>Update database</guimenu>.</para>
</section> </section>
<section> <section>
<title>Создание пользовательского интерфейса приложения</title> <title>Создание пользовательского интерфейса приложения</title>

View File

@ -243,7 +243,7 @@
<para>Установите инструменты сборки и настройте окружение согласно предыдущим разделам данной главы.</para> <para>Установите инструменты сборки и настройте окружение согласно предыдущим разделам данной главы.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Загрузите архив <filename>studio-0.3.zip</filename> по ссылке <ulink url="http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.3/studio-0.3.zip">http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.3/studio-0.3.zip</ulink> (для доступа к репозиторию используйте имя <userinput>cuba</userinput> и пароль <userinput>cuba123</userinput>).</para> <para>Загрузите архив <filename>studio-0.4.zip</filename> по ссылке <ulink url="http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.4/studio-0.4.zip">http://repository.haulmont.com:8587/nexus/content/repositories/releases/com/haulmont/studio/studio/0.4/studio-0.4.zip</ulink>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Распакуйте архив в локальный путь, не содержащий пробелов, например, <filename>c:/work/studio</filename></para> <para>Распакуйте архив в локальный путь, не содержащий пробелов, например, <filename>c:/work/studio</filename></para>
@ -269,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 <link linkend="artifact_repository">репозитория</link> бинарных артефактов. Нажмите кнопку <guibutton>Auth</guibutton> и укажите имя <userinput>cuba</userinput> и пароль <userinput>cuba123</userinput>.</para> <para><guilabel>Repository</guilabel> URL <link linkend="artifact_repository">репозитория</link> бинарных артефактов. Нажмите кнопку <guibutton>Auth</guibutton> и укажите имя и пароль доступа к репозиторию.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>

View File

@ -0,0 +1,16 @@
<grid spacing="true" margin="true" width="100%">
<columns>
<column flex="3"/>
<column/>
<column flex="1"/>
<column flex="0"/>
</columns>
<rows>
<row>
<label value="Name"/>
<textField id="name" datasource="customerDs" property="name"/>
<label value="Email"/>
<textField id="email" datasource="customerDs" property="email"/>
</row>
</rows>
</grid>