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)