Bearbeitungsfunktionen
Ab der Version 4.0.7 sind im Namespace IduIT.cardo.Core.CoreModules.BasicEditing einige C#- und TypeScript-Klassen vorhanden, die das einfache Erstellen von Formularen ermöglichen.
Ziel ist es, mit Attributen an den C#-Klassen die benötigten Informationen bereitzustellen.
'C#' steht hier und im Folgenden stellvertretend für '.Net'
Vorgehensweise
Implementierung der C#-Datenklasse
Sie soll die DB-Tabelle im Code repräsentieren und dem Entwickler eine Hilfe und Schnittstelle zwischen Daten-Modell, Programm-Logik- und Web-Oberfläche sein (MVC-Prinzip). Folgender Ablauf wird empfohlen und sorgt für IntelliSense-Unterstützung im späteren TypeScript:
- Anlegen und Implementieren der Klasse
- Definition der Spalten-Namen und deren Datentypen
- Attributierung mit
- DB-Meta-Attributen per
[PropertyModelProperty]
- Serialisierung-Informationen (Client <-> Server) per
[JsonProperty]
- Anderen, optionalen Darstellungs- und Formatierungsoptionen
- DB-Meta-Attributen per
- Kompilieren des Projekts
- Erzeugung der Assemblies, welche m.H. von Reflection ausgelesen werden
- Verwendung des Visual Studio-Kontextmenüs des .Net Projektes
- Klick auf die Option "IDUIT: Create .Net Typescript code"
- Hinweis: Die IduIT Extension (siehe Downloads) muss dazu installiert sein
- Registrierung in der C#-Applications-Klasse
-
Abschließender Schritt, damit das generierte JavaScript auch zur Laufzeit ausgeliefert wird
- Verwenden Sie dazu (z.B. in der RegisterDefinitionScripts der implementierenden Anwendung):
IduIT.Core.PropertyModel.Registrator.RegisterScripts(resourceCollector);
-
Beispiel-Implementierung einer Datenklasse, Ausstattung mit den entsprechenden PropertyModel Attributen:
using IduIT.Core.PropertyModel;
/// <summary>
/// Beispiel-Klasse
/// </summary>
[PropertyModelClass("DbId")]
public sealed class SampleRecord
{
/// <summary>
/// Id in der Datenbank, Autowert
/// </summary>
[PropertyModelProperty("Id (Autowert)", ReadOnly = true, SortHint = "A")]
[Newtonsoft.Json.JsonProperty("dbId")]
public int? DbId
{
get;
set;
}
[PropertyModelProperty("Title", SortHint = "B")]
[Newtonsoft.Json.JsonProperty("name")]
public String Name
{
get;
set;
}
/// <summary>
/// Eine Geometrie
/// </summary>
[PropertyModelProperty("Geom", SortHint = "C", ValueHandlerType = typeof(IduIT.cardo.Core.CoreModules.Mapping.ValueHandler.GeometryValueHandler))]
[cardo.Core.CoreModules.Mapping.ValueHandler.GeometryValueHandlerConfig(
AllowedGeomtypes = new[] { Core.Geometry.GeometryTypeNames.Polygon, Core.Geometry.GeometryTypeNames.MultiPolygon }
)]
[Newtonsoft.Json.JsonProperty("geom")]
public IduIT.GeoLib.Net.Geometry Geom
{
get;
set;
}
/// <summary>
/// Beschreibung ...
/// </summary>
[PropertyModelProperty("Beschreibung", SortHint = "D", Description = "Geben Sie hier eine lange Beschreibung an!")]
[IduIT.Core.PropertyModel.Format.StringFormat(AllowEmpty = true, Format = IduIT.Core.PropertyModel.Format.StringFormat.MultiLine, Trim = true)]
[Newtonsoft.Json.JsonProperty("desc")]
public String Desc
{
get;
set;
}
/// <summary>
/// Lookup-Klasse ...
/// </summary>
[PropertyModelProperty("LU-List", SortHint = "E1", ValueHandlerType = typeof(cardo.Core.CoreModules.BasicEditing.ValueHandler.LookupValueHandler))]
[cardo.Core.CoreModules.BasicEditing.ValueHandler.LookupValueHandlerConfiguration(typeof(SampleApplication), LoaderTag = "A")]
[Newtonsoft.Json.JsonProperty("luVal")]
public int LUValue
{
get;
set;
}
/// <summary>
/// Weitere komplexe Klasse (Cpl = eine Klasse mit PropertyModelClass Attribut)
/// </summary>
[PropertyModelProperty("Cplx", SortHint = "D")]
public Cpl[] Complexe
{
get;
set;
}
}
Spezielle Werte-Behandlungen können durch das Bereitstellen von Implementierungen von IduIT.Core.PropertyModel.ValueHandler.IValueHandlerConfig umgesetzt werden. Die Registrierung der Scripte muss entsprechend erfolgen.
Clientseitige Umsetzung
Im einfachsten Fall kann die Klasse FormEditorForm direkt verwendet werden:
export class Sample extends Kiss.Ui.Core.Component
{
protected _initComponent(cfg: Kiss.Ui.Core.Component.IComponentConfig): void
{
//das Bearbeitungsformular
this.__form = IduIT.cardo.Core.CoreModules.BasicEditing.FormEditorForm.create({
model: SampleRecord.Model,
context: null,
editObjectInfo: new __InfoUtil(),
flex: 1
});
//dann die bestehen Daten laden ...
SampleApplicationRemote.AxGetAll().then(r =>
{
this.__form.editContext.view.store.addRange(r);
//damit die nicht alle "neu" sind!
this.__form.editContext.changeSet.commit();
//1. Datensatz selektieren
if (r.length)
{
this.__form.editContext.selectionModel.select(r[0);
}
}).fail(Cardo4.raise);
}
}
Die Änderungen an den Daten im Formular werden im changeSet
des editContext
hinterlegt.
Eine Implementierung der Speicher-Funktion könnte bspw. so aussehen:
private __saveAllRecords(): void
{
const editCtx = this.__form.editContext;
SampleApplicationRemote.AxHandleRecordChanges(
editCtx.changeSet.created,
editCtx.changeSet.updated,
editCtx.changeSet.deleted)
.done(() =>
{
editCtx.changeSet.commit();
})
.fail(Cardo4.raise);
}
Zuletzt geändert: 24.09.2024 17:54:52 (erstmals erstellt 12.02.2018)