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

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

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

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#2
мм.... @Picklist не позволяет заполнять поля, а всего лишь предоставляет данные.
Как сделать - выбрать нужное событие и обрабатывать.
Например событие изменения значения компонента
 
04.03.2015
10
0
#3
Спасибо, NickProstNick.
Есть еще у кого-нибудь опыт по использованию Value Picker из Extention Library ?
 
04.03.2015
10
0
#5
Ну давайте с конкретным примером.
На Xpage три поля (фамилия, регион, телефон) которые надо заполнить, осуществив выбор значения из модального окна, которое выдает наш Value Picker. В дизайнере, в свойствах этого компонента предлагают указать источник: xe:dominoViewValuePicker в котором предлагается указать какую вьюшку взять для отображения и какой из нее столбец. Тут проблем нет: модальное окно отображается и выводится линейный список фамилий (для исследований выбрал этот столбец)
Для возврата значения, в свойствах Value Picker предлагается указать параметр for, в котором предлагают выбрать одно из созданных трех полей на этой странице. А мне надо заполнить все три поля на странице, соответствующие сделанному выбору. Т.е. выбрав в списке Семена Семеновича Горбункова и нажав ОК, надо чтобы заполнились все три поля на странице: и фамилия и телефон и регион.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#6
В lotusscript обрабатывали событие кнопки, тут же надо немного подумать.
В событии поля, к которому привязан пикер нужно написать код, который заполнит все остальные поля.
Я использую событие "OnChange".
Одно неудобство - тут нужно работать с уникальным ключом, который позволит вытянуть все остальные данные
 
04.03.2015
10
0
#7
В качестве ключа в этой вьюшке как раз стоит скрытый столбец 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 809
21
#8
Т.е. я так понимаю примеры смотреть - религия не позволяет?
 
04.03.2015
10
0
#9
Нет нет, с религией все в порядке! )))
Завал по другим фронтам, идея и решение понятно вполне.
Найду кусок времени и порешаю.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#10
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>
 
Последнее редактирование модератором: