Можно Ли Получить Список Выделенных Checkbox-entry До Очередного Клика

Тема в разделе "Lotus - Программирование", создана пользователем Shandrik, 12 дек 2014.

  1. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    Добрый день, коллеги.
    Прошу помощи, т.к. сам простого решения не вижу.
    Имеется три CheckBox-поля, причем список вариантов во втором, зависит от выбранных в первом, а список в третьем зависит от выбора во втором.
    То есть, выбираем ещё один пункт в первом CheckBoxe и во втором появляются дополнительные варианты.
    Скажем, в первом страны, во втором города, а в третьем - офисы.
    Я реализовал на формулах такую зависимость, но заказчик теперь хочет, чтобы при выборе нового пункта в ведущем Checkbox-е, появившиеся новые пункты в ведомом списке автоматически выделялись.

    Не могу сообразить, как это реализовать.

    Как понять, какой пункт мы только что выбрали?
    На ум приходит только хранение предыдущего значения в отдельном поле, которое создается в PostOpen и обновляется в InputTranslation.

    Есть ли путь попрямее и поизящней?
     
  2. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    ну я именно так и делаю, только не для чекетбоксов, а для обычных полей, когда надо отсеживать изменение, и менять в других документах, рассылки делать и т.п.
    Тока, сразу, в LS для айтемов, есть такой параметр как savetodisk соотвественно, на постопен (что-то типа этого):
    Код (LotusScript):
    dim t_item as notesitem
    t_item=source.document.getfirstitem("subject")
    t_item=t_item.copytodocument(source.document,"old_subject")
    t_item.savetodisk=false
    соответвенно на постсаве, проверяю, поменялось или нет.
     
  3. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Т.е. при выборе в первом чекбоксе добавляются значения в список выбора второго чека.
    Т.е. у Вас есть этот "список".
    Выбранные значения в чекбоксе это новые значения самого чекбокса.
    Ну и сделайте FIELD второй_чекбокс := "список" (ну, или LS-ом), как только получили этот "список"
    P.S.
    После сохранения/открытия этого дока "выделения" в чеках останутся.
     
  4. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    Думаю, что все так делают, но тут надо отслеживать не в квери- или пост-сейве, а в момент клика.

    Наверное, описанный мной алгоритм - единственный путь.

    Добавлено:
    Нет, до этого во втором Чекбоксе было уже множество выбранных вариантов и их выбранность, разумеется, надо сохранить.
     
  5. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Вот тут не понял.
    т.е. так?
    1 во втором чеке навыбирали элементов
    2 в первом чеке изменили выбор элемента и для второго чека добавился список для выбора
    3 во втором чеке надо оставить выбранное и дополнительно подсветить (т.е. выбрать автоматом) добавленный список?
    Тогда FIELD второй_чекбокс := второй_чекбокс : "список"
     
  6. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    Да, видимо, правильно поняли.
    Должно быть такое поведение:

    Состояние 1
    ("+" - выбранный элемент,
    красный - изменение, выполненное пользователем)

    ChkBox1:
    CCCP +
    ГДР
    Чехословакия

    ChkBox2:
    Москва +
    Новосибирск +
    Омск
    Бобруйск +
    Мелитополь +
    Шепетовка
    Владивосток



    Состояние 2:

    ChkBox1:
    CCCP +
    ГДР
    Чехословакия +

    ChkBox2:
    Москва +
    Новосибирск +
    Омск
    Бобруйск +
    Мелитополь +
    Шепетовка
    Владивосток
    Прага +
    Братислава +
    Брно +

    Состояние 3:

    ChkBox1:
    CCCP +
    ГДР
    Чехословакия +

    ChkBox2:
    Москва +
    Новосибирск +
    Омск
    Бобруйск +
    Мелитополь +
    Шепетовка
    Владивосток
    Прага
    Братислава

    Брно +


    Состояние 4:

    ChkBox1:
    CCCP
    ГДР
    Чехословакия +

    ChkBox2:
    Прага
    Братислава
    Брно +
     
  7. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Тогда так.
    1 При изменении первого чека записывается измененный список в поле выбора для второго чека.
    2 Новые элементы списка выбора - это "список"
    3 Проверяем, что ранее выбранное во втором чеке содержится в новом списке выбора (трансформом, проверка @ismember, если "0" - пишем на это место "", результат - @trim) т.о. удаляем ранее выбранное, не содержащееся в уже измененном (возможно урезанном) списке.
    3 В конце FIELD второй_чек := второй_чек : "список"
    =================
    Т.е. не только добавляем к выбору (в чеке) заведомо новые элементы выбора списка с автоматическим селектом, а, дополнительно, удаляем все, ранее выбранные, если они не содержатся в новом списке выбора.
     
  8. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    Да дальше-то понятно - вроде, граблей не видно.
    Проблема, как я озвучил, в получении выбранного пункта CheckBoxа
     
  9. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    На форме:
    Checked - Ваш чекбокс, с включенным |refresh fields on keyword change|
    OldChoice - Multivalue computed text field с формулой просто CheckBox
    и Changed, например, - computed text field с формулой:

    flag := @Elements(CheckBox)>@Elements(OldChoice);
    @If(flag;"checked: "+@Trim(@Replace(CheckBox; OldChoice; ""));
    "unchecked: "+@Trim(@Replace(OldChoice; CheckBox; "")))

    После каждого изменения выбора в Checked в поле Changed будет последнее изменение вида checked(unchecked): |строка клика|

    для правильной работы, поле OldChoice должно быть на форме после Changed (правее или ниже).
     
Загрузка...

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