Felder bauen¶
Die Dokumenttypen sind generierte Protobuf-Typen. Skalare Felder sind dort keine einfachen Werte, sondern Wrapper (StringField, BoolField, Int32Field, …). Kurzkonstruktoren dafür stehen in Zedal.Sdk.Protobuf.ProtoFields:
| Helfer | Für |
|---|---|
Sf(string) |
StringField |
Bf(bool) |
BoolField |
I32(int) / I64(long) |
Int32Field / Int64Field |
Df(double) |
DoubleField |
DateUtc(y, m, d) |
Datum als TimestampField |
DateTimeUtc(y, m, d, h, min, s) |
Zeitstempel als TimestampField |
Für kontrollierte Wertelisten gibt es typisierte Enums in Zedal.Sdk.Apis.Diwass.Enums — unter anderem AttachmentTypeId, PackageTypeCode, RecoveryDisposalCode, HCode, HpCode, WasteCodeListId, MeansOfTransportCode, FacilityTypeCode, Annex7FacilityTypeCode. Jeder Enum-Wert trägt seinen Wire-Wert als Attribut; die Umrechnung machen die Erweiterungsmethoden in DiwassEnumExtensions:
string wire = AttachmentTypeId.FacilityPermit.ToWire();
if (DiwassEnumExtensions.TryFromWire<AttachmentTypeId>(raw, out var typeId)) { /* … */ }
var lenient = DiwassEnumExtensions.FromWireOrUnknown<AttachmentTypeId>(raw);
Jeder dieser Enums hat einen Unknown-Wert als Fallback für Wire-Werte, die das SDK noch nicht kennt. Auf Lese-Pfaden ist das gewollt: Ein neuer Serverwert führt nicht zum Absturz. Auf Schreib-Pfaden ist Unknown ein Fehler in deinen Daten. Die fachlichen Wertelisten stehen unter Codelisten.