Client.Print (iScript) #
Client.Print (iScript)
procedure Client.Print(Report, Data, Target, Targetinfo)
function Client.Print(Report, Data, Target, Targetinfo, Optionen)
Parameter #
Soweit nichts anderes angegeben ist, wird nur auf die jeweils aktuelle EULANDA-Version eingegangen bzw. diese vorausgesetzt.
Report #
Der Name des zu druckenden Reports - nicht zu verwechseln mit dem Anzeigenamen im Menü.
Der Berichtsname kann leer gelassen werden. Dann wird der jeweilige Standardbericht verwendet. In diesem Fall kann als “Data”-Parameter allerdings keine einzelne ID übergeben werden. Alternativ kann auch die Funktion “default()” übergeben werden.
Data #
Die zu druckenden Daten. Je nach verwendetem Report kann hier ein einzelnes Objekt oder eine ganze Menge von Daten angegeben werden. Andere Reports wiederum erzeugen die Daten komplett selbst. In diesem Fall wird die Angabe Data ingnoriert. Beispiele:
Report | Type | SubType | Bemerkung |
---|---|---|---|
cnsoft.Adresse.Stammdaten | MULTI | LIST | Data wird als Menge von Daten interpretiert |
cnsoft.Artikel.Stat.ErloesGr.AktuellesJahr | EMBEDDED | Data wird ignoriert. Alle Daten werden innerhalb des Reports erzeugt | |
cnsoft.Auftrag.Auftragsbestaetigung | MULTI | SINGLEOBJECT | Data wird als einzelner Datensatz interpretiert. Bei Übergabe eines Datasets wird nur der aktuelle Datensatz gedruckt |
Mögliche Werte oder Arten von Werten für Data:
Wert | Beschreibung | Bemerkung |
---|---|---|
Integer | Ganzzahlen werden als IDs interpretiert. Es wird dann ein einzelner Datensatz gedruckt - sofern dies dem Reporttyp entspricht | |
Objekt: Dataset | Ein Objekt des Types DATASET wird abhängig vom Reporttyp als einzelner Datensatz oder als Menge interpretiert. Das Dataset-Objekt kann selbst erstellt sein oder über den Kontext eines Menü-Actions ermittelt worden sein. | |
Optionenstring | handelt es sich bei „DATA“ um einen String, so muss dies ein Optionen-String sein. Hier wird momentan jedoch nur ein einziger Parameter ausgewertet (siehe nachfolgende Tabelle) |
Einzig möglicher Parameter, wenn Data ein String ist:
Name der Option | Beschreibung |
---|---|
SQL_IDs | SQL-Ausdruck, der eine Liste von IDs (Integer-Werten) zurück gibt. **Beispiel:**SQL_IDS=(select top 10 id from adresse)Siehe auch Beispiel E |
Target #
Wert | Beschreibung | Bemerkung |
---|---|---|
"" (Leerstring) | Aufruf der Druckbox | |
PREVIEW | Druckvorschau | |
PRINTER | Drucker | |
FILE | Ausgabe als Datei | PDF, CNARP, TXT, FAX, PRN (Druckerspezifisch) |
PDF als Email | siehe auch Beispiel G | |
FAX | Faxausgabe | (veraltet, in neuen Projekten nicht verwenden) |
( target1, target2 …) | mehrere Targets in Klammern durch Komma getrennt | Anzeige der Druckbox mit lediglich den angegebenen Ausgabezielen |
Targetinfo #
Zusätzliche Verarbeitungsparameter - abhängig vom gewählten „TARGET“
Es ist möglich mehrere Optionen in TargetInfo zu übergeben. Dies erfolgt nach folgendem Muster:
optionsname1=“OptionsWert1”;OptionsName2=“Wert2”; …
Diese Wertepaare lassen sich bequem über das OPTIONS-Objekt zusammenstellen.
Target = “FILE” #
entweder der Dateiname oder ein zusammengesetzter Options-String mit einem oder mehreren der nachfolgend aufgeführten Parameter.
Name der Option | Beschreibung |
---|---|
FileName | Dateiname der zu exportierenden Datei |
FileFormat | Dateiformat |
Printername | exakter Druckername |
Profile | Name der Druckergruppe |
Target = “PRINTER” #
entweder die Druckergruppe oder ein Optionen-String mit folgenden möglichen Parametern:
Name der Option | Beschreibung |
---|---|
Copies | Anzahl der Kopien |
Letterhead | Formularname des Briefkopfes |
Printername | exakter Druckername |
Profile | Name der Druckergruppe |
SQL_IDs | SQL-Ausdruck, der die Liste der zu druckenden IDs zurückgibt |
Target = “EMAIL” #
Ein Optionen-String mit folgenden möglichen Parametern:
Name der Option | Beschreibung |
---|---|
AttachmentFilename | Name des zu generierenden Dateianhangs |
MailBody | Text (Inhalt) des Emails |
Subject | Betreff des Emails |
Address | Email-Adresse des Empfängers |
RcptName | Anzeigename des Empfängers |
EditBeforeSend | Email soll vor dem Senden noch bearbeitet werden. Es wird dann ein Dialogfensters des jeweiligen Email-Programmes angezeigt |
Target = “FAX” #
Ein Optionen-String mit folgenden möglichen Parametern:
Name der Option | Beschreibung |
---|---|
FaxNumber | Faxnummer des Empfängers |
Beispiele #
A. Drucken mit Druckbox #
Ausdruck der Auftragsbestätigung zum aktuellen Auftrags mit Anzeige der Druckbox
VBScript
Reportname = "cnsoft.Auftrag.Auftragsbestaetigung"
Client.Print Reportname, Dataset, "", ""
B. Drucken auf Druckergruppe #
Ausdruck auf direkt auf den Drucker. Es werden die Einstellungen der Druckergruppe “Geschaeftspapier” verwendet. D.h. z.B. das digitale Briefpapier, die Schachtauswahl und der Drucker selbst. Wenn keine Druckergruppe angegeben wird nimmt Eulanda die Einstellungen aus der Druckergruppe, die dem Report zugeordnet ist.
VBScript
Reportname = "cnsoft.Auftrag.Auftragsbestaetigung"
Client.Print Reportname, Dataset, "PRINTER", "Geschaeftspapier"
C. Anzeige der Druckvorschau #
VBScript
Reportname = "cnsoft.Auftrag.Auftragsbestaetigung"
Client.Print Reportname, Dataset, "PREVIEW", ""
D. Ausgabe als PDF (Portable Document Format) #
In diesem Beispiel wird der aktuelle Auftrag als PDF-Datei auf dem Desktop gespeichert. Zum Ermitteln des Desktop-Verzeichnisses wird das WScript.Shell-Objekt von Windows instanziert. Als Abschluss wird dem Benutzer ein Hinweis ausgegeben, wo die Datei liegt.
VBScript Kontext: Auftragsmodul
DesktopFolder = Client.Properties("Folder.Desktop")
Reportname = "cnsoft.Auftrag.Auftragsbestaetigung"
Filename = "Auftrag" & Dataset.Values("Kopfnummer") & ".pdf"
Filepath = DesktopFolder & "\" & Filename
Client.Print Reportname, Dataset, "FILE", Filepath
MsgBox "Die Auftragsbestätigung wurde als '" & Filename &_
"' auf dem Desktop gespeichert"
E. Drucken einer Adressliste über eine SQL-Bedingung #
VBScript
Reportname = "cnsoft.Adresse.TelefonListe"
SelectIDs = "(SELECT TOP 10 id FROM Adresse WHERE ISNULL(Email,'')='')"
Client.Print Reportname, "SQL_IDS=" & SelectIDs, "PREVIEW",""
F. Druck-Steuerung anhand von PC und Benutzername #
Hier wird zuerst der aktuelle Benutzername und der Arbeitsplatzname (PcName) aus den Windows-Umgebungsvariablen ermittelt. Je nach dem von welchem PC das Skript aufgerufen wird ermittelt es eine andere Druckergruppe über die SELECT/CASE-Struktur. Auf diese Weise kann arbeitsplatzabhängig ein anderer Drucker angesprochen werden. Der Benutzername wird in diesem Beispiel nicht weiter ausgewertet. Das kann aber analog zum PcNamen erfolgen.
Hinweis: Die arbeitsplatzabhängige Druckergruppen-Einstellung lassen sich auch ohne Skripts über die SQL-Registry erreichen.
VBScript Kontext: Auftragsmodul
option explicit 'strenge Prüfung der Variablennamen
' Ermitteln von Benutzer- und PC-Namen aus den
' Windows-Umgebungsvariablen
dim WshShell, objEnv, pcname, username
set WshShell = CreateObject ("WScript.Shell")
set objEnv = WshShell.Environment("PROCESS")
pcname = objEnv("COMPUTERNAME")
username = objEnv("USERNAME")
dim Druckergruppe, Reportname
Reportname = "cnsoft.Auftrag.Auftragsbestaetigung"
' Für den Arbeitsplatz LAGER und EINKAUF wird eine spezielle
' Druckergruppe verwendet. Ansonsten wird die Standardgruppe
' verwendet. TIPP: In einem CASE-Zweig können auch mehrere Variablen
' gesetzt werden.
select case pcname
case "LAGER"
Druckergruppe = "VORGANG_LAGER"
case "EINKAUF"
Druckergruppe = "VORGANG_EINKAUF"
' Reportname = "cnsoft.Auftrag.AuftragsKopie"
case else
Druckergruppe = "VORGANG"
end select
Client.Print Reportname, Dataset, "PRINTER", Druckergruppe
G. Drucken an Email #
Das nachfolgende Beispiel gibt die aktuelle Auftragsbestätigung als PDF per Email aus. Alle relevanten Email-Felder können beeinflusst werden. Das Skript kann im iScript-Editor im Auftragsmodul direkt ausgeführt werden. Ebenso kann es als Menüaktion dauerhaft hinterlegt werden.
VBScript Kontext: Auftragsmodul
option explicit
sub MailAB
dim ReportName, AttachmentName, MailBody, Options, Email, Subject, Nr
' Berichtsname
ReportName = "cnsoft.Auftrag.Auftragsbestaetigung"
' Auftragsnummer
Nr = CStr(Dataset.Values("KopfNummer"))
' Emailadresse des Kunden ermitteln
Email = Client.ExecuteSql("SELECT Email FROM Adresse WHERE id = " &_
CStr(Dataset.Values("AdresseId"))).Fields("Email")
' Der im Email angezeigte Name der PDF-Datei
AttachmentName = "AB_" & Nr
' Email-Betreff
Subject = "Auftragsbestätgung " & Nr
' Haupttext des Email
MailBody = "Anbei die angeforderte Auftragsbestätigung"
' Die Parameter nun als Optionen-String zusammengebaut
Options = "AttachmentFilename=" & AttachmentName & ";MailBody=" &_
MailBody & ";Address=" & Email & ";Subject=" & Subject
' Auftragsbestätigung per Email versenden
Client.Print ReportName, Dataset, "EMAIL", Options
end sub
If Dataset.State = 3 Then
MailAB
Else MsgBox "Bitte wählen Sie zuerst einen Auftrag aus"
End If
H. Ausgabe im MDI-Format (Microsoft Office Document Image) #
Mit diesem Beispiel wird die Liste der offenen Aufträge als MDI-Datei auf dem Desktop ausgegeben und angezeigt. Eine entsprechende Microsoft-Office-Version wird dabei vorausgesetzt. Über das Dateiformat „PRN“ wird Eulanda angewiesen die Daten im Druckerspezifischen Format auszugeben.
Der Befehl ist unabhängig von einem bestimmten Programmmodul und kann dementsprechend an beliebiger Stelle im iScript-Editor ausgeführt oder als Menü-Action fest hinterlegt werden.
VBScript Kontext: allgemein
option explicit
dim fn, options
' Ermitteln des Dateinamens
fn = Client.Properties("Folder.Desktop") & "\OffeneAufträge.mdi"
' Ausgabeparameter zusammensetzen
options = "FILENAME=" & fn & ";FILEFORMAT=PRN;PrinterName=Microsoft Office Document Image Writer"
' Ausdruck als Datei unter Angabe von Optionen
Client.Print "cnsoft.Auftrag.OffeneAuftraege", 0, "FILE", options
Beispiel I - Erzeugen des Mail-Body #
Das ist beispielsweise sinnvoll, wenn man eine Mail komplett selbst generiert möchte und dabei die selben Angaben haben soll, wie eine Mail aus EULANDA.
.
option explicit
' gibt ein Objekt zurück mit dem MailBody und weiteren Text-Eigenschaften,
' zu einer bestimmten Rechnung. Diese Eigenschaften entsprechen genau den
' Eigenschaften, die auch beim "echten" Drucken üerzeugt werden.
'
' weitere Eigenschaften
' - Body (kompletter Mailbody inkl. Signatur)
' - MailBody (nur der Rechnungsspezifische Teil)
' - Signature (nur die Signatur)
' - Subject
' - DocumentName
' - AttachmentFilename (ohne Extension)
' - Letterhead
' - TermsReport (AGB-Bericht)
function GetReportMailValues(ReportName, id)
' der komplette Body muss erst zusammengebaut werden,
' da er auch über Platzhalter enthalten kann
dim s, opts, Body
s = client.print(ReportName,id,"email","",64+1)
set opts = client.NewOptions(s)
Body = opts.Signature
if InStr(1, Body, "$$BODY$$", vbTextCompare) > 0 then
Body = Replace(Body, "$$BODY$$", opts.MailBody, 1, -1, vbTextCompare)
else
Body = opts.MailBody & vbCrLf & Body
end if
Opts.Body = Body
set GetReportMailValues = opts
end function
' Beispiel
dim LetzteRechnungId
LetzteRechnungId = Client.ExecuteSql("select top 1 id from dbo.Rechnung order by id desc").Fields(0).value
with GetReportMailValues("default(RE)", LetzteRechnungId)
ellib.ShowStrings _
"SUBJECT: " & vbCrLf &_
.Subject & vbCrLf & vbCrLf &_
"BODY: " & vbCrLf &_
.Body
end with