Работа с Notesviewnavigator

  • Автор темы Sasha*
  • Дата начала
S

Sasha*

#1
У меня есть представление с 4 колонками, например:
Страна, Город, Место отдыха, Название.
Все колонки категоризированы.

Если я знаю страну и город, как мне с помощью NotesViewNavigator получить все «места отдыха» в этом городе?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
NotesView.GetAllDocumentsByKey или notesView.GetAllEntriesByKey не пойдет ?
 

Omh

Lotus team
04.07.2007
2 210
1
#3
Только view раскатегоризовать.
Ну или сделать ещё одно.
 
S

Sasha*

#4
NotesView.GetAllDocumentsByKey или notesView.GetAllEntriesByKey не пойдет ?
Пробовала, не работает.
С помощью notesView.GetAllEntriesByKey если в качестве ключа беру значение из второй колонки, то возвращает коллекцию равную 0, что не правильно (документов с таким ключом намного больше).

GetAllDocumentsByKey не подходит, потому что потом придется работать с полями документа, что бы получить необходимые значения - а мне нужно не привязываться к полям.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#5
С помощью notesView.GetAllEntriesByKey если в качестве ключа беру значение из второй колонки, то возвращает коллекцию равную 0, что не правильно (документов с таким ключом намного больше).
В качестве ключа надо брать массив ключей из значений первой и второй колонок.
Например:
notesView.GetAllEntriesByKey(Split("Россия~Москва", "~"), True)
 

Omh

Lotus team
04.07.2007
2 210
1
#6
Medevic
Батенька, тебе действительно больше нравиться аррай получать из Split'a?
Проблем с этим не было?

Кмк, читабельнее задекларить array и юзать его...
Код:
Dim Keys(1) As String
Keys(0) = "Латвиджа"
Keys(1) = "Рига"
notesView.GetAllEntriesByKey(Keys, True)
 

Omh

Lotus team
04.07.2007
2 210
1
#8
Для Medevic

Я нарывлся на такое, что, например
Код:
Forall x in Split("1~2~3~4~5~", "~")
не работал

В то время, как
Код:
Dim V As Variant
V = Split("1~2~3~4~5~", "~")
Forall x in V
работал, как надо.

Я слегка струхул и решил в одну строчку громоздкие конструкции не юзать :)
Лучше расписать по составным частям...
 
A

Alexander (Criz)

#9
Как вариант делать составную категорию в первой колонке, например Field1+ "~"+ Field2.
И искать только по одному текстовому параметру.
 

lionk

Well-known member
05.04.2007
310
2
#11
GetAllDocumentsByKey не подходит, потому что потом придется работать с полями документа, что бы получить необходимые значения - а мне нужно не привязываться к полям.
у документа есть свойство valueArray = notesDocument.ColumnValues - которое представляет значение колонок єтого документа в виде, тоесть notesDocument.ColumnValues(0) - первая колонка и т.д

а для того чтобы получить под-под-категорию через вю навигатор нужно руками в цыкле переберать вид, но это на базах в 5 000 доков будет ацки долго. вобще перебор по навигатору почемуто медленее чем перебор по колекции доков.
 

Omh

Lotus team
04.07.2007
2 210
1
#13
lionk
Стремуюсь использовать ColumnValues: мало-ли кому придёт в голову чё-то модифицировать во view.
Да и не прозрачно это: видишь что юзается ColumnValues: наждо лезть во view, отсчитывать колонку (какой там base 0 или 1?) и т.д.

Я вообще я не признаю ф-ии/процедуры, которые работают с данными ui-объектов (в приципе, колонка тоже не совсем backgroung объект).
Кмк, гораздо стабильнее взять нужный док и ф-ей из него получить то, что тебе надо, не используя ColumnValues, которая ко всему прочему возвращает такую шнягу, как Array of variants :blink:
 

Omh

Lotus team
04.07.2007
2 210
1
#15
Я ждал, я ждал, что кто-то поддержит :eek:

Просто после того, как перелопатишь n-ное кол-во баз со всякими ColumnValues, логике на C/CFD полях и прочим, как я называю, олдскулом, вырабатываеться привычка писать гогнозащищённый код.

Т.е. надо будет что-то исполнить на бэкграунде, ты берёшь ф-ию из биб-ки и выполняешь.
И тебе пофик, ты в UI документе, в агенте или в кнопке во view.
Ты выполняешь логику, которая должна быть централизована.

А не эта хрень с CFD полями, или чудо ф-ии с входными парметрами uidoc, ItemName и ещё какое-нить гогно :)

Тьфу.
 
S

Sasha*

#16
У меня есть представление с 4 колонками, например:
Страна, Город, Место отдыха, Название.
Все колонки категоризированы.

Если я знаю страну и город, как мне с помощью NotesViewNavigator получить все «места отдыха» в этом городе?
Я сделала следующим образом :
Код:
 //keys- массив ключей
Set entry = view.GetEntryByKey( keys, True )
Set nav = view.CreateViewNavFrom( entry )
...............
While Not(entry Is Nothing)
strValue = entry.ColumnValues( i + 1 )
...................................
...................................
Set entry = nav.GetNextCategory(entry)
Wend
Пока все колонки категоризированные все работает как нужно.
Сейчас столкнулась со следующей проблемой: Если последняя колонка без категории то я могу взять только ее первое значение, т.е я выбираю: страна - Россия, Город –Сочи, Место отдыха – музей, и из последней колонки необходимо получить все названия музеев, то я получаю только первое название.

Подскажите, пожалуйста, как получить все названия?
 

Omh

Lotus team
04.07.2007
2 210
1
#17
Array из 3 элеменов + GetAllDocumentsByKey
Раскатегоризуй view, я тебе точно говорю.
А то я уже предчувствую следующий вопрос :eek: денька эдак через 2...
 
S

Sandr

#18
Я ждал, я ждал, что кто-то поддержит :eek:

Просто после того, как перелопатишь n-ное кол-во баз со всякими ColumnValues, логике на C/CFD полях и прочим, как я называю, олдскулом, вырабатываеться привычка писать гогнозащищённый код.

Т.е. надо будет что-то исполнить на бэкграунде, ты берёшь ф-ию из биб-ки и выполняешь.
И тебе пофик, ты в UI документе, в агенте или в кнопке во view.
Ты выполняешь логику, которая должна быть централизована.

А не эта хрень с CFD полями, или чудо ф-ии с входными парметрами uidoc, ItemName и ещё какое-нить гогно :)

Тьфу.
Я к этой практике пришел кода запарило писать отдельно для ВЕБа и отдельно для толстого клиента..
Стараюсь писать так, что бы и в ВЕБе и в толстом клиенте можно было юзать...