Hallo Notes Community
Ich habe folgendes Problem. Eine Klasse besitzt die Methode "getfieldItemByObjectID" welche als NotesItem deklariert ist, also ein NotesItem als Rückgabewert zurückgeben soll.
Wenn ich im Debugger durchlaufe, dann sehe ich, dass das NotesItem gefunden und dem Rückgabewert der Function "getFieldItemByObjectID" zugewiesen wird.
Die Methode:
Public Function getFieldItemByObjectID(strObjectID As String, strObjectName As String, strItemName As String) As NotesItem
'-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'returns item of an object by objectID
'
'arguments:
'-strObjectID: unique key of that object
'-strObjectName: name of the object, i.e. "BusinessProcess", "SpecificRisk"
'-strItemName: name of the item you want
'-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim view As NotesView
Dim doc As NotesDocument
Set view = m_dbCurrent.GetView("lu" + Trim(strObjectName) + "ByID")
Set doc = view.GetDocumentByKey(strObjectID, True)
If Not(doc Is Nothing) Then
Set getFieldItemByObjectID = doc.GetFirstItem(strItemName)
End If
End Function
Sobald der Debugger dann aus der Methode rausspringt und ich in der Sub bin (ausserhalb der Klasse), wo der Wert Rückgabewert der Methode meiner Variablen "itemBusinessCycleID" zugewiesen bzw. die Klasse wird gibt die Methode nichts mehr zurück, bzw. das NotesItem ist nicht instantiiert.
Das Codefragment, wo ich die Methode der Klasse ("GKeywords") aufrufe:
'get related BusinessCycleID's
Set itemBusinessCycleID = GKeywords.getFieldItemByObjectID(docSpecificRisk.BusinessProcessID(0), "BusinessProcess", "BusinessCycleID")
Hat jemand von euch eine Idee, woran es liegen könnte? Die Methode is ja als "Public" deklariert und eine Function kann ja prinzipell ein NotesItem zurückgeben. Ich habe eine andere Methode in der gleichen Klasse, welche ein "NotesDocument" zurückgeben soll. Diese funktionieren einwandfrei.
Gruss und besten Dank für jede Unterstützung.
Ray
Das Problem ist gelöst! Ein NotesItem benötigt ein zugehöriges NotesDocument.
Da der Scope des Dokuments (doc) auf die Methode "getFieldItemByObjectID" limitiert war, war auch das NotesItem "ausserhalb" der Methode nicht mehr vorhanden. Die Lösung war, das NotesDocument zumindest als Private Membervariable der Klasse zu definieren.
Das heisst also, erstellt mein ein NotesItem neu und setzt das zugehörige NotesDocument auf "Nothing", dann ist auch das NotesItem "Nothing". Genau so verhält es sich, wie mit diesem Code getestet werden kann.
Sub Initialize
Dim session As NotesSession
Dim db As notesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set session = New NotesSession
Set db = session.CurrentDatabase
Set doc = db.CreateDocument
Set item = New NotesItem(doc, "Test", "TEST")
Stop
Set doc = Nothing
Print item.values(0) 'object variable not set because doc is not available anymore!
End Sub
Gruss
Ray
Hallo Thomas
aber für die Abhängikeit DB -> NotesDocument kann ich ja folgendes tun. Ein NotesDocument in einer DB erstellen, dann setze ich db = Nothing, habe aber das Dokument immer noch. Wie im untenstehenden Code:
Sub Initialize
Dim session As NotesSession
Dim db As notesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set session = New NotesSession
Set db = session.CurrentDatabase
Set doc = db.CreateDocument
Set db = Nothing 'set db to nothing, but doc remains?
If Not(doc Is Nothing) Then Print "doc is something"
End Sub
Mir scheint bei einem NotesItem eine stärkere Abhängigkeit zum NotesDocument zu bestehen. Ist ja eigentlich auch logisch, da ich beim Erstellen eines neuen Items ein gültiges NotesDocumetn angeben muss.
Wie auch immer, besten Dank nochmals.
Gruss
Ray