Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mh70220 am 24.07.06 - 10:14:22

Titel: Lotus Script Problem!
Beitrag 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
Titel: Re: Lotus Script Problem!
Beitrag von: DerAndre am 24.07.06 - 10:20:35
Ein Errorhandle wäre nicht schlecht, dann bekommst Du die Info wo es nicht klappt.

André
Titel: Re: Lotus Script Problem!
Beitrag von: Thomas Schulte am 24.07.06 - 10:21:33
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.
Titel: Re: Lotus Script Problem!
Beitrag von: Untitled am 24.07.06 - 10:22:06
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
Titel: Re: Lotus Script Problem!
Beitrag von: animate am 24.07.06 - 10:22:25
http://atnotes.de/index.php?topic=11980.0
Titel: Re: Lotus Script Problem!
Beitrag von: Thomas Schulte am 24.07.06 - 10:31:37
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.
Titel: Re: Lotus Script Problem!
Beitrag von: Axel am 24.07.06 - 10:40:18
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
Titel: Re: Lotus Script Problem!
Beitrag von: Thomas Schulte am 24.07.06 - 10:56:28
Mist hab ich übersehen  >:(

Dann sind da zwei Fehler drin.
Titel: Re: Lotus Script Problem!
Beitrag von: mh70220 am 24.07.06 - 12:44:01
@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
Titel: Re: Lotus Script Problem!
Beitrag von: diali am 24.07.06 - 12:49:56
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
...
Titel: Re: Lotus Script Problem!
Beitrag von: Axel am 24.07.06 - 12:52:37
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
Titel: Re: Lotus Script Problem!
Beitrag von: mh70220 am 24.07.06 - 12:58:47
OK, ihr seid einfach super  ;D

Jetzt läuft mein Script durch.