Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Alexis am 15.09.04 - 16:15:01

Titel: Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 15.09.04 - 16:15:01
Hallo Forum,

mühsam ist es mir gelungen aus einem Querysave eines Dokumentes einen "Reminder" in den Kalender etwa mit folgenden Code zu setzen.  

Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As notessession
Dim db As notesdatabase
Dim ws As notesuiworkspace
Dim view As notesview
Dim doc As notesdocument

Dim db2 As New NotesDatabase ("Mailserver",Mailbox)
Dim uidoc2 As NotesUIDocument
Dim dbserver As String
dbserver = db2.server
dbfilename=db2.filepath
Set ws = New notesuiworkspace
Set uidoc2 = ws.ComposeDocument (dbserver,dbfilename,"Appointment")
StartDate=source.FieldGetText("DueDate")
Call uidoc2.FieldSetText("AppointmentType","4")
Call uidoc2.Reload
Call uidoc2.FieldSetText("Subject","Reminder")
Call uidoc2.FieldSetText("StartDate", StartDate)
Call uidoc2.FieldSetText("Body", Chr(10) & "Today is Due Date for …… ”)
Call uidoc2.FieldSetText("AppointmentType", "Reminder")
Call uidoc2.Save()
Call uidoc2.Close()
End Sub

Nun möchte ich gern auch noch den Link zurück auf das erzeugende Dokument mit in den Reminder übertragen.

Mein Bemühen aus dem Forum mittels der Beispiele für doclink den weiteren Code zu generieren ist kläglich an Unkenntnis gescheitert. Kann mir jemand unter die Arme greifen?

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Axel am 15.09.04 - 18:55:11
Hi,

du erstellst das Kalender-Dokument mittels Frontend-Methoden. Besser ist es das Ganze mit Backend-Funktionen zu realisieren. Dann kannst du auch problemlos einen Doclink einfügen. Ich hab so was mal für Aufgaben gemacht.
Die Umstellung auf ein Kalender-Dokument sollte kein Problem darstellen.

Hier ein Code-Auszug:

Zitat
...

Dim rtitem As NotesRichTextItem

...
'Prüfen ob Mail-DB vorhanden
Set maildb = New NotesDatabase("","")
Call maildb.OpenMail
If Not maildb.IsOpen Then
   Messagebox "Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es wird keine Aufgabe erstellt.", 16, "Adressen"
   Exit Sub
End If  'If Not maildb.IsOpen Then

'Neue Aufgabe erstellen
Set taskdoc = New NotesDocument(maildb)
taskdoc.Form = "Task"
Call taskdoc.ComputeWithForm(True, True)

taskdoc.Subject = "Aufgabe zu einem Vorgang"
   
'Anlegen und füllen des Richtextfeldes
Set rtitem = taskdoc.CreateRichTextItem("Body" )
Call rtitem.AppendText("Hier kommt der Doclink")   
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Vorgang -> ")   
Call rtitem.AppendDocLink(doc, "")

Call taskdoc.Save(True,False)

...

Axel
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 16.09.04 - 11:53:09
Hallo,

mein Script sieht derzeit so aus:

Dim rtitem As NotesRichTextItem
         Dim maildb As NotesDatabase
         Dim Mailbox As String
         Dim uidoc As notesuidocument
         Dim doc As NotesDocument
         Dim workspace As notesuiworkspace
         Dim currentdoc As NotesDocument
         Set workspace = New notesuiworkspace
         Set uidoc = workspace.currentdocument  
         Set doc = uidoc.Document  
         
         ID=source.FieldGetText("ID_Owner")      
         Mailbox="Mail\ABC" & ID & ".NSF"
         
'Prüfen ob Mail-DB vorhanden
         Set maildb = New NotesDatabase("Mail007.XYZ.COM","Mailbox")
         Call maildb.OpenMail
         If Not maildb.IsOpen Then
            Messagebox "Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es wird keine Aufgabe erstellt.", 16, "Adressen"
            Exit Sub
         End If  'If Not maildb.IsOpen Then
         
'Neue Aufgabe erstellen
         Set taskdoc = New NotesDocument(maildb)
         taskdoc.Form = "Task"
         Call taskdoc.ComputeWithForm(True, True)
         
         taskdoc.Subject = "Aufgabe zu einem Vorgang"
         
'Anlegen und füllen des Richtextfeldes
         Set rtitem = taskdoc.CreateRichTextItem("Body" )
         Call rtitem.AppendText("Hier kommt der Doclink")  
         Call rtitem.AddNewLine(2)
         Call rtitem.AppendText("Vorgang -> ")  
         Call rtitem.AppendDocLink(doc, "Dokumentenlink")
         
         Call taskdoc.Save(True,False)

Leider kommt in der vorletzten Zeile die Fehlermeldung:
<Could't get default view id for database> hoch.

Was fehlt da noch?

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Driri am 16.09.04 - 12:04:01
Hat die Datenbank denn eine Standardansicht ? Sonst gibts Probleme bei verschiedenen Funktionen.
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 16.09.04 - 12:06:30
Die Datenbank hat noch keine Standard-View, kann sie  aber sofort einrichten und teste den Vorgang abermals.

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 16.09.04 - 12:13:32
Hallo Driri,

das war's.

Vielen Dank für den Tipp.

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 16.09.04 - 14:18:16
Hallo Forum,

leider ist der Fall doch noch nicht abgeschlossen.

Die Verbindung mit einem Task-Eintrag klappt, ich möchte aber einen Reminder-Eintrag generieren. Also setze ich Form = "Appointment" und AppointmentType = "4" (siehe Code). Nun erhalte ich die vielsagende Fehlermeldung: Validation failed.

Dim rtitem As NotesRichTextItem
         Dim maildb As NotesDatabase
         Dim Mailbox As String
         Dim uidoc As notesuidocument
         Dim doc As NotesDocument
         Dim workspace As notesuiworkspace
         Dim currentdoc As NotesDocument
         Set workspace = New notesuiworkspace
         Set uidoc = workspace.currentdocument  
         Set doc = uidoc.Document  
         
         ID=source.FieldGetText("ID_Owner")      
         Mailbox="Mail\ABC" & ID & ".NSF"
         
'Prüfen ob Mail-DB vorhanden
         Set maildb = New NotesDatabase("Mail007.XYZ.COM","Mailbox")
         Call maildb.OpenMail
         If Not maildb.IsOpen Then
            Messagebox "Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es wird keine Aufgabe erstellt.", 16, "Adressen"
            Exit Sub
         End If  'If Not maildb.IsOpen Then
         
'Neue Aufgabe erstellen
         Set taskdoc = New NotesDocument(maildb)
         taskdoc.Form = "Appointment"
taskdoc.appointmenttype = "4"

         Call taskdoc.ComputeWithForm(True, True)
         
         taskdoc.Subject = "Aufgabe zu einem Vorgang"
         
'Anlegen und füllen des Richtextfeldes
         Set rtitem = taskdoc.CreateRichTextItem("Body" )
         Call rtitem.AppendText("Hier kommt der Doclink")  
         Call rtitem.AddNewLine(2)
         Call rtitem.AppendText("Vorgang -> ")  
         Call rtitem.AppendDocLink(doc, "Dokumentenlink")
         
         Call taskdoc.Save(True,False)

Weiss jemand den Grund?

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Axel am 16.09.04 - 16:59:08
Hi,

Wann erhälst du den die Fehlermeldung? Bestimmt beim Speichern, richtig?

Wahrscheinlich ist eines der Felder nicht oder nicht richtig gefüllt. Wie ich das sehe, hast du mein Beispiel fast 1-zu-1 übernommen. Da das aber nur ein Beispiel für das einfügen eines Doclinks war fehlen da noch so einige Felder.

In deinem ersten Posting hast du ja noch so Felder wie DueDate, StartDate und AppointmentType gesetzt. Versuche mal die Felder entsprechend zu setzen.

Axel
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 16.09.04 - 17:49:57
Hallo Axel,

Dein Code war mir grad recht!

Beim Experimentieren ging's mir drum:

1. Statt Task-Eintrag den Reminder-Eintrag (AppointmentType=4) zu generieren. Beim ersteren habe ich keinerlei Probleme gesehen.

2. Einige Felder zu übergeben.

Ich werde Deinem Rat folgend alle Felder noch einmal in Ruhe checken, erst Recht ob es sich dabei um Mussfelder handelt.

Alexis
Titel: Re:Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 18.09.04 - 22:32:22
Hi @all,

die Krux lag an der Übergabe der Datumsfelder! Die Formatierung ist (für mich) wirklich ein Buch mit 7 Siegeln.

Allen Tippgebern ein Dankeschön. Meine Aufgabenstellung ist nunmehr bestens gelöst.

alexis
Titel: Re: Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 13.12.04 - 14:47:14
Hallo Forum,

meine Euphorie war etwas zu laut. Die Funktion klappt bestens nur dass ich neben dem Eintrag als Reminder auch noch einen Eintrag als Mail Draft erhalte, was von mir nicht gewünscht ist.

Hat jemand eine Idee woran das liegt?

Hier der betreffende Code-Ausschnitt:

Set taskdoc = New NotesDocument(maildb)
         taskdoc.Form = "Appointment"
         taskdoc.appointmenttype = "4"     
         taskdoc.ReplaceItemValue "$Alarm", 1
         taskdoc.ReplaceItemValue "$AlarmMemoOptions", "2"
         taskdoc.ReplaceItemValue "$AlarmSendTo", UName
         taskdoc.ReplaceItemValue "$AlarmDescription",  subject
         taskdoc.ReplaceItemValue "$AlarmSound", "Defsound"
         taskdoc.ReplaceItemValue  "ViewIcon",    "67" 
         taskdoc.Alarms= "1"
         taskdoc.Principal = UName
         taskdoc.StartDateTime = Cdat(duedate)
         taskdoc.StartDate = Cdat(duedate)
         taskdoc.StartTime=Cdat(duedate)
         taskdoc.EndDate=Cdat(duedate)
         taskdoc.Endtime=Cdat(duedate)
         taskdoc.EndDateTime=Cdat(duedate)
         taskdoc.CalendarDateTime=Cdat(duedate)
         taskdoc.Subject = "Action Item Reminder"
         Set rtitem = taskdoc.CreateRichTextItem("Body")         
         Call rtitem.AddNewLine(2)
         Call rtitem.AppendText("Action Item No. " & aino & " has a Due Date for Today")   
         Call rtitem.AddNewLine(2)
         Call rtitem.AppendText("Use Link to Action Item in SupportLineTool - Database --> ")   
         Call rtitem.AppendDocLink(doc, "Document Link")
         Call taskdoc.ComputeWithForm(True, True)
         Call taskdoc.Save(True,True)

Alexis
Titel: Re: Doclink in Reminder einfügen per LS
Beitrag von: Axel am 13.12.04 - 14:54:48
Hi,

füge die fettgedruckte Zeile an die entsprechende Stelle in deinen Code ein. Dann sollte das funktionieren.

...
taskdoc.ReplaceItemValue "$AlarmSound", "Defsound"
taskdoc.ReplaceItemValue  "ViewIcon",    "67" 
taskdoc.Alarms= "1"
taskdoc.Principal = UName
taskdoc.ExcludeFromView = "D"
taskdoc.StartDateTime = Cdat(duedate)
...


Axel
Titel: Re: Doclink in Reminder einfügen per LS
Beitrag von: Alexis am 13.12.04 - 15:08:17
@Alex,

Super! Woher wisst Ihr das immer :o.

Danke

Alexis
Titel: Re: Doclink in Reminder einfügen per LS
Beitrag von: Semeaphoros am 13.12.04 - 15:10:26
Super! Woher wisst Ihr das immer :o.

Alexis, noch nicht gemerkt, dass wir alle Dir über die Schultern schauen ......  ;D
Titel: Re: Doclink in Reminder einfügen per LS
Beitrag von: Axel am 13.12.04 - 15:19:57
Super! Woher wisst Ihr das immer :o.

Ich hatte das gleiche Problem. Da hab' ich mit auf Entdeckertour in die Mail-Schablone begeben. Da findet man so einiges. unter anderem auch die berühmte "Stecknadel im Codehaufen".  ;)


Axel