Ausgaben

Die folgenden Zeilen beschreiben die Verwendung der Standardrepräsentation als HTML Ausgabe für PiB Objekte.

Weiterführende Links:

Für die Generierung von HTML gibt es folgendes empfohlenes Anwendungsmuster:

  • Zu der PibObject Klasse gibt es in der Solution eine Datei die als Resource im gleichen Namespace und mit gleichem Namen der Datenklasse mit der Dateierweiterung .scbtpl.htm (TestClass => TestClass.scbtpl.htm) eingebunden ist.

  • In dem Assembly ist in der Klasse AssemblySourceInfo eine Methode mit dieser Signatur vorhanden (wenn nicht, wird die Standardimplementierung verwendet, in dem Fall ist aber der Komfort des Live-Änderns der Dateien im Debug-Modus nicht gegeben).

Der folgende Code stellt die Verwendung dieses Vorgehens dar.

Beispielimplementierung

Client (TypeScript)


const htmlCmp = new Kiss.Ui.Core.Text({
	mode: Kiss.Ui.Core.ETextMode.Html,
	flex: 1,
	cls: "iduit-pib-htmlout-container",
	scrollable: Kiss.Ui.Core.EScrollMode.Both
});


htmlCmp.onClick.add(e =>
{
	if (PiB.ObjectModel.Files.FileCollectionUiExtension.handleClickEvent(e, id => BohranzeigenAppRemote.AxPibFileOpen(id)))
		return;

	//evtl. weitere Aktionen ...
});


//events
this.__objList.grid.onRowDblClick.add(e =>
{
	MyAppRemote.AxGetHTML(e.row.PiBOID, e.ctrlKey)
		.done(strHtml => htmlCmp.content = strHtml)
		.fail(Cardo4.raise);
});

Server (c#)

[Core.Web.Ajax.AjaxMethod]
public String AxGetHTML(string pibOid, bool useDefaultHtml)
{
	//Instanz der Daten beschaffen
	var instance = PibHdl.ObjectModel.GetAnyBusinessObject(pibOid, requiredRights: PiB.ObjectModel.ObjectSecurityFlags.Read);

	//sicherstellen, dass evtl. vorhandenen Attachments mit angefügt sind
	PibHdl.Utils.ApplyAttachmentsToAnyObject(instance.Object);

	//Die Standard-Methode iteriert über alle Properties und
	//rendert diese unter Beachtung der Property-Model Definition (wenn vorhanden)
	if (useDefaultHtml)
	{
		return instance.Object.ToHTML();
	}
	else
	{
		//und die Default-HTML Anzeigen generieren
		return PibHdl.Utils.ToHTML(instance.Object, false, () => new PiB.Presentation.TemplateEngine.ScribanConfiguration()
		{
			GeoExtension = new IduIT.PiB.Presentation.TemplateEngine.ux.ScribanGeoExtensionConfig(() => Cardo4.Env.MapServerConnectorV7)
			{
				ValidateGeoSQL = (sql) =>
				{
					//sicherstellen, dass alle Ebenen aus der Query geladen werden und Berechtigungen vorhanden sind.
					Cardo4.Env.Iwan7Util.EnsureGEOSqlLayersAreAvailable(sql, IDU.Security.SecurityFlags.LayerQuery);
					return sql;
				}
			}
		});
	}
}

Scriban-Template


{{formLabelCls = `htmlout-content-label`}}
{{contentFieldCls = `htmlout-content-field`}}
{{contentAreaCls = `htmlout-content-area`}}

<div class="{{contentAreaCls}}">
	<h1>{{BO.Title | html.escape}}</h1>

	<div class="{{contentFieldCls}}">
	{{
	if BO.Attachments && BO.Attachments.Files && BO.Attachments.Files.size > 0

		myobject = {}
		myobject.Files = BO.Attachments.Files;

		with myobject
			include 'type:IduIT.PiB.ObjectModel.Files.FileCollection'
		end
	end
	}}
	</div>
</div>


Anhang

Assembly-Code

Implementierung der Methode GetScribanTemplate in der Klasse AssemblySourceInfo.

public static string GetScribanTemplate(Type t, bool throwIfNotFound, bool inherit)
{
	string result = null;
	var inputType = t;
	while (result == null && t != null && t != typeof(Object))
	{
		if (t.Assembly != typeof(AssemblySourceInfo).Assembly)
			result = PiB.Presentation.TemplateEngine.TemplateLoader.TryLoadGetTemplateFromResource(t.Assembly, t.FullName);
		else
		{
#if DEBUG
		result = PiB.Presentation.TemplateEngine.TemplateLoader.TryGetTemplateFromSourceFile(DefaultNamespace, SourceCodeBaseFolder, t.FullName);
#else
		result = PiB.Presentation.TemplateEngine.TemplateLoader.TryLoadGetTemplateFromResource(typeof(AssemblySourceInfo).Assembly, t.FullName);
#endif
		}

		if (!inherit)
			break;

		t = t.BaseType;
	}
	if (null == result && throwIfNotFound)
		throw new Exception($"Es ist keine Resource/Datei mit der Erweiterung \"scbtpl.htm\" für den Typ {inputType.FullName} oder eine der Basisklassen, bzw. in dem Namespace vorhanden.");
	return result;
}

Zuletzt geändert: 18.04.2024 10:52:26 (erstmals erstellt 10.11.2020)