Automatisch erzeugte Formulare
Das App-Portal erzeugt Formulare aus den Eingabetypen einer Action.
Formular aus dem Eingabemodell erzeugen
Mit Attributen an der Eingabeklasse legen Sie Beschriftung, Reihenfolge und Darstellung der Felder fest:
public sealed class LagerAusbuchenInput
{
[Required]
[Barcode]
[Field(Label = "Artikelnummer", Placeholder = "Artikel scannen oder eingeben", Order = 1)]
public required string ArticleNumber { get; init; }
[Required]
[OptionsFrom("warehouses")]
[Field(Label = "Lager", Order = 2)]
public required string Warehouse { get; init; }
[Range(0.0001, double.MaxValue)]
[Field(Label = "Menge", Order = 3)]
public decimal Quantity { get; init; }
[Multiline(Rows = 3)]
[StringLength(500)]
[Field(Label = "Grund", Placeholder = "z. B. Bruch, Schwund, Korrektur", Order = 4)]
public string? Reason { get; init; }
}
| Element | Wirkung |
|---|---|
| Property-Typ | string wird Textfeld, Zahlen werden Zahlenfelder, bool wird Schalter, Datumstypen erhalten einen Picker |
[Field] |
Beschriftung, Platzhalter, Reihenfolge, Hilfetext |
[Barcode] |
Bevorzugter Fokus für Scanner mit Tastatureingabe |
[Multiline] |
Mehrzeiliges Textfeld mit fester Zeilenzahl |
[Required], [Range], [StringLength] |
Prüfung im Browser und auf dem Server |
[DefaultValue] |
Vorbelegung des Feldes |
[Options] |
Feste Auswahlliste, direkt am Attribut angegeben |
[OptionsFrom] |
Auswahlliste aus einem Options-Provider, aufgelöst beim Anzeigen des Formulars |
Die Validierung erfolgt im Formular und vor der Ausführung auf dem Server.
Dynamische Auswahllisten bereitstellen
[OptionsFrom] lädt Auswahlwerte über einen [OptionsProvider], etwa aus microtech-ERP-Stammdaten:
[OptionsProvider("warehouses")]
public IReadOnlyList<FieldOption> GetWarehouses(
CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
return session.QueryDataSet<Lager>(includes: ["LagNr", "Bez"])
.AsEnumerable()
.Where(lager => !string.IsNullOrWhiteSpace(lager.LagNr))
.GroupBy(lager => lager.LagNr, StringComparer.Ordinal)
.Select(group => new FieldOption(
group.Key!,
$"{group.Key} {group.First().Bez}"))
.OrderBy(option => option.Value, StringComparer.Ordinal)
.ToList();
}
OptionsFrom und OptionsProvider verwenden dieselbe ID. Die Werte werden beim Öffnen
des Formulars geladen.
Für feste Werte verwenden Sie [Options("1", "2", "3")].
Actions im Portal ausblenden
Mit Form = false unterdrücken Sie das generierte Formular, etwa für reine HTTP-Endpunkte.
Das ersetzt keine Zugriffskontrolle:
[Action("list-artikel", Display = "Artikel auflisten", Form = false)]
public List<ArtikelRow> ListArtikel() { ... }