Метод Getalldocumentsbykey

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 6 авг 2009.

  1. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Всем привет!
    Пытаюсь получить коллекцию документов из представления (ппервый и второй столбцы отсортированы) следущим способом:
    Код:
    Dim ns As New NotesSession
    Dim db As NotesDatabase
    Dim view as notesview
    Dim keys(1) As String
    Dim dc As NotesDocumentCollection
    keys(0)=Today
    keys(1)="Петров Петр Петрович"
    Set db=ns.CurrentDatabase
    Set view=db.GetView("Демо")
    Set dc=views.GetAllDocumentsByKey(keys,False)
    После выполнения возвращает пустую коллекцию, хотя документы с указаными ключами в представлении есть....
    В чем ошибка?
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Скорее всего с типами. Ты дату передаешь как строку. В первом столбце она тоже как строка?
     
  3. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Скорее всего в этом проблема, в 1ом столбце она Дата, ну по крайней мере в документе это поле типа Дата, но как сделать массив с элементами разных типов (в данном случае Дата и строка)? Или есть еще какие то способы?
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Dim keys(1) As Variant
     
  5. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Medevic Спасибо, помогло <_<
     
  6. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    ужас представить себе не могу чтобы использовали ключи типа дата
    зачем такой подход?
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А что в этом такого? :unsure:
     
  8. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Еще вопрос: Возможно ли с помощью указаного метода сформировать коллекцию по диапазону дат? например 02,02,2009-07,02,2009
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Можно. NotesDateRange в качестве ключа.
     
  10. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Код выполняется по нажатию кнопки на форме:

    Код:
    Dim period As NotesDateRange
    Set period=ns.CreateDateRange
    Set period.StartDateTime=startdate
    Set period.EndDateTime=enddate
    startdate и enddate это поля на форме с типом дата/время.
    в процессе выполнения вот на этих строчках:
    Код:
    Set period.StartDateTime=startdate
    Set period.EndDateTime=enddate
    ошибка "Type mismatch" (Несоответствие типов).
     
  11. divankin

    divankin Senjor developer

    Репутация:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Там же написано - ошибка в несоответствии типов.
    NotesDateRange.StartDateTime типа NotesDateTime, а в поле типа дата значение будет Variant of type Date
    Надо создавать новый объект NotesDateTime, присваивать ему дату через LSLocalTime, затем обрубать время SetAnyTime.
     
  12. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Divankin, спасибо, впринципе все понятно, но мог бы ты на примере показать?
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    можно использовать свойство NotesItem.DateTimeValue
    или notesDocument.GetItemValueDateTimeArray( itemName$ )

    Код:
    Set period.StartDateTime = doc.GetFirstItem("startdate").DateTimeValue
    Set period.EndDateTime = doc.GetFirstItem("enddate").DateTimeValue
    
    Set period.StartDateTime = doc.GetItemValueDateTimeArray("startdate")(0)
    Set period.EndDateTime = doc.GetItemValueDateTimeArray("enddate")(0)
     
  14. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Код:
    dim period as notesdaterange
    dim sf as string
    dim db as notesdatabase
    sf=|Form="formdemo" & formdatedemo=period|
    db.search(sf,nothing,0)
    formdatedemo=period вот здесь как правильно?

    Как в строке запроса Метода Search прописать условие чтоб поле с типом дата соответствовало указаному интервалу дат?
    т.е. в данном случае это поле formdatedemo, а period это переменная типа NotesDateRange
     
  15. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    С помощью метода GetAllDocumentsBykey не все документы попадают в коллекцию:
    Код:
    Dim keys(1) as Variant
    Dim dcdemo as NotesDocumentCollection
    Dim period as NotesDateRange
    Dim vdemo=db.getview("Неделя")
    set keys(0)=period
    keys(1)="Петров Иван Иванович"
    Set dcdemo=vdemo.GetAllDocumentsByKey(keys,true)
    После выполнения dc.count=2, хотя в представлении "Неделя"(первый и второй столбцы отсортированы), указаным ключам удовлетворют больше документов.

    Какие могут быть причины?
    Или какие есть способы поиска документов по указаным ключам?
     
  16. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.361
    Симпатии:
    335
  17. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Указаный метод не подхоит ;) . т.к. он позволяет искать документы только по 1 ключу. Есть еще какие нибудь варианты?

    Можно по подробней на этом месте
     
  18. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.361
    Симпатии:
    335
    идут массовые изменения во вьшке, а она большая, переиндексаци занимает опред. время, а в этот момент потупает запрос на поиск по ключу...
    по дайжесту - никто не мешает обединить два критерия
     
  19. dimat

    dimat Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    31 июл 2008
    Сообщения:
    516
    Симпатии:
    0
    Как? as Variant?
     
  20. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.361
    Симпатии:
    335
    зачем - в текст и контектация
     
Загрузка...

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