Динамическое поле

  • Автор темы zigfrid
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

zigfrid

Добрый день.
Создавал я тему по поводу динамического заполнения поля типа Dialog List.
Решил в данном случае выкрутиться таким образом.
На форме form1 находятся 2 поля field1 и field2. При изменении данных в поле field1 происходит событие, которое меняет содержимое view1 в зависимости от значеня поля field1.

Sub Onchange(Source As Field)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim formula As String
Dim workspace As New NotesUIWorkspace
Dim curdoc As NotesUIDocument
Dim doc As NotesDocument
Dim var As Variant

Set db = session.CurrentDatabase
Set curdoc = workspace.CurrentDocument
Set doc=curdoc.Document
Set view = db.GetView("(view1)")
var = doc.GetItemValue("field1")
formula= | select form = "form1" & field1 ="| & var(0) & |"|
view.SelectionFormula = formula
End Sub

View1 состоит из 2-х столбцов. 1-й отсортированный и указывает на поле field1, 2-й указывает на поле field2.
В свойствах поля field2 указано: Use view dialog for choices --- view1 --- 2-й столбец. В результате при вызове dialog list field2 отображает только те значения, которые соответствуют field1.
Но имеется один нюанс - в этом dialog list дублируются значения. Т.е. если для одному и тому же значению field1 было поставлено в соответсвие несколько одинаковых значений field2, то в dialog list field2 они повторяются.

Может кто-то посоветует как избавиться от дубликатов в dialog list ?????
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: zigfrid
Менять Selection Formula занятие не очень хорошее. Это могут делать только дизайнеры и администраторы базы. Имхо можно обойтись простыми функциями типа @DbColumn или @DbLookup. Это, конечно, если ты не преследуешь имеено цель смены формулы выбора.

Есть функция @Unique. Убирает дубликаты. Но тогда в Dialog List'е нужно сделать Use formula for choice. И значения отбирать через те же @DbColumn или @DbLookup.
 
Z

zigfrid

Ладно
Как я понимаю плохой способ я выбрал, раз с правами играться надо.
Тогда позвольте задать несколько вопросов по Вашему методу.
Зачем делать поле Multiple Values???
Как заполнить поле Values как список/массив???

>>Как делал я.
>>Создаем еще одно скрытое текстовое. Пусть будет Values. И оно будет >>Multiple Values.
>>В поле типа DialogList в формуле выбора пишем - Values.
>>А поле Values заполняем как хотим и когда хотим (только как
>>список/массив).
 
O

_OLSA_

Объясните, пожл.

Если у меня есть поле типа computed (Multiple Values), скажем - вес.
Можно ли отобразить его значения в столбце вьювера?
 
V

VZH

<!--QuoteBegin-_OLSA_+4:10:2005, 08:52 -->
<span class="vbquote">(_OLSA_ @ 4:10:2005, 08:52 )</span><!--QuoteEBegin-->Объясните, пожл.

Если у меня есть поле типа computed (Multiple Values), скажем - вес.
Можно ли отобразить его значения в столбце вьювера?
[snapback]25469" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

_OLSA_

<!--QuoteBegin-VZH+4:10:2005, 08:39 -->
<span class="vbquote">(VZH @ 4:10:2005, 08:39 )</span><!--QuoteEBegin-->Вы будете смеятся - да. Но, учитывайте что автоматически пересчитываться это поле будет только в момент рефреша формы (например при сохранении).
[snapback]25471" rel="nofollow" target="_blank[/snapback]​
[/quote]

Это понятно, а как если нет этого рефреша? Как нибудь из одной формы (где равчитывается этот вес на скрипте) можно ли вызвать обновление другой формы, где и отображается по полю computed эти значения?
 
V

VZH

<!--QuoteBegin-_OLSA_+4:10:2005, 09:57 -->
<span class="vbquote">(_OLSA_ @ 4:10:2005, 09:57 )</span><!--QuoteEBegin-->Это понятно, а как если нет этого рефреша? Как нибудь из одной формы (где равчитывается этот вес на скрипте) можно ли вызвать обновление другой формы, где и отображается по полю computed эти значения?
[snapback]25472" rel="nofollow" target="_blank[/snapback]​
[/quote]
Привет.

2 рабочих варианта -
1. Скрипт на QuerySave 1 формы -мгновенно отображение, но требуется доступ и медленно сохраняется
2. Агент по расписанию - работает в бэкграунде сервера, но требуется время на актуализацию.
 
O

_OLSA_

<!--QuoteBegin-VZH+4:10:2005, 09:01 -->
<span class="vbquote">(VZH @ 4:10:2005, 09:01 )</span><!--QuoteEBegin-->Привет.

2 рабочих варианта -
1. Скрипт на QuerySave 1 формы -мгновенно отображение, но требуется доступ и медленно сохраняется
2. Агент по расписанию - работает в бэкграунде сервера, но требуется время на актуализацию.
[snapback]25473" rel="nofollow" target="_blank[/snapback]​
[/quote]

По пункту 1:
нужно именно мгновенное отображение. Доступ по уровням в ACL?
Как программно вызвать обновление формы, можно идею?
 
V

VZH

<!--QuoteBegin-_OLSA_+4:10:2005, 10:28 -->
<span class="vbquote">(_OLSA_ @ 4:10:2005, 10:28 )</span><!--QuoteEBegin-->По пункту 1:
нужно именно мгновенное отображение. Доступ по уровням в ACL?
Как программно вызвать обновление формы, можно идею?
[snapback]25474" rel="nofollow" target="_blank[/snapback]​
[/quote]

У автора изменений формы1 должен быть авторский доступ к документу2.
на QuerySave пишется скрипт по поиску и изменению связанного документа.

документ по форму можно обновить через ComputeWithForm. или через @Command( [RefreshHideFormulas] )
 
Z

zigfrid

<!--QuoteBegin-Medevic+3:10:2005, 16:01 -->
<span class="vbquote">(Medevic @ 3:10:2005, 16:01 )</span><!--QuoteEBegin-->Для: zigfrid
Менять Selection Formula занятие не очень хорошее. Это могут делать только дизайнеры и администраторы базы. Имхо можно обойтись простыми функциями типа @DbColumn или @DbLookup. Это, конечно, если ты не преследуешь имеено цель смены формулы выбора.

Есть функция @Unique. Убирает дубликаты. Но тогда в Dialog List'е нужно сделать Use formula for choice. И значения отбирать через те же @DbColumn или @DbLookup.
[snapback]25443" rel="nofollow" target="_blank[/snapback]​
[/quote]

Всё!!!
Разобрался я с этими динамическим полями!
Большое спасибо за совет и помошь :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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