Bedingte Konfigurationen: Type-abhängige Properties
Viele Properties in den XML-Spalten sind nur relevant, wenn ein anderes Property einen bestimmten Wert hat. Diese bedingten Abhängigkeiten müssen bei der Implementierung berücksichtigt werden.
GL_BEREICH_T: TYPE-abhängige SectionConfig Properties
Die SectionConfig-XML hat je nach TYPE unterschiedliche relevante Properties:
TYPE = 'WebForm' ✅ PFLEGEN
<SectionConfig>
<Type>WebForm</Type>
<!-- Keine zusätzlichen Domain-Model-Properties -->
<!-- Alle weiteren Properties sind UI-relevant (Collapsed, Visible, CssClass) -->
</SectionConfig>
TYPE = 'System' ✅ PFLEGEN
<SectionConfig>
<Type>System</Type>
<!-- System-Sections werden automatisch generiert, keine Konfiguration nötig -->
</SectionConfig>
TYPE = 'ListConnect' ✅ PFLEGEN (1:N Beziehungen)
<SectionConfig>
<Type>ListConnect</Type>
<ForeignKeyTableName>RE_RAUM_T</ForeignKeyTableName>
<ForeignKeyColumnName>RAUM_ID</ForeignKeyColumnName>
<IsLinkConnect>false</IsLinkConnect>
<IsOne2One>false</IsOne2One>
</SectionConfig>
Bedeutung:
ForeignKeyTableName: Zieltabelle der Navigation Property (z.B.RE_RAUM_T)ForeignKeyColumnName: FK-Spalte in der aktuellen Tabelle (z.B.RAUM_ID)IsLinkConnect:true= Nur Link,false= Eingebettete ListeIsOne2One:true= 1:1 Beziehung, öffnet direkt den verlinkten Datensatz
TYPE = 'CheckboxConnect' ⚠️ PRÜFEN (N:M Beziehungen)
<SectionConfig>
<Type>CheckboxConnect</Type>
<MappingTable>GL_GRUPPE_USER_T</MappingTable>
<DestinationTable>GL_GRUPPE_T</DestinationTable>
<DisplayColumns>BEZEICHNUNG</DisplayColumns>
<DisplayFilter>[{"field":"AKTIV","value":"1"}]</DisplayFilter>
</SectionConfig>
GL_TABELLE20_T: TYPE-abhängige PageConfig Properties
TYPE = 'Table' ✅ PFLEGEN
<PageConfig>
<Type>Table</Type>
<SystemName>Room</SystemName>
<Description>Raum-Entity</Description>
</PageConfig>
<TableConfig>
<PrimaryKeys>RAUM_ID</PrimaryKeys>
<AllowInsert>true</AllowInsert>
<AllowUpdate>true</AllowUpdate>
<AllowDelete>true</AllowDelete>
</TableConfig>
TYPE = 'View' ✅ PFLEGEN
<PageConfig>
<Type>View</Type>
<SystemName>RoomView</SystemName>
<Description>Raum-Ansicht (read-only)</Description>
</PageConfig>
<TableConfig>
<PrimaryKeys>PKID</PrimaryKeys>
<ReadOnly>true</ReadOnly>
</TableConfig>
GL_TABELLENSPALTE20_T: Datentyp-abhängige ColumnConfig Properties
Datentyp = String (varchar, nvarchar, char)
<ColumnConfig>
<Required>true</Required>
<MinLength>2</MinLength>
<MaxLength>100</MaxLength>
<RegularExpression>^[A-Z0-9]+$</RegularExpression>
<IsEmail>false</IsEmail>
<IsUrl>false</IsUrl>
</ColumnConfig>
Datentyp = Numeric (int, bigint, decimal, money, float)
<ColumnConfig>
<Required>true</Required>
<MinValue>0</MinValue>
<MaxValue>999999</MaxValue>
<UseAutoCounter>false</UseAutoCounter>
</ColumnConfig>
Implementierungs-Strategie
1. DTO-Design mit Type-spezifischen Properties
public class SectionMetadataDto
{
public Guid SectionUid { get; set; }
public string Type { get; set; }
public ListConnectMetadataDto? ListConnect { get; set; }
public CheckboxConnectMetadataDto? CheckboxConnect { get; set; }
}
2. Bedingte Validierung
When(x => x.Type == "ListConnect", () =>
{
RuleFor(x => x.ListConnect)
.NotNull()
.WithMessage("ListConnect-Metadaten sind erforderlich");
});
Zusammenfassung: Bedingte Properties Matrix
Type | Status | Bedingte Properties |
|---|---|---|
WebForm | ✅ PFLEGEN | Keine zusätzlichen |
System | ✅ PFLEGEN | Keine zusätzlichen |
ListConnect | ✅ PFLEGEN | ForeignKeyTableName, ForeignKeyColumnName, IsLinkConnect, IsOne2One |
CheckboxConnect | ⚠️ PRÜFEN | MappingTable, DestinationTable, DisplayColumns, DisplayFilter |
CrystalReport | ❌ NEIN | UI-only Properties |
StaticSection | ❌ NEIN | Plugin-Name |
Weitere Details zur Implementierung finden Sie in der vollständigen Dokumentation im Domain Model Editor Repository.