Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 26.07.04 - 10:51:17

Titel: Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 10:51:17
Hallo Zusammen,

werde unendlich dankbar, wenn jemand beim folgenden Problem mir helfen würde. Wir hatten auf  Domino V. 5 (Kalender-Template  StdR50Mail)eine Anwendung,, wo unter anderen wird ein Termin-Dokument erstellt. Aus dem Termin-Dokument mit  einem Aktions-Schalter kann man einen Termin in ausgewähltem Kalender erstellen mit der Übernahme entsprechenden Daten. Nach dem Umzug auf V. 6 (Kalender-Template  iNotes6) funktioniert diese nicht mehr richtig. D. h. alle Daten werden richtig übernommen, ausser Datum und Uhrzeit, die werden nach aktuellen Datum und Uhrzeit überschrieben. Man kann das sogar kurz sehen beim Erstellen des Termins-Dokumentes im Kalender wie in den Datum- und Zeitfelder wird erst ausgewählten Datum und Zeit eingetragen und dann auf aktuelle überschrieben.
Hier ist das Source von dem Aktions-Schalter:

Sub Click(Source As Button)
   Dim ws As NotesUIWorkspace   
   Dim s As NotesSession
   Dim db As NotesDatabase
   Dim uidb As NotesDatabase
   Dim uiDocA As NotesUIDocument
   Dim docA As NotesDocument
   Dim uiDocM As NotesUIDocument
   Dim docM As NotesDocument
   Dim tmpSRV As String
   Dim tmpMAIL As String
   Dim AnfangD As Variant
   Dim EndeD As Variant
   Dim AnfangZ As String
   Dim EndeZ As String
   Dim Einlad As Variant
   Dim Text As Variant
   Dim tmpOrt As String
   Dim tmpSubject As String
   Dim tmpDokuTitel As String
   Dim tmpKundenName As String
   Dim rtitem As NotesRichTextItem
   
   Set s = New NotesSession
   Set ws = New NotesUIWorkspace
   Set uidb = s.CurrentDatabase
   Set uiDocA = ws.CurrentDocument   
   Call uiDocA.Refresh
   Call uiDocA.Save
   Set docA = uiDocA.Document
   
   Einlad = uiDocA.FieldGetText("SendTo")
   AnfangD = uiDocA.FieldGetText("StartDate")
   EndeD = uiDocA.FieldGetText("StartDate")
   AnfangZ = Strleft(uiDocA.FieldGetText("TimeRange"), "-")
   EndeZ = Strright(uiDocA.FieldGetText("TimeRange"), "-")
   tmpOrt = uiDocA.FieldGetText("Ort")
   tmpBody = uiDocA.FieldGetText("DokuBeschreibung")
   tmpDokuTitel = uiDocA.FieldGetText("DokuTitel")
   tmpKundenName = uiDocA.FieldGetText("KundenName")   
   tmpSubject = tmpKundenName & " -> " & tmpDokuTitel
   
   tmpSRV = uiDocA.FieldGetText("srv_1")
   tmpMAIL = uiDocA.FieldGetText("MailDatei")
   
   Set uiDocM = ws.composeDocument(tmpSRV, tmpMAIL, "Appointment",4,4)
   Set docM = uiDocM.Document
   
   Call uiDocM.FieldSetText("AppointmentType", "3")
   Call uiDocM.FieldSetText("EnterSendTo",  Einlad)
   Call uiDocM.FieldSetText("StartDate", AnfangD)
   Call uiDocM.FieldSetText("EndDate", EndeD)
   Call uiDocM.FieldSetText("StartTime", AnfangZ)
   Call uiDocM.FieldSetText("EndTime", EndeZ)
   Call uiDocM.FieldSetText("Subject", tmpSubject)
   Call uiDocM.FieldSetText("Location", tmpOrt)
   Call uiDocM.FieldSetText("Body", tmpBody)
   
   Set rtitem = New NotesRichTextItem( docM, "Body" )
   Call rtitem.AppendText( tmpBody )
   Call rtitem.AddNewLine( 2 )
   Call rtitem.AppendText( "Dokumentverknüpfung:  " )
   Call rtitem.AppendDocLink ( docA, tmpSubject )
   Call docM.Save( True, True )
   Call uiDocM.Save
   Call uiDocM.Close   
   
   
End Sub


Vielen Dank im Voraus
Sofia
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 14:18:55
Hallo,

vielleicht habe ich meine Frage nicht klar formuliert (wegen meiner Sprachschwierigkeiten), versuche ich noch mal.
Also, es sollte einen Termin von einer Anwendung per Aktions-Schaltfläche in der Notes-Kalender übernommen werden.
Auf Domino 5 (Kalender-Template  StdR50Mail) funktionierte das ohne Problem.
Auf Domino 6 (Kalender-Template  iNotes6) werden alle gewünschte Daten richtig übernommen ausser Datum und Zeit.

Ich habe das Feld „StartDate“ ( Form „Appointment“) in der beiden Template verglichen und festgestellt, dass Vorgabewertformel, Eingabeumsetzungsformel, Eingabevalidierungsformel, und Scripts sind absolut gleich, trotzdem die Datum und Zeit in der V. 6 auf aktuelle überschrieben werden.

Vielen Dank für jeder Hilfe
Sofia
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: Glombi am 26.07.04 - 15:30:09
In der Maske Appointment ist unter R6 eine Menge Scriptcode. Du solltest versuchen, die Felder auch im Backend zu setzen, auch noch die Felder StartDateTime und EndDateTime.

Andreas
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 16:15:33
Vielen Dank Andreas, ich versuche’s.
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 17:05:30
volgendes habe ich gemacht, leider ohne Erfolg:
   ...
                Call uiDocM.FieldSetText("AppointmentType", "3")
   Call uiDocM.FieldSetText("EnterSendTo",  Einlad)
   Call uiDocM.FieldSetText("Subject", tmpSubject)
   Call uiDocM.FieldSetText("Location", tmpOrt)
   Call uiDocM.FieldSetText("Body", tmpBody)
   
   Set rtitem = New NotesRichTextItem( docM, "Body" )
   Call rtitem.AppendText( tmpBody )
   Call rtitem.AddNewLine( 2 )
   Call rtitem.AppendText( "Dokumentverknüpfung:  " )
   Call rtitem.AppendDocLink ( docA, tmpSubject )
   
   docM.StartDateTime =AnfangD & " " & AnfangZ
   docM.EndDateTime =EndeD & " " & EndeZ
   docM.StartDate = AnfangD
   docM.EndDate = EndeD
   docM.StartTime =AnfangZ
   docM.EndTime = EndeZ
   Call docM.Save( True, True )
   Call uiDocM.Save
   Call uiDocM.Close
                ...   

alles wird richtig übernommen ausser Datum und Zeit -> es wurde aktuelle Datum und Zeit genommen.
Oder habe ich das falsch gemacht ???

Vielen Dank für Hilfe
Sofia

Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: Glombi am 26.07.04 - 17:10:10
ich würde nur ins Backend schreiben und noch VOR dem
Call docM.Save( True, True )
ein
Call docM.ComputeWithForm( false, false )
einbauen.

Das ganze UI Zeugs brauchst Du eigentlich gar nicht, wenn ich das richtig sehe.

Andreas
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: koehlerbv am 26.07.04 - 17:15:33
Ich kann das jetzt aus Zeitmangel nicht Schritt für Schritt nachvollziehen, aber trotzdem ein paar Empfehlungen von mir:
Das Vermischen von FrontEnd- und BackEnd-Methoden bei der Erstellung oder Änderung eines Dokuments sind ein No-No. In Deinem konkreten Beispiel: Du erzeugst ein Dokument im FrontEnd - damit schlagen die entsprechenden FrontEnd-Events zu (hier lohnt sich dann ein Blick in die CoreEmailClasses, um zu sehen, was da noch so alles getrieben wird). Dann änderst Du Werte im Backend und speicherst diese ab. Schön und gut, aber im Frontend haben sich mittlerweile ganz andere Dinge ereignet. Dann speicherst Du im das Frontend-Dokument - und bügelst damit alles platt, was Du gerade im Backend gespeichert hast.
Also: Entweder alles im Frontend oder alles im Backend oder genau ermitteln, was wann wo passiert und gegeneinander abgleichen (nicht empfehlenswert !).

Wie gesagt: Nicht getestet, aber probier mal folgendes aus: Speichere erst das Frontend-Dokument und erst anschliessend das im Backend. Da wirst Du schon andere Resultate bekommen. Das mindert aber nicht meine Warnung, Front- und Backend-Methoden zu vermischen. Du arbeitest sonst mit zwei Instanzen. Vulgär ausgedrückt: Du reisst mit dem Arsch wieder ein, was Du gerade mit den Händen aufgebaut hast  ;)

HTH,
Bernhard
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: koehlerbv am 26.07.04 - 17:16:34
Ich sehe gerade: ndreas hat mit anderen und kürzeren Worten gerade gleiches gepostet.

Bernhard
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 17:52:10
Andreas, vielen Dank für Deine Hilfe. Ich habe folgendes gemacht:

   Set db = New NotesDatabase( tmpSRV, tmpMAIL )
   Set docM = db.CreateDocument
   docM.Form = "Appointment"
   docM.AppointmentType = "3"
   docM.EnterSendTo = Einlad
   docM.Subject = tmpSubject
   docM.Body = tmpBody
   
   Set rtitem = New NotesRichTextItem( docM, "Body" )
   Call rtitem.AppendText( tmpBody )
   Call rtitem.AddNewLine( 2 )
   Call rtitem.AppendText( "Dokumentverknüpfung:  " )
   Call rtitem.AppendDocLink ( docA, tmpSubject )
   
   docM.StartDateTime =AnfangD & " " & AnfangZ
   docM.EndDateTime =EndeD & " " & EndeZ
   docM.StartDate = AnfangD
   docM.EndDate = EndeD
   docM.StartTime =AnfangZ
   docM.EndTime = EndeZ
   Call docM.ComputeWithForm( False, False )
   Call docM.Save( True, True )

Mit Debugger ausgeführt, alle Felder waren richtig angezeigt, nach ComputeWithForm( False, False ) wurden alle andere Felder angezeigt alles ohne Fehlermeldungen gelaufen. Nur weder Termin-Dokument im Kalender noch Einladung habe ich nicht gefunden.  ???

Sofia
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 26.07.04 - 18:43:57
Andreas,
Bernhard,

danke schön.

Habe doch das dokument in der Ansicht "Alle Dokumente" gefunden. Beim Versuch das zu öffnen, erschien folgende Fehlermeldung:
"Fehler beim Öffnen des Dokuments: Element des Dokuments nicht gefunden."
und nach "OK"
"Feld: „StartDate_2“: Falscher Datentyp für Operator oder @Funktion: Zeit/Datum erwartet"
Das Feld "StartDate_2" ist erst in V6 und wird zur Anzeige berechtnet.
Dann habe ich in dem Eigenschaften-Box die Felder StartDate, StartDateTime ... gekuckt. Die sind von Datentyp: "Textliste".
In normales Termin-Dokument sind die Felder von Datentyp "Zeit/Datum".

Wie bekomme ich das richtig?

Vielen Dank für Euro Hilfe
Sofia


Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: koehlerbv am 26.07.04 - 19:32:05
Hm,
Code
docM.EndDateTime =EndeD & " " & EndeZ
ist aber auch ein String - Notes tat, wie ihm geheissen wurde  ;)

Mach' daraus mal daraus den richtigen Datentyp:
Code
docM.EndDateTime = CDat (EndeD & " " & EndeZ)

Alle anderen fraglichen Werte natürlich auch anpassen !

HTH,
Bernhard
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: Glombi am 26.07.04 - 19:40:54
Damit der Eintrag im Kalender angezeigt wird, muss das Feld "CalendarDateTime"  noch gesetzt werden.

Also
docM.CalendarDateTime = docM.StartDateTime

zuvor natürlich die von Bernhard angesprochenen CDat Operationen durchführen.

Andreas
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: koehlerbv am 26.07.04 - 20:12:07
@Andreas: Genauso ist es.

Was mich an der ganzen Sache mehr als wundert: Alle Fehler schlagen in R5 exakt genauso zu - hier ist bisher nichts R6-typisches erkennbar ...

Bernhard
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: Glombi am 26.07.04 - 20:21:33
Hi Bernhard,

das wundert mich eigentlich auch, aber so genau habe ich mir die Unterschiede in der Maske zwischen R5 und R6 noch nicht angesehen.
Offenbar gibt es da im UI einige Änderungen.

Ich habe letztens eine VB Script programmiert, das Kalendereintrage aus Access in der Notes 6 Mail-DB macht. Da hat alles funktioniert, wenn es nur über das Backend läuft.

Andreas
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 30.07.04 - 10:11:54
Hallo,

Andreas.
Bernhard.
herzlichen Dank für Eure Hilfe.
Es sieht schon bei mir nicht schlecht aus mit der Ausnahme von zwei Problemchen, die ich unten beschreibe. Entschuldigung, dass ich mit der Verzögerung antworte, da ich die ganze Zeit voll mit dem IBM Content Manager beschäftig war.
Hier das Source

   Set db = New NotesDatabase( tmpSRV, tmpMAIL )
   Set docM = db.CreateDocument
   docM.Form = "Appointment"
   docM.AppointmentType = "3"
   docM.Subject = tmpSubject
   docM.Body = tmpBody
   docM.SendTo = Einlad

   docM.EnterSendTo = Einlad
   docM.RequiredAttendees = Einlad
   docM.AltRequiredNames = Einlad
   docM.tmpRequiredAttendees  = Einlad
   
   Set rtitem = New NotesRichTextItem( docM, "Body" )
   Call rtitem.AppendText( tmpBody )
   Call rtitem.AddNewLine( 2 )
   Call rtitem.AppendText( "Dokumentverknüpfung:  " )
   Call rtitem.AppendDocLink ( docA, tmpSubject )
   
   docM.StartDateTime =Cdat(AnfangD & " " & AnfangZ)
   docM.EndDateTime =Cdat(EndeD & " " & EndeZ)
   docM.StartDate = Cdat(AnfangD)
   docM.EndDate = Cdat(EndeD)
   docM.StartTime =Cdat(AnfangZ)
   docM.EndTime = Cdat(EndeZ)
   docM.CalendarDateTime =Cdat(AnfangD & " " & AnfangZ)  ’für das Einzeige in der Ansicht „Calendar“
   Call docM.ComputeWithForm( False, False )
   Call docM.Save( True, True )
   Call docM.Send( False, Einlad )

Zwei Sachen kann ich nicht  kriegen:
1. (Wichtig für mich!)
Obwohl die Einladungen an den Eingeladenen geschickt wurden, sind die Empfänger in dem Dokument nicht eingezeigt. Nachdem, als ich das Feld
docM.RequiredAttendees = Einlad
gesetzt habe, sind die Eingeladenen in dem Dokument des Empfängers angezeigt worden, aber nicht in dem Dokument des Absenders.
Wenn ich das richtig verstehe, ist in der Maske „Appointment“ das berechnete Feld
                       itmpRequiredAttendees:
@If
      (
           NamePreference = "1" & @Trim(AltRequiredNames) != "";
   AltRequiredNames;
   @Trim(RequiredAttendees)
       )
dafür verantwortlich.

Dann habe ich in dem Script alle beteiligten Felder eingesetzt:
                docM.EnterSendTo = Einlad
                docM.RequiredAttendees = Einlad
   docM.AltRequiredNames = Einlad
   docM.tmpRequiredAttendees  = Einlad
und ohne Erfolg, die Eingeladene wurden nur in dem Dokument des Empfängers angezeigt, nicht in dem Dokument des Absenders.

2.
Die Dokumente erscheinen in dem $Inbox des Empfängers und in der Ansicht ($All) des Absenders mit dem Symbol 164 (privat) markiert:

iconTwo := @If(iconOne=124;0;CSisPrivate="1"; 164;  isImportant="1"; 150; 0);
CSisPrivate := @If(@IsUnavailable($PublicAccess) & @IsAvailable($CSVersion);"1";"0");

Ich habe folgendes versucht:
DocM.$PublicAccess = “1“
und bekam die Fehler
 72: Unexpected: $PublicAccess; Expected: Identifier
Dann habe ich folgendes versucht:
   tmp = $PublicAccess
   DocM.tmp = “1“
mit der Fehlermeldung:
   74: Illegal product constant:  PublicAccess
und ehrlich zu sagen, weiss nicht weiter.

Für weiteren Typ danke sehr.
Mit freundlichen Grussen
Sofia
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: koehlerbv am 30.07.04 - 11:12:45
Systemfelder, die mit einem Dollarzeichen beginnen, können nicht auf "herkömmliche " Weise angesprochen werden. Hierfür ist entweder ReplaceItemValue zu verwenden oder - einfacher - 'ne "Mathilde" davorzustellen:
doc.~$PublicAccess = "1"

HTH,
Bernhard
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 30.07.04 - 11:31:12
Hi Bernhard,

danke danke danke .... es hat geklappt, also das 2. Prob ist gelöst
 :)
und bleibt nur 1. -> die Eingeladenen werden nicht in dem Absender-Dokument angezeigt


Viele Grussen
Sofia
Titel: Re:Notes-Kalender überschreibt Datum/Zeit auf aktuell...
Beitrag von: sja am 18.08.04 - 13:40:05
Hallo,

wenn jemand daran Interesse hat: das Problem mit Eingeladenen habe ich auf folgende Weise gelöst:

da das Feld "SendTo" nicht in der Maske "Appointment" enthalten ist, deswegen wird das auch nicht mit
Call docM.ComputeWithForm( False, False )
berechnet, vermute ich. Deshalb habe ich das Item erstellt

Dim item As NotesItem
Set item = docM.GetFirstItem( "SendTo" )

Damit sind alle meine Probleme in dem Fall erledigt.  :)

Noch mal vielen Dank für eure vorherige Hilfe

Gruesse
Sofia