Поле Со Списком (как Добавить Пункт В Список)

25.11.2013
4
0
#1
Задача простая. Есть поле со списком, точнее поля. В которых пользователь выбирает значения. Но некоторые значения необходимо в этот список добавлять или удалять. С помощью scripta Новое appendtotextlist добавляет только в поле, список остается прежним.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#2
RTFM
Читаем про типы полей Combobox, listbox, dialogBox и их свойства.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#4
Вторая закладка свойств поля, галочка "Allow values not in list" это позволит руками добавлять значение, которого нет в списке.
Но список от этого не изменится. Чтобы список постоянно дополнялся можно сделать так:

1. Надо сделать настроечный документ, в документе сделать поле многозначное со списком значений.
2. В свойствах поля, где выбирают значения, на второй закладке в секции "Choices" вместо "Enter choices (one per line)" делаем "Use Formula fo choices"
3. В окошко ниже пишем формулу @DbLookUP(...), чтобы получать значения из нашего настоечного документа.
4. При сохранении документа так же получаем настроечный документ и смотрим значения.
Если выбранное нами там есть - ничего не делаем, если его нет - добавляем.
Естественно данный настроечный документ должен быть открыт всем для редактирования, но спрятан в UI.

Вот как-то так, не слишком элегантно, да и несколько подводных камней есть (конфликт при сохранении), но решение вполне имеет место быть.
 
25.11.2013
4
0
#5
Вторая закладка свойств поля, галочка "Allow values not in list" это позволит руками добавлять значение, которого нет в списке.
Но список от этого не изменится. Чтобы список постоянно дополнялся можно сделать так:

1. Надо сделать настроечный документ, в документе сделать поле многозначное со списком значений.
2. В свойствах поля, где выбирают значения, на второй закладке в секции "Choices" вместо "Enter choices (one per line)" делаем "Use Formula fo choices"
3. В окошко ниже пишем формулу @DbLookUP(...), чтобы получать значения из нашего настоечного документа.
4. При сохранении документа так же получаем настроечный документ и смотрим значения.
Если выбранное нами там есть - ничего не делаем, если его нет - добавляем.
Естественно данный настроечный документ должен быть открыт всем для редактирования, но спрятан в UI.

Вот как-то так, не слишком элегантно, да и несколько подводных камней есть (конфликт при сохранении), но решение вполне имеет место быть.
Спасибо, попробую. Да. не совсем гладко..

Добавлено:
Вторая закладка свойств поля, галочка "Allow values not in list" это позволит руками добавлять значение, которого нет в списке.
Но список от этого не изменится. Чтобы список постоянно дополнялся можно сделать так:

1. Надо сделать настроечный документ, в документе сделать поле многозначное со списком значений.
2. В свойствах поля, где выбирают значения, на второй закладке в секции "Choices" вместо "Enter choices (one per line)" делаем "Use Formula fo choices"
3. В окошко ниже пишем формулу @DbLookUP(...), чтобы получать значения из нашего настоечного документа.
4. При сохранении документа так же получаем настроечный документ и смотрим значения.
Если выбранное нами там есть - ничего не делаем, если его нет - добавляем.
Естественно данный настроечный документ должен быть открыт всем для редактирования, но спрятан в UI.

Вот как-то так, не слишком элегантно, да и несколько подводных камней есть (конфликт при сохранении), но решение вполне имеет место быть.
Спасибо, попробую. Да. не совсем гладко..
 

garrick

Well-Known Member
Lotus team
26.10.2009
881
79
#6
Посмотрите как работает поле Categories в базе "Библиотека документов".
 

alexas1

Well-Known Member
Lotus team
10.04.2014
706
242
#7
Спасибо, попробую. Да. не совсем гладко..
Можно и совсем "гладко":
1 помещаете на форму поле, где и находится список (дефолтный) для "листа"
2 Use Formula fo choices - @DbLookup или @DbCollumn из служебного вида (или уже существующего, сортированного вида, с нужными доками, дополнив его скрытой колонкой с нужным полем), где для отбора списка для "листа" - вышеозначенное поле. Ну и, конечно, для отобранного сделать @Unuque
3 при дополнении "листа" новым значением, дописываете это значение в поле для выбора.

P.S.
В самом начале, когда ещё нет ни одного сохраненного дока, для "листа" берёте дефолтное значение списка из того-же поля, а не из вида.
 
25.11.2013
4
0
#8
Можно и совсем "гладко":
1 помещаете на форму поле, где и находится список (дефолтный) для "листа"
2 Use Formula fo choices - @DbLookup или @DbCollumn из служебного вида (или уже существующего, сортированного вида, с нужными доками, дополнив его скрытой колонкой с нужным полем), где для отбора списка для "листа" - вышеозначенное поле. Ну и, конечно, для отобранного сделать @Unuque
3 при дополнении "листа" новым значением, дописываете это значение в поле для выбора.

P.S.
В самом начале, когда ещё нет ни одного сохраненного дока, для "листа" берёте дефолтное значение списка из того-же поля, а не из вида.
Да, похоже единственный способ. Он и предлагается в свойствах. Еще раз проутюжил LotusScript, увы зацепиться за перечень в списке не получается. Если в поле ничего не выбрано, возвращает пустоту.
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc =ws.CurrentDocument
Dim item As NotesItem
Dim doc As NotesDocument
Set doc=uidoc.Document
Set item=doc.GetFirstItem("Reg_zakaz")

Forall v In item.Values
Messagebox(v)
End Forall

Хотел сделать так, рядом с полем повесить две кнопочки (Добавить и Удалить) .Пользователь выбирает из списка пункт или свой пишет ,если хочет нажимает добавить в список или выбрав пункт удаляет его из списка кнопкой удалить. Т.к. пунктов с выбором много придется колбасить с представлением.

alexas1, пожалуйста поясните для "листа" это как? Делаешь другую форму с полем списком, как savl советовал, далее представление в котором Dblookup по этому полю.....? И что такое служебное представление (служебный вид)?
 

alexas1

Well-Known Member
Lotus team
10.04.2014
706
242
#9
alexas1, пожалуйста поясните для "листа" это как? Делаешь другую форму с полем списком, как savl советовал, далее представление в котором Dblookup по этому полю.....? И что такое служебное представление (служебный вид)?
В течении дня нарисую микропример. -_-
Сорри, за задержку
"служебный вид" - для использования в коде а не для показа в UI (обычно скрытый)
 

Вложения

alexas1

Well-Known Member
Lotus team
10.04.2014
706
242
#10
По дизайну:
Ничего лишнего в доке не сохраняется, вся инфа берётся из вида - для реализации добавил скрытую колонку (ListBox) в уже существующий сортированный вид (v1). Если ListBox (или DialogList) несколько, то в тот же вид добавляется нужное кол-во скрытых колонок.
Формула для поля DefaultList может быть такой:
a := "1 значение":"2 значение":"3 значение":"4 значение";
@Unique(@If (DefaultList="";a;DefaultList :ListBox));
 
25.11.2013
4
0
#11
По дизайну:
Ничего лишнего в доке не сохраняется, вся инфа берётся из вида - для реализации добавил скрытую колонку (ListBox) в уже существующий сортированный вид (v1). Если ListBox (или DialogList) несколько, то в тот же вид добавляется нужное кол-во скрытых колонок.
Формула для поля DefaultList может быть такой:
a := "1 значение":"2 значение":"3 значение":"4 значение";
@Unique(@If (DefaultList="";a;DefaultList :ListBox));
alexas1, спасибо волшебник! Ясно, как белый день и правда гладко! :) А что думаешь над такой задачей. Есть поле список (часто использумых значений) из него пользователь выбирает, может набрать новое, но не сохранять в списке поскольку оно очень редкое и не будет засорять список и внести новое, но сохранить поскольку стало часто используемым. Выборочное сохранение и удаление элементов списка. Этот вариант, наверное, уже по методу savla через один настроечный документ в представлении и складывания списка в поле....?
 

alexas1

Well-Known Member
Lotus team
10.04.2014
706
242
#13
Раз требуется более или менее интенсивная работа со списком выбора, логично его держать в отдельном журнале: один элемент списка - один документ журнала.
Для работы со списком можно использовать вот эту мульку LiveSearch немного изменив логику работы:
Для пустого значения в строке поиска и для значений которые не нашлись - показывать в окне отбора ВЕСЬ список с заголовком типа "Выберите из списка или продолжите поиск". Одновременно показать кнопарь "Добавить в список", если поле не пусто, который может создать новый док, из того, что введено.
Для значения в строке поиска, в точности совпадающего с элементом списка, показать кнопарь "Удалить из списка" ("Добавить в список", конечно, скрыть).
Надо понимать, что при интенсивной работе с доками журнала задваивание доков возможно, поэтому использовать unique надо.
Соответственно, при удалении из списка (удаление соответствующего дока) надо удалять все найденные, а не первый. И обработать ситуацию возможной ошибки при удалении из-за отсутствующего дока (кто то мог удалить док, пока юзер был "в процессе")
Конфликтов не будет, интерфейс вроде логичный, задваивание записей в журнале не критично (хотя это можно исключить - только нафига?)