Включить / отключить редактирование поля формы из кода - PullRequest
2 голосов
/ 18 декабря 2008

Я не программист Notes, однако, из-за своих грехов, недавно работал над некоторыми функциями Notes для внутреннего проекта. Мне нужно включить / отключить редактирование поля в зависимости от обстоятельств. Мне кажется, это довольно стандартная функция, мне нужно, но я не могу найти информацию о том, как это сделать где-либо.

В коде настройки формы (и onchange) другого поля, что-то вроде следующего:

if some requirement = true then
    textField.enable = true
else
    textField.enable = false
end if

Я видел другие места, где есть обходной путь условного сокрытия абзацев на основе некоторого кода, с двумя абзацами с противоположными условиями скрытия, один с редактируемым полем, другой с вычисляемым полем. Тем не менее, я не знаю достаточно о Notes, чтобы увидеть, как это реализовано (я вижу, как это делается в других формах, но в Notes есть некоторые «волшебные» шаги, которые я либо не вижу, либо не получаю ).

[EDIT] Кажется, мне нужен ответ от Керра, но я до сих пор не могу узнать, где находится свойство InputEnabled. Должен был сказать в первоначальном вопросе, я использую Notes 7.0.3.

Справедливости ради, неважно, каковы обстоятельства, когда нужно включать / отключать поле, это просто какое-то логическое условие, которое устанавливается, в моем случае, только при загрузке формы, поэтому мне даже не нужно беспокоиться о это меняется динамически, пока отображается форма.

У меня есть несколько проблем с Notes, мой самый большой багбир в том, что он так тесно связан с пользовательским интерфейсом Designer, что является полным дерьмом. Я могу делать такие вещи программно в большинстве языков GUI (C #, Java, Delphi, даже VB), но мне нужно открыть окна свойств в Notes и правильно их установить.

Это будет нормально в качестве необязательного метода, но вынудит пойти по этому пути, что означает, что вы можете работать только так, как IDE позволяет вам в этом случае, и IDE Здесь, кажется, активно работать против вас. Вы не можете открыть несколько функций / сценариев, вы не можете переключаться с одного сценария на другой, не возвращаясь к меню слева, вы не можете легко искать в базе кода вхождения переменных / полей (и поверьте мне, это для меня это большая ошибка, потому что в моем случае Notes или внутренняя кодовая база часто используют глобальные переменные!), вы можете работать с полями только через отображаемые поля свойств, вы не можете редактировать код в Дизайнер во время отладки через основной клиент Notes.

Хотя Java-кодирование лучше, чем LotusScript, он все еще довольно дурацкий (почему вы не можете отлаживать INTO Java-код? Почему вам нужно повторно импортировать JAR-файлы для каждого класса Java, есть ли у каждого класса другой CLASSPATH ???). Возможно, это было улучшено в Notes 8, я слышал, что он основан на Eclipse. Кто-нибудь знает, правда это или нет?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2008

В ND7 и выше, если вы хотите просто отключить поле для ввода, напишите соответствующую формулу в разделе InputEnabled поля, которое вы хотите отключить.

Итак, у меня есть два поля, одно из которых называется «Триггер», флажок со значением «Вкл», а другое - «Текст». Когда флажок «Триггер» установлен, я хочу, чтобы значение «Тема» было включено.

Я просто поместил следующую формулу в элемент Input Enabled поля Subject:

Trigger = "On"

Я также хочу, чтобы это пересчитывалось всякий раз, когда значение Триггера изменяется, поэтому я выбираю опцию «Обновить поля при изменении ключевого слова» в поле Триггер.

Если вы застряли в старой версии, вам необходимо соответствующим образом скрыть абзацы.

0 голосов
/ 18 декабря 2008

Было бы полезно услышать больше подробностей об «обстоятельствах», но наиболее распространенный способ справиться с этим - использовать формулу «скрыть при» в поле, которое вы хотите включить / отключить.

Технически вы не включаете или не отключаете поле, просто скрываете его, но обычно это работает так же хорошо.

Поскольку в Notes мало событий для работы, разработчики обычно используют обновление документа как «событие», чтобы поле скрывалось или отображалось.

Предположим, у вас есть два поля с именами TriggerField и Subject. Скажем также, что вы хотите отключить тему на основе значения в TriggerField. Самый простой способ сделать это - установить TriggerField в качестве типа списка и установить флажок «Обновить поля при изменении ключевого слова». Это означает, что при изменении значения списка диалогов весь документ обновляется.

Затем в формуле скрытия, когда для поля Тема вы указываете, когда показывать или скрывать это поле. Изменяются значения полей в любое время, после чего обновляется документ (то есть форма), которые скрывают, когда формула будет переоценена.

Существуют и другие способы, в зависимости от ваших обстоятельств, решить эту проблему. Если вы хотите позволить пользователю обновить форму самостоятельно, поместите в форму кнопку, которая вызывает команду @Command ([ViewRefreshFields]). Вы можете добавить любые другие формулы к этой кнопке перед командой обновления, если хотите внести другие изменения в форму одновременно.

Другим вариантом является создание определенного поля только для отображения. Затем создайте кнопку, которая запускает LotusScript, чтобы позволить пользователям изменять это поле только для отображения. В сценарии вы можете задать пользователю значение, установить поле только для отображения, а затем вызвать обновление документа.

...