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

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

  1. fvoice

    fvoice Гость

    Function GetDoc(UN as string) as NotesDocument
    Dim doc As NotesDocument
    ...........
    Set GetDoc = doc
    ExitFunction
    - лежит в библиотеке

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

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

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--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 Гость

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

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

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

    fvoice Гость

    Код (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 Гость

    <!--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 Гость

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

    Mihal Гость

    <!--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 Гость

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

    redbestcat Гость

    Для: fvoice

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

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

    fvoice Гость

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

    redbestcat Гость

    Для: fvoice

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

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

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

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