Client. Print
Zuletzt geändert: 11.06.2023 10:06

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)
EMAIL 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

#