Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 27.10.04 - 11:03:14
-
Hallo alle zusammen,
verzweifelt bitte ich um Hilfe und vielen Dank im voraus. Es gibt in unserer Anwendung in einem s.g. Termin-Dokument ein Schalter, der folgende Funktion ausführen sollte:
-> drei Appointments in dem Kalender des Autors erstellen: Anreise, Termin, Abreise und ggf. die Einladungen an Teilnehmern senden.
Die Funktion habe ich (mit grenzlose Danke für die Forums-Hilfe) geschafft. Die Termine mit der Übernahme allen nötigen Daten werden in dem Kalender des Autors erstellt, die Einladungen gesendet. Das Problem liegt daran, dass die Terminen in dem Kalender des Autors erscheinen nicht in der eingebetteten Planer und natürlich nicht in dem Gruppenkalender etc.
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 tmpBody As Variant
Dim tmpOrt As String
Dim tmpSubject As String
Dim tmpDokuTitel As String
Dim tmpKundenName As String
Dim rtitem As NotesRichTextItem
Dim item As NotesItem
Sub Click(Source As Button)
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 = docA.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 db = New NotesDatabase( tmpSRV, tmpMAIL )
Call MailSenden()
If uiDocA.FieldGetText("Anreisezeit") <> "" Then
tmpSubject = "Anreisezeit -> " & tmpKundenName & " -> " & tmpDokuTitel
AnfangZ = Strleft(uiDocA.FieldGetText("Anreisezeit"), "-")
EndeZ = Strright(uiDocA.FieldGetText("Anreisezeit"), "-")
If uiDocA.FieldGetText("RZbuchen") = "" Then
Einlad = ""
End If
Call MailSenden()
End If
If uiDocA.FieldGetText("Abreisezeit") <> "" Then
tmpSubject = "Abreisezeit -> " & tmpKundenName & " -> " & tmpDokuTitel
AnfangZ = Strleft(uiDocA.FieldGetText("Abreisezeit"), "-")
EndeZ = Strright(uiDocA.FieldGetText("Abreisezeit"), "-")
If uiDocA.FieldGetText("RZbuchen") = "" Then
Einlad = ""
End If
Call MailSenden()
End If
End Sub
Function MailSenden()
Set docM = db.CreateDocument
Set item = docM.GetFirstItem( "SendTo" )
docM.Form = "Appointment"
docM.AppointmentType = "3"
docM.EnterSendTo = Einlad
docM.SendTo = Einlad
docM.RequiredAttendees = Einlad
docM.AltRequiredNames = Einlad
docM.tmpRequiredAttendees = Einlad
docM.Subject = tmpSubject
docM.Location = tmpOrt
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 =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.~$PublicAccess = "1"
docM.CalendarDateTime =Cdat(AnfangD & " " & AnfangZ)
Call docM.ComputeWithForm( False, False )
Call docM.Save( True, True )
If (Einlad(0) <> "") Then
Call docM.Send( False, Einlad )
End If
Call docM.Save( True, True )
Danke und viele Gruessen
Sofia
-
Von welchem Gruppenkalender und welchem eingebetteten Planer redest Du ?
Allgemein tippe ich, daß bestimmte Felder nicht gesetzt sind, die für Anzeige benötigt werden. Welche genau, kann ich dir leider nicht sagen.
Ach ja, die Zeile hier in der Function MailSenden ist überflüssig ;)
Set item = docM.GetFirstItem( "SendTo" )
-
Auf jeden Fall fehlt schon mal das für C & S entscheidende Item $BusyName.
Schau Dir einfach mal die Items in einem Kalendereintrag bei Dir an.
HTH,
Bernhard
-
Hallo Driri,
Hallo Bernhard,
vielen Dank für eure Aufmerksamkeit,
Driri,
wenn Du die Maske « Appointment » in Notes-Mail-Datei öffnest, dann wirst Du schon sehen, was meine ich unter eingebetteten Planer
Die Zeile „Set item = docM.GetFirstItem( "SendTo" )“ ist hier tatsächlich überflüssig, aber das ist in dem Fall irrelevant.
Bernhard,
nach deine frühere Hilfe mit DocM.~$PublicAccess = "1", habe ich doch mit
DocM.~$BusyPriority ="1"
schon auch ausprobiert, hat nicht geholfen.
Und da ich weiss nicht wie mit dem eingebetteten Planer in der Notes-Kalender umzugehen, habe ich in Frontend auch folgendes versucht:
Function MailSenden()
…
…
Call docM.ComputeWithForm( False, False )
Call docM.Save( True, True )
%REM
If (Einlad(0) <> "") Then
Call docM.Send( False, Einlad )
End If
Call docM.Save( True, True )
%END REM
Set uiDocM = ws.EditDocument( True, docM )
In diesem Fall die Emails an den Teilnehmer werden nicht gesendet, sondern wird in der Notes-Kalender des Autors im Backend erstellte Appointment geöffnet und man sollte eigentlich auf die Schalter „Speichern und Einladungen senden“ klicken. Das Problem nur in dem Fall, dass alle Daten werden in Appointment übernommen, ausser Eingeladenen.
Wie ich verstanden habe ist dafür das Feld
„RequiredAttendees“
verantwortlich und obwohl das Feld habe in im Backend gesetzt
Set item = docM.AppendItemValue( "RequiredAttendees" , Einlad)
und in den Eigenschaften des Dokuments das Feld ist zu sehen und zwar mit dem richtigen Wert, beim Öffnen des Dokumentes ist das Feld nicht mehr da.
Wenn ich damit ausprobiert:
Call uiDocM.FieldSetText("RequiredAttendees ", Einlad)
Bekam ich “Notes Fehler – Das Feld nicht gefunden”.
Dann habe ich auch folgendes versucht:
Call uiDocM.FieldSetText("EnterSendTo", Einlad)
und obwohl in dem Feld in Frontend erscheint richtigen Wert, trotzdem mit dem Klick auf den Schalter „Speichern und Einladungen senden“, Einladungen werden nicht gesendet und den Termin wird nicht in dem Planer zu sehen.
Gruessen
Sofia
-
Hallo Bernhard.
Du hattest ja Recht (wie immer) mit dem Item $BusyName. Alles Funktioniert in Backend.
Du bist eine Perle und hast mir das Leben gerettet. Meine Dankbarkeit hat keine Grenzen. :)
Vielen vielen Dank
Sofia
-
ja, es funktioniert schon besser, aber nicht ganz. Die Termine von Autor erscheinen jetzt erst in dem Planer, aber nachdem Teilnehmer den Termin annehmen, bzw. ablehnen, verschwindet der Termin aus dem Planer des Autors.
Source sieht jetzt bei mir so aus:
...
...
DocM.~$PublicAccess = "1"
DocM.~$BusyName = tmpAutor
DocM.~$AltPrincipal = tmpAutor
docM.CalendarDateTime =Cdat(AnfangD & " " & AnfangZ)
Call docM.ComputeWithForm( False, False )
Call docM.Save( True, True )
If Not(Isarray(Einlad)) Then
docM.SendTo = Evaluate(|@Trim(@Explode('| & Einlad & |';','))|, docM)
Else
docM.SendTo = Einlad
End If
docM.RequiredAttendees = docM.SendTo
docM.AltRequiredNames = docM.SendTo
docM.tmpRequiredAttendees = docM.SendTo
If (docM.SendTo(0) <> "") Then
Call docM.Send( False, SendTo )
End If
DocM.~$BusyPriority = "1"
Call docM.Save( True, True )
Es fehlt noch was. Was ist eigentlich "C & S" ?
Vielen Dank für weitere Hilfe.
Gruesse
Sofia
-
Hallo
wnn jemand dafür Interesse hat, das Problem mit der Erstellung eines Termins in der Notes Calender von einer Anwendung aus, habe ich auf folgende Weise glöst:
ich habe die Backend und Frontend susammen verwendet (s. Script unten) trotz der Warnung von Bernhard (er sagte mal, dass entweder in Backend oder in Frontend programmiert werden sollte, aber kann sein, dass ich ihn falsch verstanden habe ).
Also, jetzt funktioniert alles einwandfrei
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 tmpBody As Variant
Dim tmpOrt As String
Dim tmpSubject As String
Dim tmpDokuTitel As String
Dim tmpKundenName As String
Dim rtitem As NotesRichTextItem
Dim tmpAutor As String
Dim nid As String
Dim itemTo As NotesItem
Dim tmpAppointmentType As String
Sub Click(Source As Button)
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
tmpAutor = uiDocA.FieldGetText("Autor")
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")
Einlad = uiDocA.FieldGetText("SendTo")
Set db = New NotesDatabase( tmpSRV, tmpMAIL )
If Einlad = "" Then
tmpAppointmentType = "0"
Else
tmpAppointmentType = "3"
End If
Call MailSenden()
If uiDocA.FieldGetText("Anreisezeit") <> "" Then
tmpSubject = "Anreisezeit -> " & tmpKundenName & " -> " & tmpDokuTitel
AnfangZ = Strleft(uiDocA.FieldGetText("Anreisezeit"), "-")
EndeZ = Strright(uiDocA.FieldGetText("Anreisezeit"), "-")
If uiDocA.FieldGetText("RZbuchen") = "" Then
Einlad = ""
tmpAppointmentType = "0"
End If
Call MailSenden()
End If
If uiDocA.FieldGetText("Abreisezeit") <> "" Then
tmpSubject = "Abreisezeit -> " & tmpKundenName & " -> " & tmpDokuTitel
AnfangZ = Strleft(uiDocA.FieldGetText("Abreisezeit"), "-")
EndeZ = Strright(uiDocA.FieldGetText("Abreisezeit"), "-")
If uiDocA.FieldGetText("RZbuchen") = "" Then
Einlad = ""
tmpAppointmentType = "0"
End If
Call MailSenden()
End If
End Sub
Function MailSenden()
Set uiDocM = ws.composeDocument(tmpSRV, tmpMAIL, "Appointment",4,4)
Call uiDocM.FieldSetText("AppointmentType", tmpAppointmentType)
Call uiDocM.Refresh
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 docM = uiDocM.Document
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.RepeatStartDate = Cdat(AnfangD)
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.EnterSendTo = Einlad
docM.Subject = tmpSubject
docM.Location = tmpOrt
docM.Body = tmpBody
Call docM.Save( True, True )
uiDocM.Reload
Call uiDocM.Save
uiDocM.Close
End Function
Weiss nicht, wie soll ich markieren, dass die Thema gelöst ist ?
Gruessen
Sofia
-
Hoshee arbeitet an diesem Problem. Unterdessen gibt es einen Würgaround, beschrieben in den Regeln (siehe Buhtong oben) unter Abschnitt 3.5
-
;D Lustiges Zitat, wo hast Du das bloss gefunden? ;D
-
Hab' gerade die Adresse verlegt. Muss ich aber wieder suchen - ist ein absolut geniales Notes / Domino-Forum mit tollen Autoren. "Noteswinker" heisst da einer ;-)
Bernhard ;D
PS: Ich war halt hilfsbereit - und faul ...