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

Тема в разделе "Lotus - Программирование", создана пользователем garrick, 28 окт 2015.

  1. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Есть представление: первый столбец - "Дата", второй - "Наименование". В некоторых случаях "наименование" - multuvalue, в свойствах столбца стоит "show multiple values as separate entries". Визуально в представлении multivalue "наименования" видны как отдельные записи. При попытке выбрать записи (ViewEntryCollection) по дате и одному из "наименований" (ключ для поиска - массив Дата:Строка) из multivalue полей Lotus ничего не находит. Что-то с этим можно сделать?
     
  2. Serduko

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    Поставь сортировку колонок
     
  3. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    О чём речь? Конечно же сортировка стоит. Если поле не multivalue, то поиск происходит корректно. Если multivalue, то нельзя найти по одному из значений, хотя они отображаются отдельно как separate entries. Ищу не документы, а ViewEntry. Казалось бы по теории должно работать...
     
  4. Serduko

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    getViewEntry работает по индексу, может индекс не создан? Документы находит?
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    искал нормально, но, правда, по диапазону (NotesDateTimeRange) дат (поле дат - мультивэлью)
     
  6. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
     
  7. anna

    anna Lotus team
    Lotus team

    Регистрация:
    3 июн 2014
    Сообщения:
    304
    Симпатии:
    8
    не знаю, относится ли к теме, если док - респонс, а вид - как иерархия, то мультивалюйное значение все равно в колонке идет через запятую. В нотесе вид хорошо выглядит?
     
  8. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Не респонзы. В нотесе multivalue поля выглядят как разные "записи", во вьюхе отображаются в разных строках. Например: Документ 1 - поле "Дата" равно 01.01.2001, поле "наименование" равно "Первый", Документ 2 поле "Дата" равно 02.01.2001, поле "Наименование" равно "Второй:Третий" (multivalue). Во вьюхе вижу три строки. Поиск:
    Код (Text):

    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 + "Второй" ничего не находит.

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

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Попробовал. "Сложный" ключ из вложенного массива оно вообще не принимает, даже искать по такому не хочет.
    Короче, эта штука в вьюхой работать не будет, надо искать альтернативное решение.
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    @garrick,
    Код (Text):
    key(0) = dt.dateonly ' или key(0) = cdat(dt.dateonly)
    key(1) = nm
    Set vec = view.Getallentriesbykey(key, true)
    Без объектов
     
  11. Serduko

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    Лучше уж key(0) = dt.Lslocaltime
     
  12. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Ну, если по честному, там вообще DateRange должно быть.
     
  13. garrick

    garrick Lotus team
    Lotus team

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

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

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Внешняя БД - эт понятно и то же использую, в основном для отчетов. Однако данную задачу имхо можно и чисто на LS решить, если не используются сортировки итогов по произвольным элементам (дата\приоритет и т.п.) используя именованный массив. Все равно агент бегает по лотусовым докам).
    P.S. сейчас тестирую в постгресе jsonb...
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    @garrick, !!!!!
    Если первый элемент ключа будет объект DateRange, то поиск работать не будет!!!!
    Здесь было обсуждение на эту тему, все ключи в таком случае, кроме key(0) - игнорируются.
    [DOUBLEPOST=1446121991,1446121913][/DOUBLEPOST]@garrick, h2 интересно, лежит ждет меня на компе. Хочу привязать к одной задачке.
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
  17. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    Вот же, блин! Чего я сразу не сказал-то про DateRange - столько времени зря угробил.
    Нормальная штука и как embedded и как сервер работает. Даже чуть-чуть быстрее чем Derby.
     
  18. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Хуже. То работает, то - нет. Зависит от конкретных значений ключей и ещё Бог зна чего :(
     
Загрузка...

Поделиться этой страницей