• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Решено Про value picker из extention library

N

Nick Nick

Доброго дня!
Насколько я понял в xPages нет "чистого" аналога функции @Picklist, который позволяет вернуть из выбранного элемента все значения выбранной строки. Нашел в Extension Library компонент Value Picker, но он вроде предлагает заполнить только одно поле на странице, после выбора значения из вьюшки. Как сделать так, чтобы после выбора значения из списка, заполнялись сразу несколько полей на форме?

PS/ Если тема ранее обсуждалась, киньте плиз ссылочкой, а то может с бодуна утра просмотрел...
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
мм.... @Picklist не позволяет заполнять поля, а всего лишь предоставляет данные.
Как сделать - выбрать нужное событие и обрабатывать.
Например событие изменения значения компонента
 
N

Nick Nick

Спасибо, NickProstNick.
Есть еще у кого-нибудь опыт по использованию Value Picker из Extention Library ?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
просто не понятно какие тут сложности?
 
N

Nick Nick

Ну давайте с конкретным примером.
На Xpage три поля (фамилия, регион, телефон) которые надо заполнить, осуществив выбор значения из модального окна, которое выдает наш Value Picker. В дизайнере, в свойствах этого компонента предлагают указать источник: xe:dominoViewValuePicker в котором предлагается указать какую вьюшку взять для отображения и какой из нее столбец. Тут проблем нет: модальное окно отображается и выводится линейный список фамилий (для исследований выбрал этот столбец)
Для возврата значения, в свойствах Value Picker предлагается указать параметр for, в котором предлагают выбрать одно из созданных трех полей на этой странице. А мне надо заполнить все три поля на странице, соответствующие сделанному выбору. Т.е. выбрав в списке Семена Семеновича Горбункова и нажав ОК, надо чтобы заполнились все три поля на странице: и фамилия и телефон и регион.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
В lotusscript обрабатывали событие кнопки, тут же надо немного подумать.
В событии поля, к которому привязан пикер нужно написать код, который заполнит все остальные поля.
Я использую событие "OnChange".
Одно неудобство - тут нужно работать с уникальным ключом, который позволит вытянуть все остальные данные
 
N

Nick Nick

В качестве ключа в этой вьюшке как раз стоит скрытый столбец c формулой @DocumentUniqueID. И именно его этот Picker возвращает на страницу в указанное поле inputText1, тоже для меня непонятный прикол )). А в лотусе, да все элементарно на собаках делалось:
choice := @PickList( [Custom] : [Single] ; ""; "v_users" ; "Исполнители" ; "Выберите" ; 1);
tmpField1 := @DbLookup("":"NoCahce";"";"v_users";choice;4);
tmpField2 := @DbLookup("":"NoCahce";"";"v_users";choice;5);
tmpField3 := @DbLookup("":"NoCahce";"";"v_users";choice;6);
@SetField("fio";tmpField1);
@SetField("tel";tmpField2);
@SetField("reg";tmpField3);

В любом случае спасибо за совет, буду думать дальше.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Т.е. я так понимаю примеры смотреть - религия не позволяет?
 
N

Nick Nick

Нет нет, с религией все в порядке! )))
Завал по другим фронтам, идея и решение понятно вполне.
Найду кусок времени и порешаю.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
C ValuePicker есть нюанс.

Строка в ValuePicker может иметь вид Алиас|Значение.
Вид, который используется для наполнения списка должен иметь следующую структуру:
Первая колонка - что угодно ( У меня это ФИО по алфавиту), вторая колонка - то, что ValuePicker будет возвращать (значение). (У меня это Lotus-name).
В качестве алиаса можно указать имя любой колонки из вида. Имя колонки указывается в свойстве labelColumn в провайдере пикера

Ниже пример... правда ссылаюсь на names.nsf, чтоб уж наверняка заработало.

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">

<xp:table><xp:tr><xp:td>Lotus Name</xp:td>
<xp:td style="width:400px">
<xp:inputText id="inputText1" style="width:90%">
<xp:eventHandler event="onchange" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:var choice = getComponent("inputText1").value
getComponent("inputText2").value = @DbLookup("names.nsf","($Users)",choice,"MailServer")
getComponent("inputText3").value = @DbLookup("names.nsf","($Users)",choice,"MailFile")
}]]></xp:this.action>
</xp:eventHandler>
</xp:inputText>
<xe:namePicker id="namePicker14" for="inputText1">
<xe:this.dataProvider>
<xe:dominoNABNamePicker nameList="people">
</xe:dominoNABNamePicker>
</xe:this.dataProvider>
</xe:namePicker>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>Server
</xp:td>
<xp:td>
<xp:inputText id="inputText2" style="width:90%"></xp:inputText></xp:td>
</xp:tr>
<xp:tr>
<xp:td>DB path</xp:td>
<xp:td>
<xp:inputText id="inputText3" style="width:90%"></xp:inputText></xp:td>
</xp:tr>
</xp:table>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:table id="table1"><xp:tr><xp:td>Lotus Name</xp:td>
<xp:td style="width:400px">
<xp:inputText id="inputText4" style="width:90%">
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="table1">
<xp:this.action><![CDATA[#{javascript:var choice = getComponent("inputText4").value
getComponent("inputText5").value = @DbLookup("names.nsf","($Users)",choice,"MailServer")
getComponent("inputText6").value = @DbLookup("names.nsf","($Users)",choice,"MailFile")
}]]></xp:this.action>
</xp:eventHandler>
</xp:inputText>

<xe:valuePicker id="valuePicker1" for="inputText4">
<xe:this.dataProvider>
<xe:dominoViewValuePicker viewName="($Users)"
databaseName="names.nsf" labelColumn="FullName">
</xe:dominoViewValuePicker>
</xe:this.dataProvider>
</xe:valuePicker></xp:td></xp:tr><xp:tr><xp:td>Server
</xp:td>
<xp:td>
<xp:inputText id="inputText5" style="width:90%"></xp:inputText></xp:td>
</xp:tr>
<xp:tr>
<xp:td>DB path</xp:td>
<xp:td>
<xp:inputText id="inputText6" style="width:90%"></xp:inputText></xp:td>
</xp:tr>
</xp:table> 
<xp:br></xp:br>
<xp:br></xp:br></xp:view>
 
Последнее редактирование модератором:
  • Нравится
Реакции: Nick Nick
N

Nick Nick

Спасибо NickProstoNick, исчерпывающе!
Прикрутил, все работает.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!