Deprecated - старые версии

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Данный раздел содержит информацию, относящуюся к старым версиям Showcase

userdata

Старый способ задания userdata (**для версий < 1.9.3**):

Файлы, относящиеся к конкретному решению, хранятся в отдельной папке - т.наз. userdata. На любом web-сервере таких папок (решений) может быть произвольное количество. Для того, чтобы Showcase "увидел" конкретную userdata - она должна быть зарегистрирована. Это можно сделать одним из 3 способов:

  1. в файле conf\Catalina\localhost\%webappname%.xml, где %webappname% - имя приложения Tomcat
  2. в файле conf\context.xml в директории Tomcat
  3. в файле webapps\%webappname%\WEB-INF\classes\general.properties - только в тестовых целях!

В 1-м и 2-м случаях формат записи следующий:

<Parameter name="showcase.user.data" value="с:\\dir1\\dir2"
         override="false"/>

для т. наз default userdata и

<Parameter name="xxx.showcase.user.data" value="с:\\dir1\\dir2"
         override="false"/>

для всех остальных userdata, где xxx - имя userdata.

default userdata отличается от всех остальных тем, что при запуске Showcase как http://localhost:8080/Showcase используется именно она. Для запуска конкретной userdata нужно использовать url вида http://localhost:8080/Showcase/?userdata=xxx.

При использовании файла general.properties формат записи следующий: xxx.user.data = с:\\dir1\\dir2


Действие

Формат action до версии 2.0.4:

<action show_in="MODAL_WINDOW" keep_user_settings="false">
    <main_context>вместо атрибута datapanel</main_context>
    <navigator refresh="true" element="код элемента"/>
    <modalwindow caption="Заголовок модального окна" height="100" width="200" show_close_bottom_button="true"/>
    <datapanel type="a.xml" tab="код вкладки"/>         
        <element id="код элемента" refresh_context_only="true">
             <add_context>
             вместо атрибута add_context у element
             </add_context>
        </element>
        <element id="код элемента" skip_refresh_context_only="true">
             <add_context>
             вместо атрибута add_context у element
             </add_context>        
        </element>     
        <element id="код элемента" keep_user_settings="true">
             <add_context>
             вместо атрибута add_context у element
             </add_context>        
        </element>             
    </datapanel>
    <client>
        <activity id="id" name="proc_name">
             <add_context>
             add_context для действия.
             </add_context>  
        </activity>     
    </client>
    <server>
        <activity id="id" name="proc_name" type="SP">
             <add_context>
             add_context для действия
             </add_context>  
        </activity>             
    </server>
</action>
  • Атрибут refresh_context_only у элемента указывает на то, что для данного элемента нужно обновить additional контекст у всех его событий и действия по умолчанию при этом не обращаясь к серверу и не перерисовывая элемент. Важно, что контекст будет обновлен автоматически программой, в противном случае это придется делать в коде хранимой процедуры! Использование данной опции часто требует применения атрибута skip_refresh_context_only (см. ниже).
  • Атрибут skip_refresh_context_only у элемента указывает на то, что после вызова действия с refresh_context_only контекст данного элемента обновлять не нужно. Это может быть полезно при реализации любых "статичных" действий - т.е. действий не зависимых от текущего значения additional контекста на вкладке панели. Примером таких действия являются добавление нового элемента, сброс неких значений. Задание данной опции гарантирует, что additional контекст у данного элемента будет именно тем, который пришел из БД. Нужно помнить, что действие (action) по сути является комплексным объектом и может содержать в себе несколько вложенных действий с разными элементами, некоторые из которых могут зависеть от текущего значение additional контекста на вкладке панели, а у других значение additional контекста меняться не должно!

Частые ошибки при работе с опцией refresh_context_only

  1. При использовании опции refresh_context_only для обновления элемента X работать с передаваемым в функцию отрисовки элемента X параметром add_context в большинстве случаев не имеет смысла, т.к. реальный add_context будет установлен динамически в клиентском коде без вызова хранимой процедуры на сервере. Поэтому рекомендуется вызвать функцию getAdditionalContextFeedbackJSNIFunction(${elementId});
  2. указание опции refresh_context_only для элемента Y, открываемого в модальном окне, не имеет смысла и скорее всего приведет к ошибке - при первом вызове модальное окно будет инициализировано и откроется корректно, а при втором вызове программу будет ожидать, что элемент Y уже инициализирован и не отобразит его.


Карта

Для версий до 1.9.4 для подключения шаблона карты к подложке нужно было добавить следующие строки:

	   registerModules: [["solution", "../../${userdata.dir}/js"]],
	   managerModule: "solution.test",

Где solution - это пространство имен (путь должен начинаться с ../../). А test - это имя js-файла подключения подложки.

XForms

Устаревший способ загрузки файлов на сервер

gwtXFormUpload -- процедура сохранения файлов на сервере.

Формат вызова gwtXFormUpload:

gwtXFormUpload({
		xformsId: 'xformId',
                linkId: '05', 
                onSelectionComplete : function(ok, fileName) {
                if (ok) {              
                }
                }});

Параметры 'xformId', 'linkId' имеют тот же смысл, что и для gwtXFormDownload. Процедура в файле панели должна иметь тип "UPLOAD".

ВАЖНО: 'linkId' должен быть уникален в пределах элемента xforms, на котором он находится. А вот процедура загрузки (выгрузки) может быть как единой, так и специфичной для каждой ссылки на файл.

Submission

Устаревшие адреса сервлетов.

  • secured/submit - обмен данными в БД (кроме того возможно использование данного механизма для "сложного" сохранения данных - в противоположность простому сохранению данных при вызове JS функции gwtXFormSave).
  • secured/xslttransformer- вызов xsl трансформации на сервере.

Селектор с onSelectionComplete

Загрузка одной процедурой

showSelector({
		       id : 'xformId',
                       procListAndCount  : '[dbo].[companylist_and_count]',                       
                       generalFilters      : '',
                       currentValue        : '',
                       windowCaption       : 'Выберите название',
                       onSelectionComplete : function(ok, selected){
					if (ok) {
					var a = xforms.defaultModel.defaultInstance.doc.
getElementsByTagName('info')[0].getElementsByTagName('name')[0];
					setValue(a, selected.name);
		 
					xforms.ready = false;
					xforms.refresh();
					xforms.ready = true;
							}
}});

где

  • procListAndCount - имя процедуры для получения и данных, и общего количества значений,
  • остальные параметры описаны ниже.

Загрузка двумя процедурами

showSelector({
		       id : 'xformId',
                       procCount : '[dbo].[companycount]',
                       procList  : '[dbo].[companylist]',                       
                       generalFilters      : '',
                       currentValue        : '',
                       windowCaption       : 'Выберите название',
                       onSelectionComplete : function(ok, selected){
					if (ok) {
					var a = xforms.defaultModel.defaultInstance.doc.
getElementsByTagName('info')[0].getElementsByTagName('name')[0];
					setValue(a, selected.name);
		 
					xforms.ready = false;
					xforms.refresh();
					xforms.ready = true;
							}
}});

где

  • procCount - имя процедуры для получения общего количества значений,
  • procList - имя процедуры для получения данных,
  • остальные параметры описаны ниже.

Селектор с xpath

Использование XPath запросов

showSelector({
	               id                  : 'xformId',
                       procListAndCount    : '[dbo].[companylist_and_count]',
                       generalFilters      : [
                                              'XPath(instance(quot(myInstance))/name)',
                                              'строка',
                                              'XPath(/schema/info/eyescolour)'
                                             ],
                       currentValue        : 'XPath(/schema/info[index(quot(securityRealEstateRow))]/name)',
                       windowCaption       : 'Выберите название',
                       xpathMapping        : {
                                              'XPath(/schema/info[index(quot(securityRealEstateRow))]/name)': 
                                              'name', 
                                              
                                              'XPath(/schema/info[index(quot(securityRealEstateRow))]/comment)': 
                                              'XPath(/schema/info[index(quot(securityRealEstateRow))]/eyescolour)'
                                             }
});;

Описание всех параметров функции showSelector:

  • id - константа,
  • procCount - имя процедуры для получения общего количества значений,
  • procList - имя процедуры для получения данных,
  • procListAndCount - имя процедуры для получения и данных, и общего количества значений,
  • generalFilters - фильтры, передаваемые в хранимую процедуру (может задаваться массивом XPath запросов),
  • currentValue - начальное значение строки поиска (может задаваться XPath запросом),
  • windowCaption - заголовок окна селектора,
  • onSelectionComplete - задает функцию, вызываемую по закрытию окна селектора,
  • xpathMapping - задает связь между приемником и источником данных при помощи XPath запросов (куда и откуда вставлять данные по нажатию ОК в селекторе).

При использовании xpathMapping XPath запросы должны задаваться в виде XPath(...), кавычки в виде quot(...)!

При использовании generalFilters формируется XML вида:

<schema>
    <filter>
        <name id="1" value="qq2">
            <growth/>
            <eyescolour>green22</eyescolour>
            <music>kkkkkkkkk</music>
            <comment>dddddddddd</comment>
        </name>
        <name id="2" value="Николай"/>
        <name id="3" value="Геннадий"/>
        <name id="4" value="Дмитрий"/>
        <name id="5" value="Станислав"/>
        <name id="6" value="Петр"/>
    </filter>
    <filter>строка</filter>
    <filter>
        <eyescolour>Зеленый11</eyescolour>
        <eyescolour>Зеленый22</eyescolour>
    </filter>
</schema>

Мультиселектор

Устаревший формат вызова showMultiSelector:

showMultiSelector({
		       id                  : 'xformId',
                       procListAndCount    : '[dbo].[companylist_and_count]',
                       generalFilters      : '',
                       currentValue        : '',
                       windowCaption       : 'Выберите значения',
                       needInitSelection   : true,                       
                       needClear           : true,                       
                       xpathRoot	   : 'XPath(instance(quot(myInstance))/infos)',
                       xpathMapping        : {
                                              'XPath(instance(quot(myInstance1))/info)': 
                                              {'id': '@id','name':'name'}
                                             }
});

где

  • needInitSelection - нужно ли загружать начальные выбранные значения при открытии селектора,
  • needClear - нужна ли очистка ноды xpathRoot перед вставкой выбранных значений,
  • xpathRoot - задает ноду, в которую будут вставляться выбранные значения,
  • xpathMapping - сначала в элемент, указанный с помощью XPath запроса, помещаются поля выбранной записи, а затем этот элемент (origin) вставляется в xpathRoot,
  • остальные параметры совпадают с соответствующими параметрами вызова селектора с единственным выбором.

Процедура фильтрации данных (gwtXFormFilter). Внимание! Данная процедура УДАЛЕНА из Showcase

Удалена, начиная с версии 3.5.1.3677-build681 (Feb 9, 2015 7:21:11 PM)

Формат вызова gwtXFormFilter:

 
gwtXFormFilter('xformId', linkId,  Writer.toString(xforms.defaultModel.getInstanceDocument('mainInstance')))

В этом случае 3-й параметр представляет собой строку-фильтр, с которой будет вызвано действие (action), связанное с событием linkId. Если не требуется фильтрация данных - укажите null вместо 3-го параметра.