ORM Datensatz erstellen

Um einen neuen Datensatz zur erstellen, hat man zwei Möglichkeiten. In der ersten Zeile wird ein neuer Datensatz mit der Angabe der Guid der Datentabelle erstellt. Dies ist zum Beispiel dann notwendig, wenn man programmatisch mit konfigurierten Datentabellen umgehen muss. Dies sollte aber nur in Ausnahmefällen notwendig sein. Die zweite Zeile erstellt einen neuen Datensatz mit Angabe des Typs der Datentablle.

OrmBABase newOrm = Api.ORM.GetNewORM(EnumDataSourceExtension.MyDataTable.ValueGuid, session);
OrmMyDataTable newMyData = Api.ORM.GetNewORM<OrmMyDataTable>(session);

Umgang mit Feldern

Programmierte Standardfelder stehen als normale Eigenschaften zur Verfügung

newMyData.TextField = "Inhalt";
if (!string.IsNullOrEmpty(newMyData.TextField))
    newMyData.TextField += " Mehr Inhalt";
if (newMyData.BooleanField)
    newMyData.BooleanField = false;

Konfigurierte Standardfelder können über die Member Methoden genutzt werden.

newMyData.SetMemberValue("TextField", "Inhalt");
if (!string.IsNullOrEmpty((string)newMyData.GetMemberValue("TextField")))
    newMyData.SetMemberValue("TextField", newMyData.GetMemberValue("TextField") + " Mehr Inhalt");
if ((bool)newMyData.GetMemberValue("BooleanField"))
    newMyData.SetMemberValue("BooleanField", false);

Umgang mit Auswahllisten

Die spezialisierten Methoden für Auswahllistenwerte benötigen den Feldnamen als string. Falls die Datentabelle programmiert ist, sollte man in jedem Fall nameof() verwenden.

// Wert setzen (Entfernt alle anderen)
newMyData.SetEnumValue(nameof(OrmMyDataTable.EnumField), EnumMyEnum.FirstValue);

// Beinhaltet  einen Wert
if (newMyData.EnumContains(nameof(OrmMyDataTable.EnumField), EnumMyEnum.FirstValue))
    // Löscht alle Werte
    newMyData.ClearEnumValues(nameof(OrmMyDataTable.EnumField));

// Fügt einen weiteren Wert hinzu
newMyData.AddEnumValue(nameof(OrmMyDataTable.EnumField), EnumMyEnum.FirstValue);

// Entfernt einen Wert
newMyData.RemoveEnumValue(nameof(OrmMyDataTable.EnumField), EnumMyEnum.FirstValue);

// Holt alle Werte (Änderungen an der Liste haben keine Auswirkungen)
IEnumerable<EnumMyEnum> enumValues = newMyData.GetEnumValues<EnumMyEnum>(nameof(OrmMyDataTable.EnumField));

Umgang mit Teil-Datentabellen

Teil-Datensätze können nicht eigenständig existieren, sondern nur in Zusammenhang eines Hauptdatensatzes. Felder können dann identisch gesetzt werden.

Neuen Teil-Datensatz erstellen

OrmSubDataTableMyDataTable subData = newMyData.SubDatas.AddNewObject();
subData.SortOrder = newMyData.SubDatas.Count() - 1;

Teil-Datensatz Abfragen

Position 0

OrmSubDataTableMyDataTable firstSubData = newMyData.SubDatas.Where(ff => ff.SortOrder == 0).FirstOrDefault();

Mit einem bestimmten unique Key

OrmSubDataTableMyDataTable keySubData = newMyData.SubDatas.Where(ff => ff.EnumContains(nameof(OrmSubDataTable.EnumField), EnumMyEnum.FirstValue)).FirstOrDefault();

Teil-Datensatz löschen

newMyData.SubDatas.Remove(keySubData);
int sortOrder = 0;
foreach(OrmSubDataTableMyDataTable subData in newMyData.SubDatas)
{
    subData.SortOrder = sortOrder;
    sortOrder++;
}

Teil-Datensätze speichern

Es muss immer der Hauptdatensatz gespeichert werden! Nur dadurch ist sichergestellt, das Beispielsweise das Datensatzprotokoll und das Änderungsdatum korrekt sind.

newMyData.Save();