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);