top of page

Sage 100 CommonMethod "gbSendPDF2Mail "

(alle Versionen/all versions)

Mittwoch, 11. September 2019

Deutsch

Situation

Ausgangsmethode Code Signatur

Ausgangssituation

Voraussetzungen

Zweck

Mögliche Probleme

Möglicher Workaround?



Deutsch


Situation

Allgemein ist anzumerken, dass selbst in den aktuelleren Sage 100-Versionen in dem Zusammenhang mit dem Drucken und Mailen noch sehr viel durch/über das Sage 100 MS-Access-Frontend passiert.

Es gibt somit für gewisse Zwecke leider nur "alte" Schnittstellen-Punkte für die Entwicklung, von Sage mit "CommonMethods" (CM) bezeichnet.


Ausgangsmethode Code Signatur

CM Definition "gbSendMail"

Dim oMail As SysUtilsLib.Email
 
goStack.Push
Set goStack.oBag = New ClientParameterBag
Set goStack.oBag.oItem("EMail") = oMail
goStack.oBag.nItem("Cancel") = False
Call gbExecuteCommonMethod("gbSendPDF2Mail", "Attachment", "*")
bCancel = CBool(goStack.oBag.nItem("Cancel"))
goStack.Pull

Ausgangssituation

Definition Methode "gbSendPDF2Mail"

'------------------------------------------------------------------------------------------------------
'Prozedur........:  gbSendPDF2Mail
'Beschreibung....:  sendet ein Bericht im PDF-Format per E-Mail
'Parameter.......:  sEmail        - E-Mail Adresse(n)
'                   sAnrede       - Ansprechpartner - Anrede
'                   sCaption      - Berichtstitel (auch PDF-Dateiname)
'                   sSprache      - Sprache des Ansprechpartners (für den Emailtext und Ansprache)
'                   lBelegart     - Belegartkennung aus USysRegistry
'                   bAllowEdit    - True = vor dem Versenden wird die E-Mail in der Vorschau geöffnet
'                   sEmailCc      - E-Mail Adresse(n) CC
'                   sEMailBcc     - E-Mail Adresse(n) BCC
'                   sEmailReplyTo - E-Mail Adresse(n) AntwortenAn
'                   lBearbeitet   - True = Emailadressen wurden extern ermittelt und entsprechend übergeben
'Resultat........:  False
'------------------------------------------------------------------------------------------------------
Public Function gbSendPDF2Mail(ByVal sEmail As String, _
                               ByVal sAnrede As String, _
                               ByVal sCaption As String, _
                               ByVal sSprache As String, _
                               ByVal lBelegart As Long, _
                               Optional bAllowEdit As Boolean = False, _
                               Optional sEmailCC As String = "", _
                               Optional sEmailBCC As String = "", _
                               Optional sEmailReplyTo As String = "", _
                               Optional lBearbeitet As Boolean = False, _
                               Optional ByVal lTANMahnung As Long = 0) As Boolean

Voraussetzungen

Es wird, z.B. durch einen manuellen Ausdruck durch einen Anwender, ein Dokument / Bericht an den Drucker "<Sage 100 E-Mail>" von Sage gesendet.


Die CM steht in der Warenwirtschaft (WaWi) als auch im Rechnungswesen (ReWe) im Microsoft Access-basierten Frontend zur Verfügung und wird immer dann ausgelöst, wenn ein Bericht im PDF-Format per E-Mail gesendet werden soll.

Die CM greift auch im Stapeldruck und auch beim Druck über den AppDesigner, da die .net-Reporting-Komponenten (StimulSoft) ausschließlich für das Rendern der Berichte verwendet werden.


Das endgültige Senden der E-Mail erfolgt aus dem Microsoft Access-basierten Frontend.

Die E-Mail wird vor dem Senden wird u.U. zur Bearbeitung geöffnet.


Zweck

Die Idee ist, über ein Access-AddIn-Modul in die E-Mail-Erstellung im Frontend im Zusammenhang mit dem Sage Mailverand durch Logik im AddIn eingreifen zu können.

Z.B. Anlagen verändern oder auch den Inhalt des Mails.

Es wird das vollständige Sage-eigene COM-Mailobjekt Typ "SysUtilsLib.Email" an das AddIn weitergegeben.

Diese Objektinstanz kann dann entsprechend vor dem endgültigen Senden (bzw. Öffnen im Mail-Editor) nach Bedarf "manipuliert" werden.

Das Abbrechen der Aktion ist über ein Cancel möglich.

Siehe Code Defintion weiter oben.


Mögliche Probleme

Es können immer Probleme mit dem Parameter-Bag auftreten, wenn mehrere CM´s registriert sind und somit mehrere AddIns auf eine CM reagieren und wenn in dieser Ablaufkette zwischendurch der Parameter-Bag z.B. durch einen Fehler "zerstört" wird.

Für die Wartenwirtschaft stehen keine expliziten programmiertechnischen Informationen seitens Sage bereit, was genau per E-Mail versendet wird (welcher VK-Beleg oder EK-Beleg etc.).

Es wird zwar von Sage vor dem Einzeldruck die Druckprozess-Auswahl aufgerufen, z.B. „frmAbfMainErfassungPrint“ (oder „frmAbfMainErfassungPrintErweitert“ bei Komfortpaket).

In beiden Fenstern wird die CM „BelegPrint“ ausgelöst , bei der Sage die „BelId“ und „Erfassungsart“ übergibt:

ree

Das Problem ist jedoch, dass diese Informationen in der weiteren Abfolge beim Senden der E-Mail aus dem "Bag" verlorengeht.

Dies haben wir sowohl mit der alten als auch der neuen Belegerfassung feststellen können.

Beispiel Aufruf "gbSendPDF2Mail" im VBA-Code:

ree

Möglicher Workaround?

Ein theoretisch möglicher Workaround für dieses Problem beim Einzeldruck wäre, zuerst auf die CM „BelegPrint“ mit einem AddIn zu reagieren und die Informationen wie "BelId" etc. auf eigene Weise zu persistieren.

In demselben AddIn müsste man dann auf die o.g. CM in "gbSendPDF2Mail" reagieren und dann die eigene persistierte Info abzurufen und danach sofort zurückzusetzen.

Dies sollte möglich sein, da das AddIn physisch ja nur einmal geladen und pro Frontend-Aufruf-Session ein Speicherbereich pro Benutzer vorliegt (unabhängig davon, ob mit neuer oder alter Belegerfassung gearbeitet wird).


Wichtig: Beim Stapeldruck sind keinerlei sinnvolle CM´s vorhanden, um sich entsprechend mit einem AddIn in den Druckablauf vor dem Senden der E-Mail einzuklinken.

Es bleibt alternativ immer die Möglichkeit, zu versuchen, den Kontext anhand des von Sage im Standard angehangenen Dateinamens zu ermitteln, z.B:

"Rechnung 2018-10070"

Dies ist natürlich nicht immer 100% eindeutig, aber in vielen Fällen möglich.

bottom of page