Hallöchen,
ich bins mal wieder!
Sagt mal, kann man Variablen, die man unter Postopen inizalisiert hat, unter Querysave verwenden?
Wenn ja, wie macht man das?
Hallöchen,
ich bins mal wieder!
Sagt mal, kann man Variablen, die man unter Postopen inizalisiert hat, unter Querysave verwenden?
Wenn ja, wie macht man das?
Nein, aber wenn diese unter Declarations deklariert werden, kannst du diese im PostOpen beschreiben und im QuerySave wieder auslesen.
Gruß
Dirk
Hi,
Und ich ebenfalls wieder.
Jaein.
Nur wenn die Variablen an einer "globalen" Stelle definiert wurden
==> siehe z.B. Abschnitt (Declarations) einer Maske
Definierst du die Variablen im PostOpen mit
Dim Variablenname
kannst Du diese im QuerySave NICHT verwenden.
Andreas
Hey cool, gut zu wissen.
Was vermutet man als Spezi bei dieser Fehlermeldung:
Object variable not set
Du versuchst auf eine Variable, die ein Objekt enthalten soll, zuzugreifen, ohne dass diese ein entsprechendes Objekt enthaelt.
z.B.
Msgbox doc.GetItemValue("Feldname")(0)
ohne dass vorher doc mit Set als Objekt initialisiert wurde.
Hier hilft in den meisten Faellen der Debugger weiter.
Andreas
Ach man, ich verzeifel gleich. Daher hier
mein Quellcode (neues ist fett):
<b>'Declarations:
Dim speicher As String
Sub Postopen(Source As Notesuidocument)
Dim workspace As New NotesUIWorkspace
Set Source = workspace.CurrentDocument
If Source.Document.m02_Lieferantenname(0) <> "" Then
speicher = Source.Document.m02_Lieferantenname(0)
Else
speicher = "leer"
End If
End Sub</b>
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim workspace As New NotesUIWorkspace
Dim temp As String
Dim adresse As String
Dim super As Integer
<b>Dim s As New NotesSession
Dim agent As NotesAgent
Set agent = s.CurrentDatabase.GetAgent("Lieferantenname")</b>
Set Source = workspace.CurrentDocument
super = 0
If Source.Document.m02_Lieferantenname(0) = "" Then temp = "Lieferantenname" & Chr(13)
If Source.Document.m02_LieferantenEmail(0) = "" Then
temp = temp & "E-Mail" & Chr(13)
Else
adresse = Source.Document.m02_LieferantenEmail(0)
super = Instr(adresse, "@")
If super = 0 Then
Msgbox("Die E-Mail enthält kein @")
Continue = False
End If
End If
If temp >< "" And (adresse ="" Or super > 0) Then
temp = "Es sind folgende Pflichfelder nicht ausgefüllt:" & Chr(13) & temp
Msgbox(temp)
Continue = False
End If
<B>speicher <> source.Document.m02_Lieferantenname(0) And speicher <> "leer" Then
Call agent.run
End If</b>
End Sub
Und woran verzweifelst Du nun??
Ich verzweifel an dieser verdammten Fehlermeldung!
Dann nimm doch den Debugger...der zeigt Dir genau, an welcher Variablen es hapert.
Der debugger sagt, dass es hier sein soll:
<b>Call agent.run</b>
Aber ich mach doch:
<B>
Set agent = s.CurrentDatabase.GetAgent("Lieferantenname")
</b>
Hast Du Dich evtl. beim Namen des Agenten verschrieben??
Das ist schon richtig.
Aber ist agent zu diesem Zeitpunkt auch ein Objekt ?
Set ... reicht nicht aus.
Wenn der angegebene Agent nicht existiert, dann hast Du in agent auch kein Objekt.
In diesem Fall ist agent=Nothing
Andreas
Noch viel besser, ich hatte den Agenten noch nicht gespeichert
Oh man, wo hab ich nur mein Hirn
:roll: Na dann....:pint:
Hach ich muss noch soooooooo viel lernen
Ich bin grad dabei nen Agenten zu machen, der wenn ich den Lieferantennamen änder, diesen in allen Dokumenten der Ansicht Bestellungen ändert.
Das mach ich doch wieder mit NotesDocumentCollection, oder?
Aber wie bekomm ich da alle Dokumete der Ansicht rein???
Ach wie schön wär's, wenn man alles auf Anhieb könnte!
Aber dafür, dass es mein zweiter Tag Lotus Script ist, fühl ich mich schon ein bisschen gut
Dann mach doch keine Notesdocumentcollection, sondern gehe in der Ansicht vom ersten zum letzten Dokument.
ich würde es über eine Collection machen. Diese könnte mit getAllDocumentsbykey aufgebaut werden. Mit einem
Call notesDocumentCollection.StampAll( "FeldName", "Wert" )
kannst du alle Dokumente auf einen Schlag ändern. Ist performanter als eine Schleife über alle Dokumente in der Ansicht.
Gruß
Dirk