Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: mh70220 am 26.04.05 - 14:56:49
-
Hallo zusammen,
im folgenden Script versuche ich im "Abschnitt 1:" eine Dokumentenverknuepfung zum aktuellen Dokument mitzusenden. Funktioniert aber nicht. Kann mal jemand sich das Script anschauen und mir vielleicht sagen wo der fehler ist.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim doc1 As NotesDocument
Dim rtitem As NotesRichTextItem
Dim uidoc As NotesUIDocument
Dim status1 As String
Dim db As NotesDatabase
Dim db1 As NotesDatabase
Dim mail As String, mail1 As String, mail2 As String, mail3 As String, mail4 As String, statusab As String, supier As String, abgrund As String
Set db1 = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set doc1 = New NotesDocument ( db1)
Set rtitem = New NotesRichTextItem( doc1, "Body" )
abgrund = uidoc.fieldgettext("DirektVorgesetzBemerk") +" " + uidoc.fieldgettext("VorgesetzBemerk") +" " + uidoc.fieldgettext("LeiterBemerk")
status1 = uidoc.fieldgettext("status")
If uidoc.IsNewDoc Then 'wenn neues Doc, dann vor unterschreiben erst speichern
Call uidoc.Save
End If
If doc.Isnewnote Then 'prüfen ob geändert, dann vor unterschreiben erst speichern
Call doc.Save( False, True )
End If
Call doc.Sign
Call doc.Save( False, True )
Set db = session.CurrentDatabase
Set doc = New NotesDocument( db )
mail = uidoc.fieldgettext("ImmediateSuperior")
mail1 = uidoc.fieldgettext("Superior")
mail2 = uidoc.fieldgettext("Director")
mail3 = uidoc.fieldgettext("CreationBy")
mail4 = uidoc.fieldgettext("currentuser")
statusab = uidoc.fieldgettext("statusabgelehnt")
supier = uidoc.fieldgettext("ImmediateSuperior")
If statusab = "1" Then
Call uidoc.fieldsettext("status", "5")
doc.Form = "Memo"
doc.SendTo = mail3
doc.Subject = "Ihr Urlaubsantrag wurder abgelehnt von " + mail4
doc.Body = "Aus folgenden Grund wurde der Antrag abgelehnt:" + " " + abgrund
Call doc.Send( False )
Goto ausgang
End If
Call doc.Sign
Call doc.Save( False, True )
If Status1 = "0" Then
Goto Abschnitt1
Else
If Status1 = "1" Then
Goto Abschnitt2
Else
If Status1 = "2" Then
Goto Abschnitt3
End If
End If
End If
Abschnitt1:
If mail = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call rtitem.AppendDocLink(db1 , "Dokumentverknüpfung zu Urlaubsantrag " )
Call doc.Send( False )
Goto Ausgang
Abschnitt2:
If mail1 = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail1
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call doc.Send( False )
Goto Ausgang
Abschnitt3:
If mail2 = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail2
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call doc.Send( False )
Goto Ausgang
Ausgang:
Call uidoc.close
End Sub
Danke
Matthias
-
Habs jetzt nur überflogen :
1) Warum wird db1 bei AppendDocLink übergeben ?
2) Wenn der DocLink auf doc1 verweisen soll, muß das DOkument vorher gespeichert sein. Ich hab jetzt kein Save für doc1 gesehen.
-
Da ist noch mehr verquer.
doc1 wird nur instantiiert als neues Dokument und dann ein RTItem generiert. In dieses wird der DocLink gehangen. Sicherlich soll eigentlich dieses Dokument gesendet werden, statt dessen erfolgen alle anderen Aktionen mit doc. doc hat natürlich auch nicht RTItem.
Weiterhin ist es nicht gut, so wild Front- und Backend-Bezüge auf ein Dokument zu mischen - der Mailversand sollte komplett im Backend erfolgen (was via doc1 ja gegeben wäre, wenn der gute Vorsatz nicht wieder abgebrochen worden wäre).
Die vielen Gotos machen das Programm schwer nachvollziehbar und erschweren später die Wartung.
Bernhard
-
OK,
ich habe gerade mal aus dem Script alles das entfernt, was ich fuer die Dokumenten verknuepfung reingeschrieben hatte.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim status1 As String
Dim db As NotesDatabase
Dim mail As String, mail1 As String, mail2 As String, mail3 As String, mail4 As String, statusab As String, supier As String, abgrund As String
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
abgrund = uidoc.fieldgettext("DirektVorgesetzBemerk") +" " + uidoc.fieldgettext("VorgesetzBemerk") +" " + uidoc.fieldgettext("LeiterBemerk")
status1 = uidoc.fieldgettext("status")
If uidoc.IsNewDoc Then 'wenn neues Doc, dann vor unterschreiben erst speichern
Call uidoc.Save
End If
If doc.Isnewnote Then 'prüfen ob geändert, dann vor unterschreiben erst speichern
Call doc.Save( False, True )
End If
Call doc.Sign
Call doc.Save( False, True )
Set db = session.CurrentDatabase
Set doc = New NotesDocument( db )
mail = uidoc.fieldgettext("ImmediateSuperior")
mail1 = uidoc.fieldgettext("Superior")
mail2 = uidoc.fieldgettext("Director")
mail3 = uidoc.fieldgettext("CreationBy")
mail4 = uidoc.fieldgettext("currentuser")
statusab = uidoc.fieldgettext("statusabgelehnt")
supier = uidoc.fieldgettext("ImmediateSuperior")
If statusab = "1" Then
Call uidoc.fieldsettext("status", "5")
doc.Form = "Memo"
doc.SendTo = mail3
doc.Subject = "Ihr Urlaubsantrag wurder abgelehnt von " + mail4
doc.Body = "Aus folgenden Grund wurde der Antrag abgelehnt:" + " " + abgrund
Call doc.Send( False )
Goto ausgang
End If
Call doc.Sign
Call doc.Save( False, True )
If Status1 = "0" Then
Goto Abschnitt1
Else
If Status1 = "1" Then
Goto Abschnitt2
Else
If Status1 = "2" Then
Goto Abschnitt3
End If
End If
End If
Abschnitt1:
If mail = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call doc.Send( False )
Goto Ausgang
Abschnitt2:
If mail1 = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail1
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call doc.Send( False )
Goto Ausgang
Abschnitt3:
If mail2 = "" Then
Goto Ausgang
End If
doc.Form = "Memo"
doc.SendTo = mail2
doc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
Call doc.Send( False )
Goto Ausgang
Ausgang:
Call uidoc.close
End Sub
Kann jemand das Script so erweitern, das in Abschnitt 1 - 3 in der Mail eine Verknuepfung zum aktuellen Dokument mitgeschickt wird.
Die vielen "GoTo" gefallen mir auch noch nicht und werde auch daran noch arbeiten.
Danke schon jetzt.
Matthias
-
Hi,
dein Code glänzt nicht gerade vor Übersichtlichkeit, aber ich versuche mal dich in die richtige Richtung zu lenken.
Als erstes brauchst du für dein Mail eine andere Variable als doc, denn sonst hast du kein Zugriff mehr für den Link.
...
Dim newdoc As NotesDocument
Dim rtitem As NotesRichtextItem
...
...
Set db = session.CurrentDatabase
Set newdoc = New NotesDocument( db )
...
...
Abschnitt1:
If mail = "" Then
Goto Ausgang
End If
newdoc.Form = "Memo"
newdoc.SendTo = mail
newdoc.Subject = "Ein neuer Urlaubsantrag wartet auf Ihre Bearbeitung"
'RTF-Feld anlegen
Set rtitem = New NotesRichTextItem( newDoc, "Body" )
'Link zum Dokument einfügen
Call rtitem.AppendDocLink(doc, "")
Call newdoc.Send( False )
Goto Ausgang
...
Ich hab's nur mal exemplarisch für einen Abschnitt gemacht. Das auf die anderen Abschnitte anzuwenden, sollte kein Problem darstellen.
Axel
-
Hi,
dein Code glänzt nicht gerade vor Übersichtlichkeit,
Ich würde das eher einen terroristischen Anschlag auf die Nerven sämtlicher Leute bezeichnen, die später in diesem code etwas ändern/fixen müssen.
Warum kaufen sich Leute wie du nicht einfach mal ein Buch wie dieses:
http://www.amazon.de/exec/obidos/ASIN/0735619670/qid=1114525403/sr=8-2/ref=sr_8_xs_ap_i2_xgl/028-9496007-5489363
(von Microsoft Press btw.)
Von der ersten und ausreichenden Ausgabe, gibt es auch eine deutsche Übersetzung.
Gruß Axel
-
erst mal danke fuer die Hilfe. Funktioniert wunderbar.
Und das mit dem Buch werde ich wohl auch machen. ;D
Matthias
-
Ich würde das eher einen terroristischen Anschlag auf die Nerven sämtlicher Leute bezeichnen, die später in diesem code etwas ändern/fixen müssen.
Ganz so krass wollte ich es nicht ausdrücken. ;D
Axel