Relationsdaten
Um Relationen erstellen zu können werden die Relationsdaten der Quelle benötigt. Dazu stehen eine Reihe von Methoden in Api.ORM
zur Verfügung. Es gibt Methoden für einzelne Datensätze.
Guid otherOrmGuid = "[INSERT A RECORD GUID]".ToGuid();
RelationData relationDataGuid = Api.ORM.GetRelationDataModel(session, otherOrmGuid);
// Falls man das Orm zur Verfügung hat. Ansonsten ist dies langsamer
OrmMyDataTable otherOrm = Api.ORM.GetOrm<OrmMyDataTable>(otherOrmGuid, session);
RelationData relationDataOrm = Api.ORM.GetRelationDataModel(otherOrm);
Es gibt Methoden für Abfragen und Listen von Guids.
IQueryable<OrmMyDataTable> queryWith = Api.ORM.GetQueryWithReadPermissions<OrmMyDataTable>(session);
queryWith = queryWith.Where(ff => ff.TextField != null && ff.TextField.Contains("Inhalt"));
IQueryable<RelationData> relationDatasQuery = Api.ORM.GetRelationDataModels(queryWith);
IQueryable<RelationData> relationDataGuids = Api.ORM.GetRelationDataModels<OrmActivityBase>(session, new[] { guid1, guid2 });
Hinzufügen
Relationen werden auf dem Ziel-Datensatz erstellt. In diesem Beispiel wird keine Relationskategorie angegeben.
newMyData.AddSource(relationDataOrm, EnumRelationTypeExtension.MyRelation, Guid.Empty);
newMyData.Save();
Falls der Ziel-Datensatz erst geladen werden müsste, kann alternativ eine Api.Relation
Methode genutzt werden. Diese Methode erstellt die Relation an dem Datensatz vorbei, so daß auch keine Änderungen des Datensatzes erfolgt und damit keine Berechtigungsprüfung und keine Änderungshistorie am Datensatz
OrmRelation relation = Api.Relation.CreateRelation(session, relationDataOrm, relationDataNewMyData, EnumRelationTypeExtension.MyRelation, Guid.Empty);
relation.Save();
Falls möglich sollte diese Methode in der Massenverarbeitung eingesetzt werden.
Setzen
Mit SetSource
können alle Relationen einer Relationstyp / -kategorie-Kombination auf einmal zugewiesen werden. Das bedeutet, das für diese Kombination der Datensatz nur noch exakt diese Relationen hat.
newMyData.SetSource(relationDataOrm, EnumRelationTypeExtension.MyRelation, Guid.Empty);
newMyData.Save();
Entfernen
Das Entfernen funktioniert identisch, außer dass dafür keine Relations-Daten benötigt werden. Es genügt die Guid des Quell-Datensatzes
newMyData.RemoveSource(otherOrmGuid, EnumRelationTypeExtension.MyRelation, Guid.Empty);
newMyData.Save();
Auch zum Entfernen gibt es eine Methode in der Api.Relation
, die für die Massenverarbeitung optimal ist.
int deletedCount = Api.Relation.DeleteAllRelations(session, otherOrmGuid, newMyData.Oid, EnumRelationTypeExtension.MyRelation);