Beim Klick auf den Button wird zunächst die Abfrage ausgeführt. Anschließend wird die Ausgabeseite mit jeder 'print_id' aufgerufen und das PDF-Dokument generiert. Dieses wird an die Liste der dieser print_id zugeordneten Mailadressen versandt.
https://beispiel.server-daten.de/kundenrechnungen.html?print_id=1
erfolgen.
<!-- Mail, die versendet wird --> <sd:mail sd:name="print_mail_text" sd:mail-address-column=""> <sd:choose-lang> <sd:span sd:info="Ihre aktuelle Rechnung">Sehr geehrter Kunde, beiliegend finden Sie Ihre aktuelle Rechnung. Mit freundlichen Grüßen server-daten.de -- Disclaimer</sd:span> </sd:choose-lang> </sd:mail> <!-- Parameterdeklaration --> <sd:param sd:name="print_id" /> <!-- Seitenkopf --> <div style="font-size:smaller;"> <table width="100%"> <tr><td rowspan="4"><a href="http://www.sql-und-xml.de/server-daten/"> <img src="/images/server-daten-logo.gif" border="0" alt="server-daten: Die Web-Datenbank" /></a> </td><td style="text-align:right;">Jürgen Auer</td></tr> <tr><td style="text-align:right;">Friedenstr. 37</td></tr> <tr><td style="text-align:right;">10 249 Berlin</td></tr> <tr><td style="text-align:right;">info@sql-und-xml.de</td></tr> </table> </div> <div class="sd-text-container"></div> <sd:rs sd:name="sample-output" sd:edit="sample-input" sd:source-type="query" sd:source-name="qry_kundenrechnungen"> <sd:with-param sd:sql-param="@i" sd:param-name="print_id" /> <sd:normal> <div>An<p /> <sd:cell-value sd:col="nachname" />, <sd:cell-value sd:col="vorname" /><br /> <sd:cell-value sd:col="strasse" /><br /> <sd:cell-value sd:col="plz" /> <sd:cell-value sd:col="ort" /><p /> <h3 style="margin-top:36px">Ihre Rechnung vom <sd:cell-value sd:col="rechnungsdatum" sd:datetime-format="dd.MM.yyyy" /></h3> <h4>Rechnungsnummer: <sd:cell-value sd:col="kundenrechnungenId" /></h4> <div style="margin:100px 100px 100px 50px;"> <table cellpadding="12px"> <tr> <th style="width:300px; height:50px; vertical-align:top; text-align:left;margin-bottom:36px;"> Beschreibung</th> <th style="width:300px; vertical-align:top; text-align:left">Betrag</th></tr> <tr><td style="width:300px;"> <sd:cell-value sd:col="rechnungstext" /> </td> <td style="width:300px;"> <sd:cell-value sd:col="rechnungsbetrag" sd:number-format="#,##0.00 €" /> </td> </tr> </table> </div> Ihre Mail: <sd:cell-value sd:col="mail" /><p /> Überweisen Sie bitte den Betrag bis zum ... auf das folgende Konto: <div style="margin:30px 100px 30px 50px;"> <table> <tr> <th style="width:300px; height:30px; vertical-align:top; text-align:left;margin-bottom:36px;"> </th> <th style="width:200px; vertical-align:top; text-align:left"></th> </tr> <tr> <td>Kontonummer</td> <td>575 221 107</td> </tr> <tr><td>Bankleitzahl</td> <td>100 100 10</td> </tr> <tr><td>Institut</td> <td>Postbank Business</td> </tr> <tr><td>Kontoinhaber</td> <td>Jürgen Auer</td> </tr> </table> </div> </div> </sd:normal> </sd:rs> <p /> Vielen Dank für Ihren Auftrag! </div>Zunächst wird die zu versendende Mail definiert. Anschließend folgt der Parameter. Das sd:rs -Element nutzt diesen im sd:with-param -Element, um seinen Wert an die Abfrage weiterzugeben. Da ohnehin nur eine Zeile verarbeitet wird, fehlt das sd:alternate -Element. Ebenso kann auf die für Eingabemasken notwendigen sd:form - und sd:button -Elemente verzichtet werden.
Declare @i int Select A.nachname, A.vorname, A.strasse, A.plz, A.ort, A.mail, B.rechnungsdatum, B.rechnungsbetrag, B.rechnungstext, B.kundenrechnungenId From kundendaten As A Inner Join kundenrechnungen As B On A.kundendatenId = B.kundendatenId Where B.kundenrechnungenId = @iMit diesen beiden Bausteinen - Abfrage über mehrere Tabellen, die eine Zeile liefert und eine ID nutzt sowie eine Ausgabeseite, welche die Zellen darstellt - lassen sich unter Menü 10: Ausgabeseiten bereits einzelne Rechnungen versenden.
Select A.kundenrechnungenId As print_id, B.mail As print_mail From kundenrechnungen As A Inner Join kundendaten As B On A.kundendatenId = B.kundendatenId Where Year(A.rechnungsdatum) = Year(getDate()) And Month(A.rechnungsdatum) = Month(getDate())Diese, anschließend über Menü 9: Abfragen und den Button 'PDF generieren' verwendbaren Abfragen müssen die IDs zurückliefern, welche für den korrekten Aufruf der Ausgabeseiten benötigt werden. Hier liegt es nahe, als Mail die Mails der Kunden aus der Tabelle mit den Kunden-Stammdaten anzugeben. Alternativ könnte auch mit
'info @ sql-und-xml.de' As print_maileine eigene Mailadresse angegeben werden, falls die PDF-Dokumente bsp. zusätzlich elektronisch signiert werden sollen. Die Funktionen Year und Month ermitteln aus dem Rechnungsdatum Jahr und Monat und vergleichen dieses mit dem durch GetDate übergebenen aktuellen Datum.
Insgesamt lassen sich mit der obigen Abfrage bei konsistenten Daten alle Monatsrechnungen mit einem Klick generieren und versenden.
Verwendet man als Where-Bedingung
Where Year(A.rechnungsdatum) = Year(getDate()) And Month(A.rechnungsdatum) = Month(getDate()) And Day(A.rechnungsdatum) = Day(getDate())so werden alle Rechnungen mit dem heutigen Datum verarbeitet. Dies ermöglicht eine kontinuierliche Versendung der Rechnungen bsp. bei Betriebsschluß mit einem Mausklick.
Hat der Nutzer das Recht, eigene Ausgabeseiten zu erstellen und diese vollständig zu verwalten (manage own Object), so kann er keine PDF-Dokumente erstellen. Darf er selbst Gruppen erstellen, dann kann er für seine Gruppen und Objekte Berechtigungssätze erstellen. Diese dürfen jedoch weder createPDF, StvAdmin noch Admin-Rechte beinhalten.
The following print-job has been sent: Url: https://beispiel.server-daten.de/kundenrechnungen.html ID: 1 Mail: info @ sql-und-xml.de Mail: sd @ sql-und-xml.de ID: 2 Mail: info @ sql-und-xml.de Mail: sd @ sql-und-xml.de ID: 3 Mail: info @ sql-und-xml.de ID: 4 Mail: info @ sql-und-xml.de ---- DisclaimerBeim obigen Beispiel wurde zu jeder ID ein PDF-Dokument erzeugt. Die beiden ersten wurden doppelt, die beiden anderen einfach versandt.