Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Jeremias am 13.09.07 - 15:30:15

Titel: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 15:30:15
Hallo,
ich weiss das die Modifikation des Mailtemplates böse ist.  :-P Trotzdem muss ich es tun... :P

Die Anforderung ist, eine zusätzliche Checkbox im Memo zu haben, welche nach dem Senden der Mail abgefragt wird. Daraufhin (wenn Haken gesetzt) wird die Mail in ein neues Dokument einer anderen DB kopiert, wo der Benutzer zusätzliche Informationen angibt. Dann soll dieses Dokument gespeichert werden, die Checkbox im Memo wieder gelöscht werden und alles seinen gewohnten Gang gehen.

Mein Problem ist hierbei das "unchecken" der Checkbox und Abfragen des Haken an der richtigen Stelle.
Nicht dass ich ein Problem mit dem Code hätte, sondern vielmehr das Plazieren desselbigen in dem/den richtigen Event/s. Steh da irgendwie aufm Schlauch.

Das Queryclose-Event ist gut zum Abfragen des Haken und Erstellen des neuen Dokuments in der neuen Db, doch wie kann ich dann noch den Haken entfernen ?

Weiß jmd. Rat ?

Mfg
Jeremias M.



Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 15:57:43
Vielleicht verstehe ich das Problem noch nicht ganz, denn mir erscheint das ganz einfach:

QueryClose ist sicherlich schon mal eine mögliche Stelle, ich würde vermutlich PostSave verwenden.
Dort wird das Item hinter der CheckBox wieder entfernt und das Dokument als ganzes in Deine 2. DB geworfen (und dort ggf. gleich im FrontEnd geöffnet).

Problem: Da das Dokument ja nochmals gespeichert werden muss (zum Entfernen des Items im Backend), müsste man noch einen Weg finden herauszubekommen, ob der Userd as Dokument überhaupt speichern wollte. Das ist m.E. DER casus cnactus. Das heisst ... Im QueryClose lässt sich ja ermitteln, ob das Dokument auch in der DB gelandet ist.

HTH,
Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 16:09:48
Also ich glaube Du hast das schon ganz richtig verstanden.
Allerdings stellt sich bei einem versandten Mail die Frage des Speichern doch eigentlich gar nicht. Ein versandtes Mail ist ja immer nachher unter "Sent" wiederzufinden.... Also wird es immer gespeichert.

Mir fällt auch grad auf, dass ich den Haken noch vorm Senden entfernen muss. Denn interne Mails (an user mit dem selben Template) würden dann ja beim Empfänger auch die genannte Ablage-Aktion beim Schliessen hervorrufen, was natürlich nur beim Senden gewünscht ist....

Hmmm.... jetzt wirds kniffelig
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 16:18:41
Vorab noch etwas anderes: Wenn man wirklich weiss, was man tut, ist am Modifizieren des Mailtemplates nichts auszusetzen. Dieses stellt letztlich nur einen Vorschlag von IBM Lotus dar.

Zu Deinem speziellen Problem:
Gesendete Mails werden nicht prinzipiell gespeichert. Wenn Du angibst "Nur senden", wird das Mail nicht gespeichert! Mit Bezug zu dem oben gesagten: Da musst Du dringend noch Know-How erwerben, sonst wird es wirklich gefährlich.

Zu Deinem ganz speziellen Problem: Als einfachste Lösung kannst Du die Checkpost per hide-when ausblenden (@IsTime (PostedDate)).
Komplexer: Du entfernst das Item bereits im QuerySend und belegst statt dessen eine maskenglobale Variable.
Oder: Du verzichtest ganz auf die CheckBox und machst das ganze per MessageBox-FUnction.

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Thomas Schulte am 13.09.07 - 16:22:53
In den CoreEmailClasses die PostSaveExtension anzapfen.
Und zwar musst du da schauen was hier mit übergeben wird:
Die Werte von lngActionInProgress die dich interessieren könnten

Const MEMO_SEND                   =         &h00000400&
Const MEMO_WASMAILED             =         &h00010000&
oder
Const MEMO_SEND_FILE             =         &h00200000&

sein.

Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 16:45:19
Ok, komm um die CoreClasses wohl nicht drumrum. Bin auch schon daran zugange....
Was ich prinzipiell komisch finde, ist das MEMO_SEND als Konstante bei der SendAction eine Wertzuweisung erfährt.
Sowas wird von nem üblichen Compiler einer normalen Programmiersprache mit übelsten Beschimpfungen quitiert...

Wie dem auch sei, ich probier mal weiter...
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 16:59:24
Was ich prinzipiell komisch finde, ist das MEMO_SEND als Konstante bei der SendAction eine Wertzuweisung erfährt.

Wo siehst Du das?

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 17:16:32
CoreEmailClasses:

Code
Const MEMO_SEND 						=			&h00000400&

Send Action:

Code
MEMO_SEND:="1024";
FIELD ActionInProgress:=MEMO_SEND;
@If(@Command([FileSave]);@Command([FileCloseWindow]);@Return(""))

oder wissen die nix voneinander ?
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Tode am 13.09.07 - 17:27:16
das eine ist eine Script- Bibliothek, das andere eine Notes- Formel. Die wissen überhaupt nix voneinander...

Du brauchst dringend Basics, sonst wird Dein Stunt in die Hose gehen...

Tode
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 17:28:30
Jetzt würde ich aber wirklich sagen: Vorsicht mit den Änderungen am Mailtemplate, hier fehlt noch Basiswissen.

Ad Buttoncode:
- Die temporäte Variable MEMO_SEND wird belegt (gilt nur innerhalb des Buttons)
- Das Item ActionInProgress im Dokument wird mit dem Inhalt der Variablen MEMO_SEND belegt.

Ad Buttons allgemein:
Vergess die einfach. Die lösen nur aus, was WIRKLICH passiert. Beispiel: Esc - Cursor rechts - Enter sendet beispielsweise das aktuelle Mail (OHNE SPEICHERN).

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 17:47:55
Ja, du hast recht mit den Gültigkeitsbereichen von Variablen in Notes hab ich durchaus meine Probleme...
Finde das aber auch ziemlich undurchsichtig.
Vorallem wg. der Mischung verschiedener "Programmiersprachen", wenn ich das jetzt mal so falsch bezeichnen darf. Und der mangelhaften Debugmöglichkeiten meiner Meinung nach.
Ich würde z.B. gerne mal genau Verfolgen was beim Ablauf von Formula im Hintergrund passiert.

Trotzdem muss ich da jetzt weiterkommen. Habe z. Glück die Möglichkeit die Änderungen zu testen....

Gruß
Jeremias


Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 17:57:04
Finde das aber auch ziemlich undurchsichtig.

Hallo Jeremias,
was ist da undurchsichtig? Was willst Du an @functions gross debuggen (by the way - R5 hatte in einigen Versionen einen undokumentierten Formel-Debugger dabei, aber dessen Abgang haben dann wohl doch nicht genug Programmierer bedauert) - da findet das meiste ja eh in der API statt.

Weiters halte ich es nicht für ungewöhnlich, dass sich grosse Systeme über mehr als eine Programmiersprache anpassen, füttern und bedienen lassen.

Trotzdem muss ich da jetzt weiterkommen. Habe z. Glück die Möglichkeit die Änderungen zu testen....
Hm, ich befürchte, testen alleine reicht da momentan noch nicht. Frag hier dann lieber nochmal nach. Soweit möglich, werden hier bestimmt einige gern behilflich sein (im Rahmen des möglichen).

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Thomas Schulte am 13.09.07 - 18:07:02
das eine ist eine Script- Bibliothek, das andere eine Notes- Formel. Die wissen überhaupt nix voneinander...

Du brauchst dringend Basics, sonst wird Dein Stunt in die Hose gehen...

Tode
Das stimmt so nicht ...
Die wissen schon voneinander .... Das Feld wird gesetzt und in der Klasse wieder ausgelesen und gelöscht.

CoreEmailClasses Funktion ...
Code
Public Function GetActionInProgressFromNoteItem()
		If Me.m_noteMemo.HasItem(ITEM_ACTIONINPROGRESS) Then	
			Call SetActionInProgress(Val(Me.m_noteMemo.GetItemValue(ITEM_ACTIONINPROGRESS)(0)))
			Call SetOptionField(ITEM_ACTIONINPROGRESS,ITEM_REMOVE)
		End If
	End Function
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 18:10:12
Thomas, Torsten hat - bezogen auf die Frage von Jeremias - aber vollkommen Recht, und dass er hier weiss, was Du weisst, steht ausser Frage.
 Verwirr jetzt Jeremias nicht  ;)

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 18:10:22
Ok, weiter im Text:

Also PostSaveExtension sieht gut aus... scheint ja extra für sowas gemacht zu sein. (Auch wenn sich das jetzt laienhaft anhört)

Hier gibts ja sogar das uidoc und lngActionInProgress um Statusahängig arbeiten zu können.
Zu Eurer Beruhigung: Ansonsten ist das Template im Urzustand.

Was schonmal klappt, ist das Auslesen des "Haken"-Items und abhängig davon es zu löschen und zu speichern.
Allerdings haut das Öffnen des "Ablage-UIDocs" im aktuellen workspace nicht hin...
 Hier mal mein Code :
Code
Function PostSaveExtension(Source As notesUIdocument, lngActionInProgress As Long) As Integer
	'These function are provided as event callouts, allowing easy flow control, extensions and modifications
	
	If Source.Document.Ablage(0) = "1" Then
		Dim wstemp As New NotesUIWorkspace
		Dim uidoctemp As NotesUIDocument
		Set uidoctemp = wstemp.ComposeDocument("","andereDB.nsf","EMailAblage")
		Source.Document.Ablage = ""
		Call source.Document.Save(True,False)
	End If
	
	
	PostSaveExtension = True
	
End Function

Wahrscheinlich kann ich hier nicht - wie sonst in eigenen Anwendungen - mir eine Workspace-Variable holen ...
Es muss wohl irgendwie im Context der CoreClasses ablaufen.

Ich gebe ja zu, dass dies das erste Mal ist, dass ich mich in eine so komplexe Anwendung "einklicke".
Aber irgendwann ist immer das erste Mal. :)
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Thomas Schulte am 13.09.07 - 18:20:10
Das brauchst du doch nicht mehr im Frontend anzulegen. Da langt das Backend doch vollkommen aus.
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 18:24:22
Das Problem ist, dass der User in dem abzulegenden Dokument noch ein paar Klicks und Auswahlen zu tätigen hat, bevor das Dokument gespeichert wird.
Deshalb muss das ganze leider ins Frontend.

Genau genommen ist das auch das Hauptproblem dabei....

Gruß
Jeremias
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 18:30:44
Habe schon hin- und her überlegt, ob man überhaupt so weit gehen muss um das zu realisieren. Aber ich denke es geht nicht anders.
Fakt ist, dass bei gesetztem Haken die Mail rausgehen muss und dann das AblageForm aufgehen muss, welches den Body,Subject und Empfaenger der Mail bekommt und der User seine zusätzlichen Angaben macht.


 
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 18:32:12
Ich hatte doch oben schon geschrieben: Du kopierst das aktuelle Maildokument (als komplettes Dokument oder via CopyAllItems) in die Ablage-DB. DANN kannst Du dieses im Frontend öffnen.

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Thomas Schulte am 13.09.07 - 18:33:29
Das ist so nicht richtig. Zerleg das Problem mal und schau dir die Einzelbestandteile an. Fixier dich nicht auf das Ablagedokument, sondern auf die Aktionen die der Benutzer durchführen muss.

Und Berhard hat ganz grundsätzlich recht.
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 18:40:49
Und Bernhard hat ganz grundsätzlich recht.
Ich erröte  ::)

Ich würde das Problem wie folgt zerlegen:
- Wie soll dem System mitgeteilt werden, dass dieses Memo in die Ablage-DB soll? Eine Checkbox ist aus meiner Sicht nicht unbedingt die erste Wahl, aber ich kenne Eure Rahmenbedingungen nicht.
- Hieraus folgt: Das Entfernen eines Items aus einer Checkbox-Eingabe ist Kinderkram - aber wann mache ich das? Nach dem Senden ist es ja zu spät.
- Das Mail ist versendet (vor dem Senden kann ja alles noch abgebrochen werden wie zum Beispiel durch falsche / fehlende Empfängeradresse) - wie stelle ich das fest?
- Das Memo muss in die Ablage-DB
- Das Dokument in der Ablage-DB muss (mit der richtigen Maske) dem Benutzer präsentiert werden. Auch hier: Wann soll das geschehen?
- Wie stelle ich sicher, dass der Benutzer das Dokument in der Ablage-DB auch wirklich updated? Ggf. würde ja ansonsten der gesamte Akt in Frage gestellt.

Ich befürchte, dass ist auch noch nicht alles.

Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 18:55:42
Tja,
genau wg. dieser schwierigen Überlegungen habe ich mich gemeldet und geäussert, dass es ein Problem der "richtigen Events" im Memo ist. Ein paar eigenständige Notesanwendungen habe ich dann doch schon auf dem Puckel, sodass ich mal behaupte, dass der Code nicht das Problem ist, sondern eher das integrieren in dieses komplexe Gebilde von Mailanwendung....

Du sagst eine Checkbox findest Du nicht gut. Ok, man könnte einen zusätzlichen Button nehmen ala "Send & deposit". Dann könnte man sich das Löschen des Haken sparen. Oder würdest Du noch etwas Anderes machen ?
Der Benutzer soll ja schon entscheiden, ob Ablage stattfindet oder nicht.

Mfg
Jeremias

P.S. Ich finde es übrigens Klasse, dass Ihr Euch so in das Problem reindenkt. Vielen Dank
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 19:06:29
Folgendes muesste die richtige Vorgehensweise sein:

1. Ob mit Haken oder nicht, das Dokument muss nach dem Senden erstellt werden. (wg. genannter Unsicherheitsfaktoren)
2. Es muss "unauffällig" im Backend passieren, damit der Ablauf des Mailversandes nicht durcheinander gerät.
3. Danach muss ich wissen ob ein Dokument erstellt wurde und dieses dann ins Frontend holen.
4. Sollte im Frontend ein Abbruch durch den User erfolgen, muss das Dokument wieder gelöscht werden.

Für Punkt 3. fehlt mir allerdings grad der Ansatz....
Titel: Re: Modifikation des Mailtemplates
Beitrag von: koehlerbv am 13.09.07 - 19:17:32
Ich finde es übrigens Klasse, dass Ihr Euch so in das Problem reindenkt. Vielen Dank

Naja, dafür sind wir ja hier aktiv. Und dümmer werden wir dabei auch nicht, wenn man sich mal in andere Probleme hineindenkt. Mir hilft das auch sehr, wenn mal wieder Entwickler-Ausbildungen "on the job" stattfinden  ;)

Für Punkt 3. fehlt mir allerdings grad der Ansatz....

Zunächst: Vergess bitte alle Buttons. Um ein Mail abzusenden, gibt es n Möglichkeiten für den User.
Ich sage auch nix gegen eine Checkbox als neues Feld in der Memo-Maske. Es gilt halt nur andere Möglichkeiten.

Punkt 3: Du kopierst das gesendete (!) Memo in die Ablage-DB. Damit bekommst Du eine Instanz dieses Objekts und kannst dieses via NotesUIWorkspace.EditDocument öffnen. Absoluter Standard.

HTH,
Bernhard
Titel: Re: Modifikation des Mailtemplates
Beitrag von: Jeremias am 13.09.07 - 21:58:56
Juchu,
es klappt jetzt :) (Bierpause hat weitergeholfen)

So hats hingehaun:

- globale Variable "Ablagedoc" im Memo des Templates angelegt
Code
Dim Ablagedb As NotesDatabase
Dim Ablagedoc As NotesDocument

- Im Postsend-Event Haken abgefragt und dann im Backend Ablagedoc in Ablagedb erstellt :
Code
If Source.Document.Ablage(0) = "Ablage" Then
	Set Ablagedb = New NotesDatabase("","Ablagedb.nsf")
	Set Ablagedoc = New NotesDocument(Ablagedb)
	Ablagedoc.form = "EMail"
	Ablagedoc.EMail = source.Document.Sendto
	Ablagedoc.Name = source.Document.subject
	Ablagedoc.Body = source.Document.Body
	Call Ablagedoc.Save(True,False)
End If

- Dann im Queryclose auf Instanz von Ablagedoc geprüft und wenn vorhanden, dann Doc ins UI bringen
Code
If Not Ablagedoc Is Nothing  Then
	Dim Ablageuiws As New NotesUIWorkspace
	Dim Ablageuidoc As NotesUIDocument
	Set Ablageuidoc = Ablageuiws.EditDocument(True,Ablagedoc,False,,True,True)
End If	

Das gute daran ist, das Item hinterm Haken muss gar nicht gelöscht werden! Wird ja eh nur im Postsend abgefragt und da stoert es nach dem Versenden auch nicht mehr. Selbst wenn die Mail aus "Sent" später nochmal geöffnet wird zum lesen und dann wieder geschlossen: Das Ereignis tritt ja nicht ein. Im Gegenteil, es ist sogar ein Feature, da man so sofort erkennt, dass die Mail abgelegt wurde. (So verkauf ich dass zumindest)

Also vielen Dank für die großartige Hilfe... it löppt