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

Тема в разделе "Lotus - Программирование", создана пользователем ученикLN, 23 июн 2014.

  1. ученикLN

    ученикLN New Member

    Регистрация:
    25 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Задача простая. Есть поле со списком, точнее поля. В которых пользователь выбирает значения. Но некоторые значения необходимо в этот список добавлять или удалять. С помощью scripta Новое appendtotextlist добавляет только в поле, список остается прежним.
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    RTFM
    Читаем про типы полей Combobox, listbox, dialogBox и их свойства.
     
  3. ученикLN

    ученикLN New Member

    Регистрация:
    25 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Savl! help! Не могу найти в свойствах, подскажи куда смотреть...
     
  4. savl

    savl Lotus team
    Lotus team

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

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

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

    ученикLN New Member

    Регистрация:
    25 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Спасибо, попробую. Да. не совсем гладко..

    Добавлено:
    Спасибо, попробую. Да. не совсем гладко..
     
  6. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Посмотрите как работает поле Categories в базе "Библиотека документов".
     
  7. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Можно и совсем "гладко":
    1 помещаете на форму поле, где и находится список (дефолтный) для "листа"
    2 Use Formula fo choices - @DbLookup или @DbCollumn из служебного вида (или уже существующего, сортированного вида, с нужными доками, дополнив его скрытой колонкой с нужным полем), где для отбора списка для "листа" - вышеозначенное поле. Ну и, конечно, для отобранного сделать @Unuque
    3 при дополнении "листа" новым значением, дописываете это значение в поле для выбора.

    P.S.
    В самом начале, когда ещё нет ни одного сохраненного дока, для "листа" берёте дефолтное значение списка из того-же поля, а не из вида.
     
  8. ученикLN

    ученикLN New Member

    Регистрация:
    25 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Да, похоже единственный способ. Он и предлагается в свойствах. Еще раз проутюжил 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 по этому полю.....? И что такое служебное представление (служебный вид)?
     
  9. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    В течении дня нарисую микропример. -_-
    Сорри, за задержку
    "служебный вид" - для использования в коде а не для показа в UI (обычно скрытый)
     

    Вложения:

    • example.zip
      Размер файла:
      16,2 КБ
      Просмотров:
      4
  10. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    По дизайну:
    Ничего лишнего в доке не сохраняется, вся инфа берётся из вида - для реализации добавил скрытую колонку (ListBox) в уже существующий сортированный вид (v1). Если ListBox (или DialogList) несколько, то в тот же вид добавляется нужное кол-во скрытых колонок.
    Формула для поля DefaultList может быть такой:
    a := "1 значение":"2 значение":"3 значение":"4 значение";
    @Unique(@If (DefaultList="";a;DefaultList :ListBox));
     
  11. ученикLN

    ученикLN New Member

    Регистрация:
    25 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    alexas1, спасибо волшебник! Ясно, как белый день и правда гладко! :) А что думаешь над такой задачей. Есть поле список (часто использумых значений) из него пользователь выбирает, может набрать новое, но не сохранять в списке поскольку оно очень редкое и не будет засорять список и внести новое, но сохранить поскольку стало часто используемым. Выборочное сохранение и удаление элементов списка. Этот вариант, наверное, уже по методу savla через один настроечный документ в представлении и складывания списка в поле....?
     
  12. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Я подумаю.
     
  13. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Раз требуется более или менее интенсивная работа со списком выбора, логично его держать в отдельном журнале: один элемент списка - один документ журнала.
    Для работы со списком можно использовать вот эту мульку LiveSearch немного изменив логику работы:
    Для пустого значения в строке поиска и для значений которые не нашлись - показывать в окне отбора ВЕСЬ список с заголовком типа "Выберите из списка или продолжите поиск". Одновременно показать кнопарь "Добавить в список", если поле не пусто, который может создать новый док, из того, что введено.
    Для значения в строке поиска, в точности совпадающего с элементом списка, показать кнопарь "Удалить из списка" ("Добавить в список", конечно, скрыть).
    Надо понимать, что при интенсивной работе с доками журнала задваивание доков возможно, поэтому использовать unique надо.
    Соответственно, при удалении из списка (удаление соответствующего дока) надо удалять все найденные, а не первый. И обработать ситуацию возможной ошибки при удалении из-за отсутствующего дока (кто то мог удалить док, пока юзер был "в процессе")
    Конфликтов не будет, интерфейс вроде логичный, задваивание записей в журнале не критично (хотя это можно исключить - только нафига?)
     
Загрузка...

Поделиться этой страницей