Datensatz-Bilder aus cobra einbetten
Dieses Beispielskript zeigt wie man Bilder, die in cobra im Datensatz (zum Beispiel durch das Mobile CRM) gespeichert sind, in einer Ausgabe verwendet.
// Version 5
namespace Ruthardt.PrintPlus.Skripting
{
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Ruthardt.CobraBase.Functions.Converter;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.CobraFramework.Ado;
using Ruthardt.Common.Util;
using Ruthardt.PrintPlus.Export.Context;
using Ruthardt.PrintPlus.Model;
using Ruthardt.PrintPlus.Model.Interfaces;
using Ruthardt.PrintPlus.Model.Enumerations;
using Cobra.Common.Database.BusinessObjects.Schema;
public class UnterschriftenEinbetten : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
// Zugriff auf den aktuellen Datensatz
var currentDatensatz = currentContext.Data;
var tableId = GetLegacyTableId(currentDatensatz);
printContext.Logger.Debug("tableId: " + tableId);
// Bestimme ob Datensatz ein Bild hat
var selectImageCommand = "SELECT IMAGEDATA FROM IMAGES WHERE SUPERID = @superid AND TABLEID = @tableid";
var imageResult = printContext.AdoAccess.GetTable(
selectImageCommand,
new SqlParameter("@superid", currentDatensatz.CurrentKey),
new SqlParameter("@tableid", tableId)
);
if (imageResult.Rows.Count != 1) {
currentContext.CustomValues["Unterschrift"] = "";
return;
}
// Bild auslesen, in temporären Pfad speicher und für Ausgabe vermerken
var bitmapRow = imageResult.Rows.Cast<DataRow>().First();
var bitmap = bitmapRow[0] as byte[];
var temporaryFilePath = Path.GetTempFileName();
File.WriteAllBytes(temporaryFilePath, bitmap);
printContext.Logger.Debug("Unterschrift wird eingefügt: " + temporaryFilePath);
currentContext.CustomValues["Unterschrift"] = temporaryFilePath;
}
// Ermittlung der Tabellen-ID
private static int GetLegacyTableId(IObjectView objectView) {
var tableLogicalName = objectView.ObjectViewInfo.LogicalName;
APTableTypeOld enumValue;
if (!APTableTypeOld.TryParse(tableLogicalName, out enumValue))
{
throw new Exception(
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 5
namespace Ruthardt.PrintPlus.Skripting
{
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Ruthardt.CobraBase.Functions.Converter;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.CobraFramework.Ado;
using Ruthardt.Common.Util;
using Ruthardt.PrintPlus.Export.Context;
using Ruthardt.PrintPlus.Model;
using Ruthardt.PrintPlus.Model.Interfaces;
using Ruthardt.PrintPlus.Model.Enumerations;
using Cobra.Common.Database.BusinessObjects.Schema;
public class UnterschriftenEinbetten : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
// Zugriff auf den aktuellen Datensatz
var 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 ermitteln
foreach (var abarbeitung in entries)
{
printContext.Logger.Debug("abarbeitungId: " + abarbeitung.Data.CurrentKey);
// Bestimme ob Datensatz ein Bild hat
var selectImageCommand = "SELECT IMAGEDATA FROM IMAGES WHERE SUPERID = @superid AND TABLEID = @tableid";
var imageResult = printContext.AdoAccess.GetTable(
selectImageCommand,
new SqlParameter("@superid", abarbeitung.Data.CurrentKey),
new SqlParameter("@tableid", tableId)
);
if (imageResult.Rows.Count != 1) {
abarbeitung.CustomValues["Unterschrift"] = "";
continue;
}
// Bild auslesen, in temporären Pfad speicher und für Ausgabe vermerken
var bitmapRow = imageResult.Rows.Cast<DataRow>().First();
var bitmap = bitmapRow[0] as byte[];
var temporaryFilePath = Path.GetTempFileName();
File.WriteAllBytes(temporaryFilePath, bitmap);
printContext.Logger.Debug("Unterschrift wird eingefügt: " + temporaryFilePath);
abarbeitung.CustomValues["Unterschrift"] = temporaryFilePath;
}
}
// Ermittlung der Tabellen-ID
private static int GetLegacyTableId(IObjectView objectView) {
var tableLogicalName = objectView.ObjectViewInfo.LogicalName;
APTableTypeOld enumValue;
if (!APTableTypeOld.TryParse(tableLogicalName, out enumValue))
{
throw new Exception(
string.Format(
"Die Tabelle {0} ({1}) konnte nicht bestimmt werden",
objectView.ObjectViewInfo.UserLevelName,
objectView.ObjectViewInfo.LogicalName));
}
return (int)enumValue;
}
}
}