Dieses Beispielskript zeigt wie man Bilder, die in cobra im Datensatz (zum Beispiel durch das Mobile CRM) gespeichert sind, in einer Ausgabe verwendet.
Konfiguration
Das Skript wird als AfterLoadData ausgeführt
Der Platzhalter in der Vorlage ist {TicketAbarbeitung.Unterschrift#BildAbsolut}
Ideen
Es wird das Bild aus dem Bilddatensatz temporär auf die Festplatte gespeichert
Es wird ein Custom-Value mit dem Pfad zur Datei in der Ausgabe bereitgestellt
In der Vorlage kann mit dem Custom-Value in Verbindung mit dem #BildAbsolut-Kommando das Bild eingefügt werden
Falls der Devexpress-Word-Exporter genutzt wird, muss Bilder in Vorlagebeachtet werden.
// Version 5namespaceRuthardt.PrintPlus.Skripting{usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.IO;usingSystem.Linq;usingSystem.Windows.Forms;usingRuthardt.CobraBase.Functions.Converter;usingRuthardt.CobraBase.Functions.Access.Ado;usingRuthardt.CobraFramework.Ado;usingRuthardt.Common.Util;usingRuthardt.PrintPlus.Export.Context;usingRuthardt.PrintPlus.Model;usingRuthardt.PrintPlus.Model.Interfaces;usingRuthardt.PrintPlus.Model.Enumerations;usingCobra.Common.Database.BusinessObjects.Schema;publicclassUnterschriftenEinbetten:IScriptAction {publicvoidExecute(IPrintContext printContext,ICurrentContext currentContext,IChildContext childContext) { // Zugriff auf den aktuellen Datensatzvar currentDatensatz =currentContext.Data;var tableId =GetLegacyTableId(currentDatensatz);printContext.Logger.Debug("tableId: "+ tableId); // Bestimme ob Datensatz ein Bild hatvar selectImageCommand ="SELECT IMAGEDATA FROM IMAGES WHERE SUPERID = @superid AND TABLEID = @tableid";var imageResult =printContext.AdoAccess.GetTable( selectImageCommand,newSqlParameter("@superid",currentDatensatz.CurrentKey),newSqlParameter("@tableid", tableId) );if (imageResult.Rows.Count!=1) {currentContext.CustomValues["Unterschrift"] ="";return; } // Bild auslesen, in temporären Pfad speicher und für Ausgabe vermerkenvar bitmapRow =imageResult.Rows.Cast<DataRow>().First();var bitmap =bitmapRow[0] asbyte[];var temporaryFilePath =Path.GetTempFileName();File.WriteAllBytes(temporaryFilePath, bitmap);printContext.Logger.Debug("Unterschrift wird eingefügt: "+ temporaryFilePath);currentContext.CustomValues["Unterschrift"] = temporaryFilePath; } // Ermittlung der Tabellen-IDprivatestaticintGetLegacyTableId(IObjectView objectView) {var tableLogicalName =objectView.ObjectViewInfo.LogicalName;APTableTypeOld enumValue;if (!APTableTypeOld.TryParse(tableLogicalName,out enumValue)) {thrownewException(string.Format("Die Tabelle {0} ({1}) konnte nicht bestimmt werden",objectView.ObjectViewInfo.UserLevelName,objectView.ObjectViewInfo.LogicalName)); }return (int)enumValue; } }}
Unterdatensätze
Auch zu Unter- und Überdatensätzen können Bilder geladen werden und als Custom-Value hinterlegt werden.
// Version 5namespaceRuthardt.PrintPlus.Skripting{usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.IO;usingSystem.Linq;usingSystem.Windows.Forms;usingRuthardt.CobraBase.Functions.Converter;usingRuthardt.CobraBase.Functions.Access.Ado;usingRuthardt.CobraFramework.Ado;usingRuthardt.Common.Util;usingRuthardt.PrintPlus.Export.Context;usingRuthardt.PrintPlus.Model;usingRuthardt.PrintPlus.Model.Interfaces;usingRuthardt.PrintPlus.Model.Enumerations;usingCobra.Common.Database.BusinessObjects.Schema;publicclassUnterschriftenEinbetten:IScriptAction {publicvoidExecute(IPrintContext printContext,ICurrentContext currentContext,IChildContext childContext) { // Zugriff auf den aktuellen Datensatzvar currentDatensatz =currentContext.Data;var entries =currentContext.ChildContextByPrefix["TicketAbarbeitung"];if (entries ==null||entries.IsEmpty()) {return; }var tableId =GetLegacyTableId(entries.First().Data);printContext.Logger.Debug("tableId: "+ tableId); // Alle Unterdatensätze ermittelnforeach (var abarbeitung in entries) {printContext.Logger.Debug("abarbeitungId: "+abarbeitung.Data.CurrentKey); // Bestimme ob Datensatz ein Bild hatvar selectImageCommand ="SELECT IMAGEDATA FROM IMAGES WHERE SUPERID = @superid AND TABLEID = @tableid";var imageResult =printContext.AdoAccess.GetTable( selectImageCommand,newSqlParameter("@superid",abarbeitung.Data.CurrentKey),newSqlParameter("@tableid", tableId) );if (imageResult.Rows.Count!=1) {abarbeitung.CustomValues["Unterschrift"] ="";continue; } // Bild auslesen, in temporären Pfad speicher und für Ausgabe vermerkenvar bitmapRow =imageResult.Rows.Cast<DataRow>().First();var bitmap =bitmapRow[0] asbyte[];var temporaryFilePath =Path.GetTempFileName();File.WriteAllBytes(temporaryFilePath, bitmap);printContext.Logger.Debug("Unterschrift wird eingefügt: "+ temporaryFilePath);abarbeitung.CustomValues["Unterschrift"] = temporaryFilePath; } } // Ermittlung der Tabellen-IDprivatestaticintGetLegacyTableId(IObjectView objectView) {var tableLogicalName =objectView.ObjectViewInfo.LogicalName;APTableTypeOld enumValue;if (!APTableTypeOld.TryParse(tableLogicalName,out enumValue)) {thrownewException(string.Format("Die Tabelle {0} ({1}) konnte nicht bestimmt werden",objectView.ObjectViewInfo.UserLevelName,objectView.ObjectViewInfo.LogicalName)); }return (int)enumValue; } }}