Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: ewald am 15.03.07 - 18:16:18

Titel: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 18:16:18
Hallo zusammen,
bei dem folgend Script krieg ich immer den Fehler "Object variable not set", und zwar denke ich bei der Zeile Call uidoc.FieldSetText..........
Der Fehler ist wahrscheinlich recht enifach aaber ich bin nicht so der Script-Experte :-(
Das Script steht in einem Button einer View. Dort werden Dokumente selektiert. Und bei diesen wird dann ein Wert in ein Feld geschrieben, den ich aus einem anderen Dokument hole.

Sub Click(Source As Button)
   
   Dim ws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim uiview As NotesUIView
   Dim collection As NotesDocumentCollection
   Dim uidoc As NotesUIDocument   
   Dim doc As NotesDocument   
   Dim j As Integer   
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set uidoc = ws.currentdocument   
   Set doc = ws.currentdocument.document      
   Set uiview = ws.CurrentView   
   
   Dim tmpSEAStartDate As String
   
   ' The profile document
   Dim profDoc As NotesDocument
   Set profDoc = db.GetProfileDocument("MainProfile")   
   
   tmpSEAStartDate = profDoc.dlgSEAStartDate(0)   
   Msgbox tmpSEAStartDate
   
   For j = 1 To collection.Count
      Set doc = collection.GetNthDocument( j )
      
      Call uidoc.FieldSetText("SEAStartDate", tmpSEAStartDate)      
      
      Call doc.Save( False, True )
   Next
   
   ' Remove all the selections
   Call uiview.DeselectAll
   
End Sub

Vielen Dank.

Grüsse Ewald
Titel: Re: Problem mit einem Script
Beitrag von: eknori (retired) am 15.03.07 - 18:20:36
Zitat
Button einer View

uidoc ist doch das gerade geöffnete Dokument !!

Du wendest Frontendmethoden im Backend an.
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 18:24:07
Ulrich, danke für die schnelle Antwort, aber was muss ich denn nun eigentlich tun?
Titel: Re: Problem mit einem Script
Beitrag von: eknori (retired) am 15.03.07 - 18:25:14
du willst doch sichr im DOC ein feld neu besetzen, oder ? Dann ist die Methode ReplaceItemValue dein Freund

also entweder

Dim item As NotesItem
'
Set item = doc.ReplaceItemValue( "SEAStartDate", tmpSEAStartDate )

oder

doc.SEAStartDate = tmpSEAStartDate
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 18:29:25
Habs geändert in

Call doc.ReplaceItemValue("SEAStartDate", tmpSEAStartDate)

der Fehler kommt aber immer noch :-(
Titel: Re: Problem mit einem Script
Beitrag von: eknori (retired) am 15.03.07 - 18:31:56
ja, gucke noch einmal in meinen vorherigen Post ...
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 18:40:42
Tschuldigung Ulrich, hab ich vorhin gar nicht gesehen.
Fehler kommt aber leider immer noch
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 19:42:23
Bleibt im debugger hier hängen:

   Dim ws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim uiview As NotesUIView
   Dim collection As NotesDocumentCollection
   Dim uidoc As NotesUIDocument   
   Dim doc As NotesDocument   
   Dim j As Integer
   
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set uidoc = ws.currentdocument   
-->   Set doc = ws.currentdocument.document      
   Set uiview = ws.CurrentView   
Titel: Re: Problem mit einem Script
Beitrag von: DAU-in am 15.03.07 - 19:57:47
Wird das uidoc denn belegt?

Wenn du die Dokumente in einer Ansicht anhakst, sollte das doch nicht der Fall sein, oder stehe ich auf dem Schlauch?

Oder hast du den Button jetzt in der Maske eingebaut?
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 20:02:30
ich denke doch, oder nicht?

   Dim ws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim uiview As NotesUIView
   Dim collection As NotesDocumentCollection
   Dim uidoc As NotesUIDocument   
   Dim doc As NotesDocument   
   Dim j As Integer   
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set uidoc = ws.currentdocument   
   Set doc = ws.currentdocument
   Set uiview = ws.CurrentView   
   
   Dim tmpSEAStartDate As String
   
   ' The profile document
   Dim profDoc As NotesDocument
   Set profDoc = db.GetProfileDocument("MainProfile")   
   
   tmpSEAStartDate = profDoc.dlgSEAStartDate(0)   
   Msgbox tmpSEAStartDate
   
   For j = 1 To collection.Count
      Set doc = collection.GetNthDocument( j )
      Dim item As NotesItem
      Set item = doc.ReplaceItemValue( "SEAStartDate", tmpSEAStartDate )
      
      'Call doc.ReplaceItemValue("SEAStartDate", tmpSEAStartDate)      
      
      Call doc.Save( False, True )
   Next
   
   ' Remove all the selections
   Call uiview.DeselectAll
Titel: Re: Problem mit einem Script
Beitrag von: DAU-in am 15.03.07 - 20:06:54
sorry, ich hatte mein Posting oben eben editiert.

*ich denke doch, oder nicht?*

was sagt denn der Debugger?

wenn ich das richtig verstehe, hakst du die Doks in einer Ansicht an, ohne sie einzeln zu öffnen, richtig?
Dann sollte uidoc nicht belegt sein, wie Eknori oben geschrieben hat.
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 20:13:31
muss ich dann die beiden uidoc Einträge Dim und Set einfach nur rausnehmen?
Sorry wegen der blöden Frage ;-)
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 20:17:37
hab die uidocs grade rausgenommen. geht aber trotzdem nicht...
trotzdem danke
Titel: Re: Problem mit einem Script
Beitrag von: DAU-in am 15.03.07 - 20:22:00
wenn du den Designer hast, dann kannst du dir doch im Debugger ansehen, wie die Variablen belegt sind (oder auch nicht).

Und wenn ich es richtig verstanden habe, dann soll der Button in einer Ansicht auf die selektierten Dokumente gehen.

ws.currentdocument bezieht sich auf das am Bildschirm geöffnete Dokument.
Wenn du also den Code in einer Ansicht aufrufst, sollte uidoc jetzt nicht belegt sein .... (siehe eknoris 1. Posting)

Also sieh doch einfach im debugger nach uidoc, und wenn das nicht belegt ist,  kannst du folglich auch nicht anschliessend doc über ws.currentdocument.document belegen
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 20:28:25
das ist korrekt es gibt kein uidoc mehr im code. aber was muss ich denn dann mit dem doc machen. wie muss ich das da reinschreiben. kannst du mir das so sagen, dass ich als script-newbe auch verstehe?
Titel: Re: Problem mit einem Script
Beitrag von: ewald am 15.03.07 - 20:40:58
ich glaub, jetzt hab ich es verstanden. jetzt gehts.
das set doc= hab ich oben rausgenommen, weil ich unten ja
Set doc = collection.GetNthDocument( j ) eh schon stehen habe.
Titel: Re: Problem mit einem Script
Beitrag von: DAU-in am 15.03.07 - 20:43:24
Es gibt Frontend- und Backendmethoden.

ws.currentdocument liefert dir das Dokument, das gerade am Bildschirm geöffnet ist, als Frontenddokument.
ws.currentDocument.document liefert dir das Backenddokument, das zu diesem Frontenddokument gehört.

Wenn du kein Dokument am Bildschirm geöffnet hast, bekommst du

Set uidoc = ws.currentdocument  
als leer zurück (siehe Debugger)


und da du anschliessend das Backenddokument mit Hilfe des Frontenddokumentes (indirekt über ws.currentdocument ) belegen willst

   Set doc = ws.currentdocument.document      

kommt dann die Meldung 'Object variable not set', da eben das Frontenddokument nicht da ist, an dem sich dein Skript gerade langhangeln will.


und das hier

Dim doc As NotesDocument
Set doc = ws.currentdocument

kann schon gar nicht funktionieren, weil ws.currentdocument ein NotesUIDocument zurückgibt, und kein Notesdokument.
 





Titel: Re: Problem mit einem Script
Beitrag von: eknori (retired) am 15.03.07 - 20:46:28
schmeisse das

   Set uidoc = ws.currentdocument   
   Set doc = ws.currentdocument

raus, dann sollte es funktionieren
Titel: Re: Problem mit einem Script
Beitrag von: Axel am 15.03.07 - 20:47:45
Ich habe das Script mal ein bisschen angepasst und eine minimale Fehlerbehandlung eingebaut. Eine Fehlerbehandlung ist das A und O einer Programmierung. Zu kannst z.B. nicht davon ausgehen, dass immer ein Profildokument vorhanden ist.

So sollte es eigentlich funktionieren.

Dim ws As New NotesUIWorkspace  
Dim session As New NotesSession
Dim db As NotesDatabase
Dim uiview As NotesUIView
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument  
Dim profDoc As NotesDocument
Dim tmpSEAStartDate As String
  
On Error Goto ErrorHandler

Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
If collection.Count = 0 Then
  Messagebox "Keine Dokumente markiert"
  Exit Sub
End If  

Set uiview = ws.CurrentView    
  
' The profile document
Set profDoc = db.GetProfileDocument("MainProfile")
If profDoc Is Nothing Then
  Messagebox "Kein Profildokument vorhanden"
  'Hier kommt die weitere Fehlerbehandlung
  'Wenn Fehler dann Ausstieg
  Exit Sub
End If  
  
tmpSEAStartDate = profDoc.dlgSEAStartDate(0)  
Msgbox tmpSEAStartDate

Set doc = collection.GetFirstDocument  'Erstes Dokument
While Not (doc Is Nothing)  'Schleife solange ausführen wie Doks in collection

  doc.SEAStartDate = tmpSEAStartDate  'Wert in Feld schreiben
  
  'Alternativ wäre auch das möglich, dann sind die zwei Zeilen oben hinfällig
  doc.SEAStartDate = profDoc.dlgSEAStartDate   'Wert in Feld schreiben
      
  Call doc.Save( False, True )  
  
  Set doc = collection.GetNextDocument(doc)  'Zugriff auf nächsten Dokument
Wend

' Remove all the selections
Call uiview.DeselectAll

Ende:
Exit Sub

ErrorHandler
Messagebox "Es ist ein Fehler aufgetreten." & Chr$(13) & "Fehler: " & Str$(Err) + " -> '" & Error$ & _
"' in Zeile " & Str$(Erl) , 16, "Fehler"
Resume Ende


Axel