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

  • Автор темы fvoice
  • Дата начала
F

fvoice

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

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

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

morpheus

скриптописец
07.08.2006
3 915
1
#2
<!--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]
да канечно, если в ф-ции привязка на тек. БД

кода та не видно!
 
M

Mihal

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

morpheus

скриптописец
07.08.2006
3 915
1
#4
Для: Mihal
да тоже может быть, убиваете базу - пропадает привзяка на документ
 
F

fvoice

#5
кода та не видно!
Код:
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
Выход - протаскивать объект DB через функцию
выходит не получиться?
 
M

Mihal

#6
<!--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]

Вот тут корень! Зрим в корень!
 
F

fvoice

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

Mihal

#8
<!--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.
 
R

redbestcat

#10
Для: fvoice

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

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

fvoice

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

redbestcat

#12
Для: fvoice

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

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

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