• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

garrick

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

garrick

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

Serduko

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

lmike

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

anna

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

garrick

Lotus Team
26.10.2009
1 351
151
BIT
187
Не респонзы. В нотесе 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 351
151
BIT
187
Попробовал. "Сложный" ключ из вложенного массива оно вообще не принимает, даже искать по такому не хочет.
Короче, эта штука в вьюхой работать не будет, надо искать альтернативное решение.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
@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 351
151
BIT
187
Короче суть проблемы такова: есть база с документами в которых указана дата окончания обработки (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
179
@garrick, !!!!!
Если первый элемент ключа будет объект DateRange, то поиск работать не будет!!!!
Здесь было обсуждение на эту тему, все ключи в таком случае, кроме key(0) - игнорируются.
[DOUBLEPOST=1446121991,1446121913][/DOUBLEPOST]@garrick, h2 интересно, лежит ждет меня на компе. Хочу привязать к одной задачке.
 

garrick

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

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