Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mh70220 am 24.07.06 - 10:14:22
-
Hallo zusammen,
ich habe mir ein Script geschrieben, welches alle Dokument aus meiner DB suchen soll, die einer Abteilung angehören und dann soll es bei allen Dokumenten ein Feld ändern. wenn ich es ausführe, dann bekomme ich immer die Fehlermeldung: Object variable not set.
Kann mal jemand drüber schauen und vielleicht den Fehler finden.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim Teileinheit As String
Dim Vorgesetzter As String
Teileinheit = uidoc.FieldGetText("TEListe")
Vorgesetzter = uidoc.FieldGetText("NeuerVorgesetzter")
searchFormula$ = {Form = "PersView" & "PTeileinheit" = Teileinheit}
Set db = session.CurrentDatabase
Set collection = db.Search(searchFormula$, Nothing,0)
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.ReplaceItemValue("PVorgesetzter", Vorgesetzter)
Call doc.Save( True, False )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
PTeileinheit ist das Feld in den Dokumenten welches gleich der Variable Teileinheit sein soll.
Matthias
-
Ein Errorhandle wäre nicht schlecht, dann bekommst Du die Info wo es nicht klappt.
André
-
Warscheinlich bekommst du keine Collection bzw. eine Collection mit Count = 0 zurück. weil deine SearchFormula nicht stimmt. Die müsste vermutlich so lauten:
searchFormula$ = {Form = "PersView" & Pteileinheit = "} & teileinheit & {"}
Weil so wie du das geschrieben hast baut er nämlich ziemlichen Unsinn zusammen.
Aber wie wäre es wenn du einfach mal den Debugger einschaltest und dann etwas genauer hinschaust an welcher Stelle das hakt.
-
Hmm... ich sehe da keinen Fehler.
In welcher Zeile tritt die Meldung denn auf? Könnte es sein, dass er keine Dokumente findet und die Collection leer ist?
Tipp: Im Eigenschaftsfenster vom "Programmer's Pane" aktiviere das Häkchen "Automatically add <<Option Declare>>". Und füge diese Anweisung in diesem Script auch noch ein.
Dann musst du anschliessend "searchFormula" korrekt deklarieren und der Compiler macht dich auf vergessene Deklarationen aufmerksam.
Grüsse
Moritz
EDIT: In diesem Forum werden eindeutig zu viele Antworten zu schnell gegeben ;D
-
http://atnotes.de/index.php?topic=11980.0
-
Der arme Matthias 8)
Reactmin = 6 Min
Reactrange = 2 Min
Reactcount = 4 Ans
Reactqual = 1
Problsolved = ((Reactmin + Reactrange) / Reactcount) * Reactqual
Und das Ergebnis ist dann ein Haufen zu lesen und zu verarbeiten, damit er es in Zukunft besser machen kann. Nicht schlecht meine Herren.
-
Du hast nirgends die Variable uidoc initialisiert.
Erweitere mal deinen Code um die fettgedruckten Zeilen.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim Teileinheit As String
Dim Vorgesetzter As String
Set uidoc = workspace.CurrentDocument
Teileinheit = uidoc.FieldGetText("TEListe")
Vorgesetzter = uidoc.FieldGetText("NeuerVorgesetzter")
searchFormula$ = {Form = "PersView" & "PTeileinheit" = Teileinheit}
....
Das hättest du aber auch mit dem Debugger finden können.
Axel
-
Mist hab ich übersehen >:(
Dann sind da zwei Fehler drin.
-
@alex
Ja, den fehler hab ich dann auch gefunden, nachdem ich das ganze in einem normalen Dokument ausgeführt habe und nicht als Popup window, denn da reagiert der Debugger nicht.
Nun habe ich das Problem, das im Bereich "searchFormula$" nicht wirklich was brauchbares rauskommt. Hab das ganze dann umgeschrieben, das er erst mall alle dokumente nimmt und dann ging das da auch.
Jetzt habe ich nur noch ein Problem.
Wie kann ich eine Variable typ String und eine Variable Typ Variant mit einander vergleichen. Ich weis, das das direkt nicht geht, denn er sagt mir ja auch immer "Typ Mismatch".
Das Problem ist aber das er für das Auslesen von Feldinhalten mit GetItemValue ein Variant Typ will. Da setzt Notes dann zwei Eckige Klammern z.B. ["Wert"] um den Inhalt des Feldes.
Selbst wenn ich die eine Variable auch auf Variant setze, bring er mir immer noch ein Typ Mismatch.
Der Debugger zeit für die erste Variable den Inhalt so an: "Wert"
und für die zweite Variable so: ["Wert"]
Hab schon alles probiert ???
Matthias
-
Du bekommst mit GetItemValue immer ein Array zurück. Also müsstest Du z.B. so die Werte vergleichen
testString = "123"
if testString = doc.GetItemValue("Name")(0) Then
...
-
Das geht z.B. so (Vorraussetzung ist natürlich, dass das Feld vom Typ Text ist):
Dim varTemp As Variant
Dim strTest As String
varTemp = doc.GetItemValue("Feldname")
If strTest = varTemp(0) Then
...
oder einfacher auch
...
If strTest = doc.Feldname(0)
...
Axel
-
OK, ihr seid einfach super ;D
Jetzt läuft mein Script durch.