Функция не возвращает Notesdocument из другой БД

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

  1. fvoice

    fvoice Гость

    Репутация:
    0
    Function GetDoc(UN as string) as NotesDocument
    Dim doc As NotesDocument
    ...........
    Set GetDoc = doc
    ExitFunction
    - лежит в библиотеке

    при вызове возвращает Nothing... так должно быть? могут ли функции возвращать указатели на обьекты?

    не знаю критично или нет, doc находится в другой БД
     
  2. morpheus

    morpheus скриптописец

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.920
    Симпатии:
    1
    <!--QuoteBegin-fvoice+5:10:2007, 12:56 -->
    <span class="vbquote">(fvoice @ 5:10:2007, 12:56 )</span><!--QuoteEBegin-->могут ли функции возвращать указатели на обьекты?
    [snapback]80754" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    да, могут

    <!--QuoteBegin-fvoice+5:10:2007, 12:56 -->
    <span class="vbquote">(fvoice @ 5:10:2007, 12:56 )</span><!--QuoteEBegin-->не знаю критично или нет, doc находится в другой БД
    [snapback]80754" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    да канечно, если в ф-ции привязка на тек. БД

    кода та не видно!
     
  3. Mihal

    Mihal Гость

    Репутация:
    0
    Если документ из другой БД и ПОСЛЕ вызова из функции нету объекта той БД, то NotesDOcument волшебным образом превращается в Nothing. Выход - протаскивать объект DB через функцию. То есть пропсывать Function GetDoc(UN as string, DB As NotesDatabase) as NotesDocument.
     
  4. morpheus

    morpheus скриптописец

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.920
    Симпатии:
    1
    Для: Mihal
    да тоже может быть, убиваете базу - пропадает привзяка на документ
     
  5. fvoice

    fvoice Гость

    Репутация:
    0
    Код (Text):
    Function MyGetMainDoc(UN As String) As NotesDocument

    Dim ws As New NotesUIWorkspace
    Dim parent As NotesDocument
    Dim db As New NotesDatabase("","")
    Dim view As NotesView

    On Error Goto Errhandle

    If Not db.OpenWithFailover( MyGetServer("DBDocs"),MyGetDB("DBDocs")) Then
    Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
    Exit Function
    End If
    Set view = db.GetView("($UN)")
    Set parent = view.GetDocumentByKey(UN)

    If Not (parent Is Nothing) Then
    Set MyGetMainDoc = parent
    Else
    If Not db.OpenWithFailover( MyGetServer("DBArchive"),MyGetDB("DBArchive")) Then
    Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
    Exit Function
    End If
    Set view = db.GetView("($UN)")
    Set parent = view.GetDocumentByKey(UN)

    If Not (parent Is Nothing) Then
    Set MyGetMainDoc = parent
    Else
    If Not db.OpenWithFailover(MyGetServer("DBTrash"),MyGetDB("DBTrash")) Then
    Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
    Exit Function
    End If
    Set view = db.GetView("($UN)")
    Set parent = view.GetDocumentByKey(UN)

    If Not (parent Is Nothing) Then
    Set MyGetMainDoc = parent
    Else
    Set MyGetMainDoc = Nothing
    End If
    End If
    End If

    Exit Function
    Errhandle: 
    Messagebox "Error on MyGetMainDoc" & Str(Err) & ": " & Error$+"on line" & Cstr(Erl)
    Exit Function

    End Function
    выходит не получиться?
     
  6. Mihal

    Mihal Гость

    Репутация:
    0
    <!--QuoteBegin-Mihal+5:10:2007, 13:04 -->
    <span class="vbquote">(Mihal @ 5:10:2007, 13:04 )</span><!--QuoteEBegin-->Если документ из другой БД и ПОСЛЕ вызова из функции нету объекта той БД, то NotesDOcument волшебным образом превращается в Nothing. Выход - протаскивать объект DB через функцию. То есть пропсывать Function GetDoc(UN as string, DB As NotesDatabase) as NotesDocument.
    [snapback]80760" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Вот тут корень! Зрим в корень!
     
  7. fvoice

    fvoice Гость

    Репутация:
    0
    дык.. Откройте мне глаза пожалуйста, как мне засунуть в функцию обьект БД, если заранее не знаю в какой БД документ лежит? :lol:
     
  8. Mihal

    Mihal Гость

    Репутация:
    0
    <!--QuoteBegin-fvoice+5:10:2007, 13:43 -->
    <span class="vbquote">(fvoice @ 5:10:2007, 13:43 )</span><!--QuoteEBegin-->дык.. Откройте мне глаза пожалуйста, как мне засунуть в функцию обьект БД, если заранее не знаю в какой БД документ лежит?
    [snapback]80777" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Function MyGetMainDoc(UN As String, DB As NotesDatabase) As NotesDocument

    А в самой функции объявление db выкинь нафиг. Делаешь объект Notesdatabase снаружи, потом передаёшь его в функцию - и усё! Переменные-оюъекты передаются по ссылке, после отработки функции будешь иметь свой db.
     
  9. fvoice

    fvoice Гость

    Репутация:
    0
    Для: Mihal
    Хитрый ход конем! :lol:
    Сенкс!
     
  10. redbestcat

    redbestcat Гость

    Репутация:
    0
    Для: fvoice

    а что собираешсь потом с этим документом делать?

    Открывать в UI? изменять в нем что-то? просто читать из него информацию?
     
  11. fvoice

    fvoice Гость

    Репутация:
    0
    Для: redbestcat
    у меня была процедурка MyOpenMainDoc(UN as string) которая открывала документ, появилась необходимость просто получать объект, что бы просто читать с него поля... запнулся.. помогли добрые люди!
     
  12. redbestcat

    redbestcat Гость

    Репутация:
    0
    Для: fvoice

    Если просто читать, то будет идейка. Конечно минусов много, и она сложнее выше предложенной, но може т в ней что-то для себя найдешь.

    В процедуре:
    1. Нашел нужный док
    2. Создал новый док в текущей базе
    3. Скопировал все итемы с найденного дока в новый
    4. Вернул новый док

    Дальше его просто не сохраняешь.
     
Загрузка...

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