Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Thunder am 23.10.03 - 14:02:34

Titel: Objektvariable not Set
Beitrag von: Thunder am 23.10.03 - 14:02:34
Hallo,

kleines Scriptproblem:
Ich habe dieses Script aus einem Forum entnommen (funzt auch ganz gut) und wollte es etwas erweitern.Leider läuft das nicht so ganz, wie ich mir das gedacht habe-ist aber bestimmt nur eine Kleinigkeit.
Das Script schreibt einfach nur Einträge in den aktuellen Kalender.
Ich habe eine Maske, womit man Urlaub, Gleittage, sonstige Abwesenheiten beantragen kann. Diese möchte ich in den Kalender übernehmen. Es gibt also 3x die Felder VOM - BIS mit natürlich anderer Bezeichnung.Ich dachte mir also - kopiere das Script noch einmal drunter, ändere es etwas ab und alles ist gut. Er wirft mir aber leider den Fehler ' Objektvariable not Set' raus. Was muß ich noch definieren ?

Sub Click(Source As Button)
     Dim Session As New NotesSession
     Dim Workspace As New NotesUIWorkspace
     Dim TheDocument As NotesDocument
     Dim db As notesDatabase
     Dim UserName As String
     
     Set UIDoc = Workspace.CurrentDocument
     Set TheDocument = UIDoc.Document
     
     Set db = New NotesDatabase("", "")
' Open user's mail database
     db.openmail
     
' Notestime variabels
     Dim StartDatum As String
     Dim EindDatum As String
     

' Urlaub ------------------------------------------------------------

' Get variabels from document
     StartDatum = Uidoc.FieldGetText("gA_vom_1")
     EindDatum = Uidoc.FieldGetText("gA_bis_1")
     
     
'Conversion for string to datefield
     Set datum1 = New NotesDateTime (StartDatum)
     Set datum2 = New NotesDateTime (EindDatum)
     Call datum2.AdjustDay( 1 )
     
     Startdatum = Cstr(datum1.DateOnly)
     Einddatum = Cstr(datum2.DateOnly)
     
'The do while places the calendar item everyday unit startdate and endate are the same.
     Do While StartDatum <> EindDatum
         
'Call calender
          Dim CalendarEntry As New NotesDocument(db)
          Dim rtitem As New NotesRichTextItem(CalendarEntry, "Body")
          Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
          Call rtitem.AddNewline(1)
          Call rtitem.AppendDocLink(TheDocument, "Verlof")
          UserName = Session.CommonUserName
         
          CalendarEntry.Form = "Appointment"
          CalendarEntry.Principal = UserName
         
          CalendarEntry.Chair = Session.UserName
          CalendarEntry.ExcludeFromView = "D"
          CalendarEntry.OrgTable = "CO"
          CalendarEntry.SequenceNum = 1
          CalendarEntry.Subject = "Urlaub (Zina)"
         
         
'Appointment Type 4 = Reminder , 3 = meeting, 2 = event, 1 = anniversary, 0 = Personal
'Place string in calender fields
          CalendarEntry.AppointmentType = "4"
          CalendarEntry.StartDate = Cdat(StartDatum)
          CalendarEntry.StartDateTime = Cdat(StartDatum)
          CalendarEntry.CalendarDateTime = Cdat(StartDatum)
          CalendarEntry.EndDateTime = Cdat(StartDatum)
         
          Call CalendarEntry.save(True, True)
          Call datum1.AdjustDay( 1 )
          Startdatum = Cstr(datum1.DateOnly)
          Einddatum = Cstr(datum2.DateOnly)
     Loop
     
' Gleittage  -----------------------------------------------------------------------------------------
     
     
' Get variabels from document
     StartDatum = Uidoc.FieldGetText("gA_vom_4")
     EindDatum = Uidoc.FieldGetText("gA_bis_4")
     
     
'Conversion for string to datefield
     Set datum1 = New NotesDateTime (StartDatum)
     Set datum2 = New NotesDateTime (EindDatum)
     Call datum2.AdjustDay( 1 )
     
     Startdatum = Cstr(datum1.DateOnly)
     Einddatum = Cstr(datum2.DateOnly)
     
'The do while places the calendar item everyday unit startdate and endate are the same.
     Do While StartDatum <> EindDatum
         
'Call calender
          Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
          Call rtitem.AddNewline(1)
          Call rtitem.AppendDocLink(TheDocument, "Verlof")
          UserName = Session.CommonUserName
         
          CalendarEntry.Form = "Appointment"
          CalendarEntry.Principal = UserName
         
          CalendarEntry.Chair = Session.UserName
          CalendarEntry.ExcludeFromView = "D"
          CalendarEntry.OrgTable = "CO"
          CalendarEntry.SequenceNum = 1
          CalendarEntry.Subject = "Gleittage (Zina)"
         
         
'Appointment Type 4 = Reminder , 3 = meeting, 2 = event, 1 = anniversary, 0 = Personal
'Place string in calender fields
          CalendarEntry.AppointmentType = "4"
          CalendarEntry.StartDate = Cdat(StartDatum)
          CalendarEntry.StartDateTime = Cdat(StartDatum)
          CalendarEntry.CalendarDateTime = Cdat(StartDatum)
          CalendarEntry.EndDateTime = Cdat(StartDatum)
         
          Call CalendarEntry.save(True, True)
          Call datum1.AdjustDay( 1 )
          Startdatum = Cstr(datum1.DateOnly)
          Einddatum = Cstr(datum2.DateOnly)
     Loop
     
End Sub

Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 14:04:27
Was sagt der Debugger ?
Titel: Re:Objektvariable not Set
Beitrag von: g202e am 23.10.03 - 14:04:57
Wie wär's mit SESSION?
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 14:08:53
Was soll mit Session sein ?
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 23.10.03 - 14:14:52
Das Script funzt wiegesagt bis zu den Gleittagen.
Wenn ich die Geschichte durch den Debugger laufen lasse
läuft er genau zu der Zeile -
    Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
im Gleittage-Abschnitt und sagt "Objekt variable not Set "
gruselig
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 14:24:42
Schau Dir mal Deine Programmlogik an: Wenn StartDatum = EndDatum, dann wird auch rtitem nicht instantiiert.
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 23.10.03 - 14:29:04
Ist nicht mein Script - bei den Urlaubseinträgen funktioniert es ja auch.
Das ist es, was ich nicht verstehe.
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 14:45:46
Eben: Weil dort Startdate <> EndDate. Gleitzeit über mehrere Tage wird auch funktionieren.
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 23.10.03 - 14:49:19
Nein - funzt aber nicht !
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 15:49:38
Dann schau Dir das Ganze mal peu à peu im Debugger an und achte dabei darauf, wann das Set rtitem = ... nicht ausgeführt wird.

Bernhard
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 23.10.03 - 16:25:10
 :-[
bei Gleittage:
Die Variable RItem ist sofort da und ändert sich bis zur Fehlermeldung auch nicht.

bei Urlaub:
hier werden die Einträge in RItem reinsgeschrieben - ohne Fehlermeldung.
Titel: Re:Objektvariable not Set
Beitrag von: Semeaphoros am 23.10.03 - 16:27:19
Was heisst, ist sofort da, hat sie auch Inhalt?
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 23.10.03 - 16:31:01
Die Frage ist: Was bedeutet bei Dir "ist da"? Das Ding muß ja noch nicht instantiiert sein - es steht unter "Variablen" zwar da, aber ohne jede Zusatzinformation.
Schreib einfach mal vor die Fehlerzeile
If rtitem is nothing then
   Messagebox "Shit !"
   Exit Sub
End If

Dann wirst Du feststellen, daß die Set-rtitem-Zeile von Deiner Programmlogik nicht ausgeführt wird. Und dann mußt Du diese Programmlogik umstellen.

Bernhard
Titel: Re:Objektvariable not Set
Beitrag von: Semeaphoros am 23.10.03 - 16:37:31
Ansonsten, die Grundkenntnisse zur Programmierung mal aufpolieren
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 24.10.03 - 09:32:56
Will ich ja - deswegen bin ich doch hier. Wenn ich alles wüßte, brauche ich dieses Forum nicht.
Ich verstehe nur nicht, warum die RItem-Geschichte im oberen Teil funktioniert - übrigens auch, wenn das Anfangsdatum gleich dem Enddatum ist - und der untere Teil nicht, obwohl genau dasselbe drinsteht !!!
Dann werde ich halt mehrere Buttons machen müssen. Einen für Urlaub, einen für Gleittage, ...

Gruß
Titel: Re:Objektvariable not Set
Beitrag von: Semeaphoros am 24.10.03 - 09:37:50
Ich denke mal, das Forum wird Dir nie in genügender Weise Grundlagen und Erfahrungen beibringen, da musst Du schon selber mal investieren und der Umgang mit dem Debugger kommt nur mit der eigenen Uebung, bei den meisten Leuten etwas schneller mit Anleitung als ohne (aber das ist individuell unterschiedlich, je nach Lerntyp). Deine Umsetzungen der Tips aus diesem Thread lassen leider erkennen, dass zu wenig eigenes Verständnis vorhanden ist, daher auch mein Hinweis. Also alleine hier kommst Du ganz sicher nicht über die entscheidende Schwelle.
Titel: Re:Objektvariable not Set
Beitrag von: sloe am 24.10.03 - 11:17:53
Hi Thunder,
ich würde vor der Zeile
Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
bei den Gleittagen folgende Zeilen ergänzen:
...
' Gleittage  -----------------------------------------------------------------------------------------
   
   
' Get variabels from document
   StartDatum = Uidoc.FieldGetText("GleitStartdatum")
   EindDatum = Uidoc.FieldGetText("GleitEnddatum")
   
   
'Conversion for string to datefield
   Set datum1 = New NotesDateTime (StartDatum)
   Set datum2 = New NotesDateTime (EindDatum)
   Call datum2.AdjustDay( 1 )
   
   Startdatum = Cstr(datum1.DateOnly)
   Einddatum = Cstr(datum2.DateOnly)
   
'The do while places the calendar item everyday unit startdate and endate are the same.
   Do While StartDatum <> EindDatum
      
'Call calender
      Set CalendarEntry = New NotesDocument( db )
      Set rtitem = New NotesRichTextItem( CalendarEntry, "Body" )

      Call rtitem.AppendText("Gleittage")
      Call rtitem.AddNewline(1)
      Call rtitem.AppendDocLink(TheDocument, "Beschreibung")
      UserName = Session.CommonUserName
...
P.S.: Allerdings bekomme ich beim ursprünglichen Code keinen Fehler, er haut nur ein Dokument mit allen Verknüpfungen für die Gleittage in den Kalender.
Gruß
sloe
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 24.10.03 - 13:21:39
Hallo Sloe,
das wars !  
Danke für die Hilfe

Gruß
Titel: Re:Objektvariable not Set
Beitrag von: koehlerbv am 24.10.03 - 17:36:50
Hallo, Donner,

ich habe mir den Code eben nochmal angeschaut und befürchte - wenn ich nicht ganz schief gucke so auf die Schnelle - dann wird das auch mit sloe's (völlig korrektem) Tip nicht richtig funktionieren:
Wenn jemand Urlaub oder Gleitzeit in den Kalender eintragen will, bei denen Beginn und Ende am gleichen Tag liegen, dann wird weder die eine noch die andere Bedingung
Do While StartDatum <> EindDatum
erfüllt sein.

Das Problem mit diesem Button bist Du auf jeden Fall noch nicht (wirklich) los ...

Bernhard
Titel: Re:Objektvariable not Set
Beitrag von: Thunder am 27.10.03 - 09:35:54
Ich würde eigentlich auch sagen, daß das nicht klappen kann. Aber er macht es trotzdem - frage mich nicht warum.
Böse ist auch, daß wenn der User kein Enddatum einträgt, daß Script den ganzen Kalender vollmacht - vom Startdatum halt. Aber das kann man ja vorher abfangen.
Wünsche eine schöne Woche