Andere Datenquelle-Objekte nutzen

Dieses Skript zeigt, wie man zur Laufzeit Daten simuliert, die so eigentlich gar nicht in der Datenbank stehen. Die Daten werden dazu in einem Skript geladen und dann der regulären Logik von PRINT+PLUS hinzugefügt.

Konfiguration

  • Das Skript wird als AfterLoadData ausgeführt

Ideen

  • Es werden C#-Objekte erzeugt, die aus anderen Quellen gefüllt werden können. Dies kann zum Beispiel ein entsprechender Dialog oder auch ein Webservice sein

  • Die C# Objekte werden als sog. ObjectView an PRINT+PLUS übergeben

Skript

// Version 5
namespace Ruthardt.PrintPlus.Skripting
{
	using System;
	using System.Collections.Generic;
	using System.Data.SqlClient;
	using System.IO;
	using System.Linq;
	using System.Windows.Forms;
	using Ruthardt.CobraBase.Functions.Access.Ado;
	using Ruthardt.CobraFramework.Ado;
	using Ruthardt.PrintPlus.Export.Context;
	using Ruthardt.PrintPlus.Model;
	using Ruthardt.PrintPlus.Model.Interfaces;
	using Ruthardt.PrintPlus.Model.Enumerations;

	public class DialogScript : IScriptAction
	{
		public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
		{
			// erzeuge zwei Objekte
			var o1 = new M
			{
				SuperId = (int) currentContext.Data.CurrentKey, Message = "Meldung 1"
			};
			var o2 = new M
			{
				SuperId = (int) currentContext.Data.CurrentKey, Message = "Meldung 1"
			};

			// erzeuge jeweils eine ObjectView (Reflection-basierte Wrapper auf die Objekte)
			var ov1 = new ObjectView(o1, "SuperId"); // SuperID soll hier unser PK des Objekts sein, falls man mehrfach verschachtelt
			var ov2 = new ObjectView(o2, "SuperId");

			// Füge die Objekte in den virtuellen Context ein
			currentContext.AddChildContext("Message", ov1);
			currentContext.AddChildContext("Message", ov1);
		}
	}
}

In der Vorlage kann eine normale Untervorlage für den Unterdatensatz verwendet werden.

Last updated