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

  • Автор темы Автор темы Nick Nick
  • Дата начала Дата начала
  • Теги Теги
    value picker
N

Nick Nick

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

PS/ Если тема ранее обсуждалась, киньте плиз ссылочкой, а то может с бодуна утра просмотрел...
 
мм.... @Picklist не позволяет заполнять поля, а всего лишь предоставляет данные.
Как сделать - выбрать нужное событие и обрабатывать.
Например событие изменения значения компонента
 
Спасибо, NickProstNick.
Есть еще у кого-нибудь опыт по использованию Value Picker из Extention Library ?
 
Ну давайте с конкретным примером.
На Xpage три поля (фамилия, регион, телефон) которые надо заполнить, осуществив выбор значения из модального окна, которое выдает наш Value Picker. В дизайнере, в свойствах этого компонента предлагают указать источник: xe:dominoViewValuePicker в котором предлагается указать какую вьюшку взять для отображения и какой из нее столбец. Тут проблем нет: модальное окно отображается и выводится линейный список фамилий (для исследований выбрал этот столбец)
Для возврата значения, в свойствах Value Picker предлагается указать параметр for, в котором предлагают выбрать одно из созданных трех полей на этой странице. А мне надо заполнить все три поля на странице, соответствующие сделанному выбору. Т.е. выбрав в списке Семена Семеновича Горбункова и нажав ОК, надо чтобы заполнились все три поля на странице: и фамилия и телефон и регион.
 
В lotusscript обрабатывали событие кнопки, тут же надо немного подумать.
В событии поля, к которому привязан пикер нужно написать код, который заполнит все остальные поля.
Я использую событие "OnChange".
Одно неудобство - тут нужно работать с уникальным ключом, который позволит вытянуть все остальные данные
 
В качестве ключа в этой вьюшке как раз стоит скрытый столбец 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);

В любом случае спасибо за совет, буду думать дальше.
 
Т.е. я так понимаю примеры смотреть - религия не позволяет?
 
Нет нет, с религией все в порядке! )))
Завал по другим фронтам, идея и решение понятно вполне.
Найду кусок времени и порешаю.
 
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
Спасибо NickProstoNick, исчерпывающе!
Прикрутил, все работает.
 
Мы в соцсетях:

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