Метод Getalldocumentsbykey

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

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Пытаюсь получить коллекцию документов из представления (ппервый и второй столбцы отсортированы) следущим способом:
    Код (Text):
    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

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

    dimat Lotus team
    Lotus team

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

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

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

    dimat Lotus team
    Lotus team

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

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

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

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

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

    dimat Lotus team
    Lotus team

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

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

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

    dimat Lotus team
    Lotus team

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

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

    divankin Senjor developer

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

    dimat Lotus team
    Lotus team

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

    Akupaka А че я?.. О.о

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

    Код (Text):
    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 Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Код (Text):
    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 Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    С помощью метода GetAllDocumentsBykey не все документы попадают в коллекцию:
    Код (Text):
    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

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

    dimat Lotus team
    Lotus team

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

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

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

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

    dimat Lotus team
    Lotus team

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

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

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

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