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, null);
newMyData.Save();

Falls der Ziel-Datensatz erst geladen werden müsste, kann alternativ eine Api.Relation Methode genutzt werden.

OrmRelation relation = Api.Relation.CreateRelation(session, relationDataOrm, relationDataNewMyData, EnumRelationTypeExtension.MyRelation, null);
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, null);
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, null);
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);