• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Решено Туплю или так и должно быть?

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Есть представление: первый столбец - "Дата", второй - "Наименование". В некоторых случаях "наименование" - multuvalue, в свойствах столбца стоит "show multiple values as separate entries". Визуально в представлении multivalue "наименования" видны как отдельные записи. При попытке выбрать записи (ViewEntryCollection) по дате и одному из "наименований" (ключ для поиска - массив Дата:Строка) из multivalue полей Lotus ничего не находит. Что-то с этим можно сделать?
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
О чём речь? Конечно же сортировка стоит. Если поле не multivalue, то поиск происходит корректно. Если multivalue, то нельзя найти по одному из значений, хотя они отображаются отдельно как separate entries. Ищу не документы, а ViewEntry. Казалось бы по теории должно работать...
 
S

Serduko

getViewEntry работает по индексу, может индекс не создан? Документы находит?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
искал нормально, но, правда, по диапазону (NotesDateTimeRange) дат (поле дат - мультивэлью)
 
A

anna

не знаю, относится ли к теме, если док - респонс, а вид - как иерархия, то мультивалюйное значение все равно в колонке идет через запятую. В нотесе вид хорошо выглядит?
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Не респонзы. В нотесе multivalue поля выглядят как разные "записи", во вьюхе отображаются в разных строках. Например: Документ 1 - поле "Дата" равно 01.01.2001, поле "наименование" равно "Первый", Документ 2 поле "Дата" равно 02.01.2001, поле "Наименование" равно "Второй:Третий" (multivalue). Во вьюхе вижу три строки. Поиск:
Код:
Dim dt As NotesDateTime
Dim nm As String
Dim view As NotesView
Dim vec As NotesViewEntryCollection
Dim key(1) As Variant
Set dt = New NotesDateTime("01.01.2001")
nm = "Первый"
Set key(0) = dt
key(1) = nm
Set vec = view.Getallentriesbykey(key, true)
находит первую запись.
Аналогичный поиск по ключу 02.01.2001 + "Второй" ничего не находит.

Ещё не попробовал в качестве второго параметра использовать массив из значений "Второй" + "Третий", не удивлюсь если найдёт вторую запись или сразу две.
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Попробовал. "Сложный" ключ из вложенного массива оно вообще не принимает, даже искать по такому не хочет.
Короче, эта штука в вьюхой работать не будет, надо искать альтернативное решение.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@garrick,
Код:
key(0) = dt.dateonly ' или key(0) = cdat(dt.dateonly)
key(1) = nm
Set vec = view.Getallentriesbykey(key, true)
Без объектов
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Короче суть проблемы такова: есть база с документами в которых указана дата окончания обработки (deadline) и подразделение, ответственное за обработку. Надо организовать рассылку по подразделениям со списками просроченных документов. По вьюхе отбираются документы по DateRange от вчера и ранее, которые и являются просроченными. Проблема в том, что у одного документа может быть сразу несколько ответственных подразделений (соответственно, multivalue поле) и отобрать во вьюхе сразу коллекцию просроченных документов по подразделению никак не получилось.
Решение
Создан Java-агент который отбирает просроченные документы и записывает их в базу Apache Derby, она же JavaDb в in-memory mode, т.е. на диск ничего не пишется, всё в оперативке. Попутно, в процессе обработки отобранных из вьюхи документов, для документов с несколькими подразделениями создаются дубликаты, таким образом, что в базе сохраняются несколько копий документов с одним ответственным подразделением для каждой копии (как-то завернул... надеюсь мысль понятна). После этого, имея справочник подразделений, просто последовательно селектим из этой базы документы по каждому подразделению, создаём соответствующий отчёт в Excel и отправляем его по почте.
Результат
примерно 350 подразделений, около 30 тыс. просроченных документов, на выходе около 250 отчётов. Затрачиваемое на всё это время примерно 3 минуты.

Проблема решена. Попутно были опробованы db40, ObjectDb, Berkeley Db, H2, Derby. Если кому про это интересно, могу рассказать отдельно.
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Внешняя БД - эт понятно и то же использую, в основном для отчетов. Однако данную задачу имхо можно и чисто на LS решить, если не используются сортировки итогов по произвольным элементам (дата\приоритет и т.п.) используя именованный массив. Все равно агент бегает по лотусовым докам).
P.S. сейчас тестирую в постгресе jsonb...
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@garrick, !!!!!
Если первый элемент ключа будет объект DateRange, то поиск работать не будет!!!!
Здесь было обсуждение на эту тему, все ключи в таком случае, кроме key(0) - игнорируются.
[DOUBLEPOST=1446121991,1446121913][/DOUBLEPOST]@garrick, h2 интересно, лежит ждет меня на компе. Хочу привязать к одной задачке.
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
@garrick, !!!!!
Если первый элемент ключа будет объект DateRange, то поиск работать не будет!!!!
Здесь было обсуждение на эту тему, все ключи в таком случае, кроме key(0) - игнорируются.
Вот же, блин! Чего я сразу не сказал-то про DateRange - столько времени зря угробил.
, h2 интересно, лежит ждет меня на компе. Хочу привязать к одной задачке.
Нормальная штука и как embedded и как сервер работает. Даже чуть-чуть быстрее чем Derby.
 
Мы в соцсетях:

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