Hallo Leute,
ich hab gerade eben was Probiert, sieht ungefähr so aus:
Funktion get_doc() as NotesDocument
...BLABLA...
Dim vw As NotesView
...View holen usw, usw...
'DokumentObjekt zurückgeben
Set get_doc = vw.GetFirstDocument
End Function
Nutzen wollte ich das ganze dann wiefolgt:
....BLABLABLA....
Dim doc As NotesDocument
...BLABLABLA....
Set doc = get_doc()
Funktioniert leider nicht. Ihr werdet mir bestimmt auch sofort sagen können warum ;) Ich würde die Sache sehr toll finden, da ich bisher immer nur Integers, Strings und weis der Geier was zurückgegeben habe, und docObjects immer nur per ÜbergabeWert verändert // gesetzt habe.
Ich wär echt glücklich wenn das so auf die Art und Weise irgendwie Funktionieren könnte..
mfg Samuel
Edit: Der Debugger zeigt mir in der get_doc() Funktion am Ende an dass er get_doc auf das Dokument gesetzt hat. Das scheint also zu Funktionieren. Ich kriege dann nur das "doc"Objekt im unteren Code nicht gesetzt... :'(
Also doch mit ÜbergabeObjekt.. neiiin! Schrecklich! Ich wollte das nutzen um ein KonfigurationsDokument aus einer externen DB zu laden. Da spar ich mir ja nicht viel wenn ich das über diese Methode löse... :'(
Dann wär aber das noch das schlauste:
Dim tmpdoc As NotesDocument
Call get_doc(tmpdoc)
Function get_doc(tmpdoc As NotesDocument)
....
Dim vw As NotesView
....
Set doc = vw.GetFirstDocument
Nur blöd dass "tmpdoc" immer "tmpdoc" heißen muss... :'(
Also dieser kleine Code tut bei mir genau das gewuenschte.
Sub Initialize
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = ses.CurrentDatabase
If db.IsOpen Then
Call GetDoc(doc)
If doc Is Nothing Then Msgbox "Nothing" Else Msgbox "immer noch da"
End If
End Sub
Sub GetDoc(doc As NotesDocument)
Dim s As New NotesSession
Dim db1 As NotesDatabase
Dim vw As NotesView
Set db1 = s.CurrentDatabase
If db1.isopen Then
Set vw = db1.GetView("alldoc")
If Not (vw Is Nothing) Then
Set doc = vw.GetFirstDocument
End If
End If
End Sub
Andreas
Hallo Andreas,
die Methode habe ich ja bereits gepostet. Leider mit nur mäßigem Erfolg.
In der Call Funktion, befinde ich mich in DB-1. Das Configdoc liegt allerdings in DB-2.
mit "Call get_doc(doc)" übergebe ich ein leeres Dokument (nur Deklariert noch nicht initialisiert). Dieses setze ich dann in der "get_doc()" Funktion.
"get_doc" Intern funktioniert das, das "doc" bleibt in der Call Funktion aber trozdem un-initialisiert. Ich kapier das nicht.
hierzu mal ein wenig Code:
Function environment_get_config_doc(sdo As NotesDocument)
'Funktion holt das Stammdaten-Dokument und giebt es zurück
'Dimentions festlegen
Dim s As New NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
'DB//VW initialisieren
Set db = s.GetDatabase(environment_constants(1), environment_constants(2), False)
Set vw = db.GetView(environment_constants(3))
'Dokument-Objekt zuweisen
Set sdo = vw.GetFirstDocument
End Function
Aufgerufen wird das ganze in dieser Funktion:
Function environment_get_config_doc_value(itn As String, ca As Integer) As String
%REM
Funktion giebt den geforderten Feldwert aus den Stammdaten zurück
itn => ItemName
ca => Case (im itn)
%END REM
'Dimentions festlegen
Dim sdo As NotesDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
'Konfigurationsdokument holen // initialisieren
Call environment_get_config_doc(sdo)
'Wert ausgeben
environment_get_config_doc_value = sdo.GetItemValue(itn)(ca)
End Function
Mein Call bewirkt NULL. Da wird nichts initialisiert... :-:
Wo ist der Fehler?!
Samuel, das geht ganz einfach auch ohne Verrenkungen und zig Objekten, die auch "aussen" vorhanden sein müssen.
Ein Beispiel:
Set docTRConfigSetup = GetSetupDocumentFromOtherDB (True, dbTRConfig, "ConfigDBReplicaID", "Global Setup", "TRConfig", szErrorMessage)
docTRConfigSetup sei als Objekt vorgesehen für das Setup-Dokument der "fremden" Datenbank "TRConfig".
Die Parameter der Routine GetSetupDocumentFromOtherDB sind bis auf einen - siehe unten - der internen Verwaltung geschuldet:
' Purpose: Retrieves a named Setup document from another database
'------------------------------------------------------------------------------------------------------------------------------------------------------------
' Arguments:
' bIsInteractive - True if called from the frontend, False otherwise
' dbOther - NotesDatabase object to be returned by reference because the Setup document is a "child" of dbOther
' szItemReplicaID - The item name in the own Setup document which contains the ReplicaID of the other database
' szSetupName - The type name of the Setup document to retrieve in the other database
' szDBTitle - The title of the other database (for possible frontend error messages)
' szErrorMessage - Used to return possible error messages by reference
"Kriegsentscheidend" ist also nur das Objekt "dbOther", welches vorgesehen ist für den "Vater" des Kindes "Setup-Dokument in dbOther" (wie Markus schon schrieb: Objektorientiert denken!)
Was dbOther übergeben wird, ist wurscht - Hauptsache, es ist wirklich ein NotesDatabase object.
Vor dem Aufruf der Function steht daher:
Dim dbIrgendeinName As New NotesDatabase ("", "").
Das "New Database" könnte aber auch innerhalb der Function gesetzt werden.
Ich hoffe, ich habe damit das Verfahren zum Umgang mit Vererbung und deren Übertragung halbwegs verständlich herüberbringen können.
Bernhard