Berichte können nicht nur vom Anwender über die Oberfläche gedruckt werden, sondern es kann auch serverseitig im Hintergrund erfolgen.
Hier gibt es zwei Möglichkeiten:
- Sie möchten während eines Workflow-Ablaufs drucken, dann verwenden Sie bitte die Workflow-Klasse gip.core.autocomponent.PWNodePrint. In der Konfiguration können Sie dann angeben welches Businessobjekt und welcher Report gedruckt werden sollen.
- Sie lösen den Druckvorgang programmgesteuert aus. Dazu vorab folgendes Codebeispiel aus der Basisklasse ACComponent, mit dem der aktuelle Zustand einer Instanz ausgedruckt wird:
Im Grunde genommen gibt es vier Schritte:
1. ACComponent-Instanz
Sie benötigen eine ACComponent-Instanz, die Sie Drucken möchten. Entweder ist es der this-Pointer selbst oder eine Referenz, die Sie per ACUrlCommand erhalten oder neu erzeugt haben. Beispiele:
ACClass iPlusType = typeof(BSOInOrder).GetACType() as ACClass;
BSOInOrder refToPrintComp = StartComponent(iPlusType, iPlusType, null) as BSOInOrder;
refToPrintComp.AccessPrimary.NavACQueryDefinition.ACFilterColumns.FirstOrDefault()
.SetSearchValue<string>("123456789");
refToPrintComp.Search();
ACComponent refToPrintComp = ACUrlCommand("\\MyApp\\InstanceWithReports") as ACComponent;
2. Design (Bericht)
Von dieser Instanz benötigen Sie einen Bericht, den Sie drucken möchten. Rufen Sie dazu die Methode eine der mehrfach überladenen GetDesign(...)-Methoden auf, um eine Referenz auf ACClassDesign zu erhalten (Der XAML-Code ist in ACClassDesign.XMLDesign gespeichert).
ACClassDesign designToPrint = refToPrintComp.GetDesign("MyReportName");
3. ReportData
Rufen Sie die statische Methode ReportData.BuildReportData() auf, um die Berichtsdaten für den Berichtsgenerator bereitzustellen. Übergeben Sie dabei die Referenz der zu druckenden ACComponent (refToPrintComp). Bitte bedenken Sie, dass die Instanz geklont wird und in der Out-Variable cloneInstantiated bestätigt wird:
bool cloneInstantiated = false;
ReportData reportData = ReportData.BuildReportData(out cloneInstantiated,
Global.CurrentOrList.Current, refToPrintComp, null, designToPrint);
4. Drucken mit dem Berichtsgenerator
Zuletzt benötigen Sie eine Instanz des Berichtsgenerators (Klasse VBBSOReport). Entweder Sie haben irgendwo eine dauerhafte Referenz im Anwendungsbaum oder Sie erzeugen sich während der Laufzeit eine eigene. Rufen Sie die Print-Methode auf und übergeben das Design und die Berichtsdaten:
ACClass reportEType = typeof(VBBSOReport).GetACType() as ACClass;
VBBSOReport reportEngine = StartComponent(reportEType, reportEType, null) as VBBSOReport;
int copies = 5;
reportEngine.Print(designToPrint, false, "hpLaserJetA4", reportData, copies);