Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: goldi003 am 02.05.07 - 09:43:32

Titel: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 09:43:32
Hallo Zusammen!
Ich habe da ein Problem und bin leider mit meinem Lotus Script Kenntnissen am Ende!
Gut zugegeben die sind nicht groß!!  ;)

Ziel ist es in einem Dokument alle Felder durchzugehen und wenn ein Feld eine Zahl ist und am eine ein "P" hat, dann soll dieser Wert bearbeitet werden!

habe nun folgenden Code den ich in einem Agent aufrufe!

Sub Initialize
   Dim s As New NotesSession
   Dim w As New NotesUIWorkspace
   Dim colSelect As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim fielditem As NotesItem
   Dim var As Double

   Set db= s.CurrentDatabase
   
   Forall item In doc.Items
      If (( fielditem.Type=NUMBERS )&(Strrightback(fielditem.Name, "P")))    Then
         var = doc.GetItemValue(fielditem.Name)
         Messagebox var, MB_OK, "Zwischenschritt"   
      End If
   End Forall
End Sub


Ich bearbeite den Wert noch nicht, sonder will in nur einmal in einer Messagebox ausgeben! zum testen!

Rufe ich den Agent nun auf, dann bekomm ich die Meldung "Object Variable not set"
???

ist im Code etwas falsch oder habe ich etwas vergessen!
ich hoffe ich habe das Problem einigermaßen beschrieben und ihr könnt ma da ein bisschen helfen!

mfg
Peter
Titel: Re: forall item in doc.items
Beitrag von: m3 am 02.05.07 - 09:49:25
1) Schon mal mit dem Debugger durchgesteppt, in welcher Zeile der Fehler auftritt?
2) Ein bissl Errorhandling würde auch nicht schaden.
3) DENKEN !!!!
Code
  Dim doc As NotesDocument
 ...
   Forall item In doc.Items
Wo weist Du denn doc einen Wert zu???????

Titel: Re: forall item in doc.items
Beitrag von: umi am 02.05.07 - 09:51:41
Meine Kristallkugel verrät auf den 1. Blick :
a) Doc nicht gesetzt
b) fielditem nicht gesetzt
Titel: Re: forall item in doc.items
Beitrag von: diali am 02.05.07 - 09:56:19
doc-Objekt fehlt noch

Set uidoc = ws.CurrentDocument
set doc = uidoc.Document

   Forall item In doc.Items
      If (( fielditem.Type=NUMBERS )&(Strrightback(fielditem.Name, "P")))    Then

Du musst item anstelle von fielditem benutzen und ein & muss im Script AND sein.

  Forall item In doc.Items
      If item.Type=NUMBERS AND right(item.Name, 1) = "P" Then
Titel: Re: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 10:04:21
Danke für die rasche Antort!

hab nun deinen Code nachgetragen, aber es kommt immernoch die selbe Meldung!!

Habe es durchdebugged und es hängt hier!!

Sub Initialize
   Dim s As New NotesSession
   Dim w As New NotesUIWorkspace
   Dim colSelect As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim fielditem As NotesItem
   Dim var As Double
   
   Set db= s.CurrentDatabase
   Set uidoc = w.CurrentDocument
   Set doc = uidoc.Document

Da hängt der debugger mit objet variable not set   

                Forall item In doc.Items
      If item.Type=NUMBERS And Right(item.Name, 1) = "P" Then
         var = doc.GetItemValue(fielditem.Name)
         Messagebox var, MB_OK, "Zwischenschritt"
      End If
   End Forall
   
End Sub


Titel: Re: forall item in doc.items
Beitrag von: diali am 02.05.07 - 10:06:25
was zeigt der Debugger im Objekt doc?
Kannst Du die Items im doc-Objekt sehen?
Titel: Re: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 10:09:50
Hallo!

im object Doc steht nix drin!
Die Items sehe ich auch nicht!    :'(

muss ich vielleicht das Item auch irgendwo setzten?

mfg
Peter

Titel: Re: forall item in doc.items
Beitrag von: Thomas Schulte am 02.05.07 - 10:11:08
Und woher soll dein "AGENT" denn wissen welches Dokument du meinst?
w.currentdocument liefert dir mit Sicherheit in deinem Kontext kein uidoc zurück.

Titel: Re: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 10:13:52
stimmt!!

in w.currentdocument steht nix drin!

wie mach ich das, dass ich die Selektierten Docs bearbeiten kann?
Titel: Re: forall item in doc.items
Beitrag von: Thomas Schulte am 02.05.07 - 10:34:46
Damit bist du micht mehr im Frontend, also alles was mit UIDoc zu tun hat fällt schon mal flach.
Im Agent gibt es eine Eigenschaft auf was der abzielen soll.
Auslöser: Ereignis, Auswahl im Menü Aktionen, Ziel alle ausgewählten Dokumente.

Script Rumpf, ohne Anspruch auf Vollständigkeit und Fehlerfreiheit:
Code
doccollection = db.unprocesseddocuments
set doc = doccollection.getfirstdocument
do while not doc is nothing
set olddoc = doc
' mach deine überprüfung hier.

call doc.save(true,false)
set doc = doccollection.getnextdocument(olddoc)
loop
Titel: Re: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 10:58:17
Hey danke!
ich habs jetzt zwar anders gelöst! zum überprüfen ob der Agent funkt. habe ich einfach ein Dokument geöffnet und den Agent im Dokument ausgeführt! jetzt läuft er ohne fehler!

Einziges problem er findet kein Feld das auf meine Beschreibung zutrifft!!

manche Felder heißen --> num9BW und manche --> num9BP

jetzt brauche ich eine Abfrage die solche mit "P" am Schluss nicht bearbeitet!
Ist dieser Code korekt?
Wie mache ich im Lotus Script ein "ungleich"??

If item.Type=NUMBERS And Strrightback(item.Name, 1) = "P" Then

mfg
Peter
Titel: Re: forall item in doc.items
Beitrag von: diali am 02.05.07 - 11:20:54
ungleich ... <>
Titel: Re: forall item in doc.items
Beitrag von: Thomas Schulte am 02.05.07 - 12:17:44
Und du musst bei deinem Ansatz jedes Dokument einzeln öffnen ....
Titel: Re: forall item in doc.items
Beitrag von: goldi003 am 02.05.07 - 13:07:32
Hallo! und Mahlzeit!

Nein jedes dokument muss ich nicht einzeln öffnen! Das habe ich nur jetzt zum Testen! Mach das ganze dann über Dokument Collection!  ::)

Es funktioniert ja auch schon alles, bis auf die Kleinigkeit, dass ich den Fehler Type Missmatch habe!

und zwar bei der Zeile wo ich mir die daten aus dem Feld holen will!
Dim var As Long
var = doc.GetItemValue(item.Name)


Diese Fehlermeldung heist ja das var nicht den selben Typ hat wie mein Feld, oder?

hat aber beides long! zumindest steht das im Debugger bei dem Feld!

mfg
Peter
Titel: Re: forall item in doc.items
Beitrag von: m3 am 02.05.07 - 13:14:02
Schau Dir BITTE die Hilfe zu GetItemValue an. Das liefert nämlich ein Array zurück !!!
Titel: Re: forall item in doc.items
Beitrag von: Driri am 02.05.07 - 13:15:33
Hallo,

ich würde Dir dringend empfehlen, die Designer-Hilfe zu benutzen. Dort steht wunderbar beschrieben, was eine solche Methode tut und welchen Datentyp sie zurückliefert.

In Kurzform :

GetItemValue liefert einen Array zurück. Element x (vermutlich 0) aus dem Array hat dann bei Dir den Datentyp Long.