Autor Thema: Problem mit einem Script  (Gelesen 3339 mal)

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Problem mit einem Script
« 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

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #1 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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #2 am: 15.03.07 - 18:24:07 »
Ulrich, danke für die schnelle Antwort, aber was muss ich denn nun eigentlich tun?

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #3 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
« Letzte Änderung: 15.03.07 - 18:28:36 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #4 am: 15.03.07 - 18:29:25 »
Habs geändert in

Call doc.ReplaceItemValue("SEAStartDate", tmpSEAStartDate)

der Fehler kommt aber immer noch :-(

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #5 am: 15.03.07 - 18:31:56 »
ja, gucke noch einmal in meinen vorherigen Post ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #6 am: 15.03.07 - 18:40:42 »
Tschuldigung Ulrich, hab ich vorhin gar nicht gesehen.
Fehler kommt aber leider immer noch

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #7 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   

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Problem mit einem Script
« Antwort #8 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?
« Letzte Änderung: 15.03.07 - 20:03:31 von DAU-in »
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #9 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

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Problem mit einem Script
« Antwort #10 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.
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #11 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 ;-)

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #12 am: 15.03.07 - 20:17:37 »
hab die uidocs grade rausgenommen. geht aber trotzdem nicht...
trotzdem danke

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Problem mit einem Script
« Antwort #13 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
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #14 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?

Offline ewald

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #15 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.

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Problem mit einem Script
« Antwort #16 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.
 





mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Problem mit einem Script
« Antwort #17 am: 15.03.07 - 20:46:28 »
schmeisse das

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

raus, dann sollte es funktionieren
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Problem mit einem Script
« Antwort #18 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz