Hierarchische Relationen erlauben performante Abfragen über die Hierarchie. In der Api.Relation gibt es Methoden um Quelldatensätze über die gesamte Hierarchiezu finden. Die Angabe von Typen ist dabei optional.

Der näheste Quelldatensatz

Der näheste Datensatz bestimmter Typen

OrmBABase firstCompany = Api.Relation.GetHierarchyPrimarySourceNearest(EnumRelationType.Parent, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, null, session, newMyData.Oid);
OrmBABase firstCompanyOrContact = Api.Relation.GetHierarchyPrimarySourceNearest(EnumRelationType.Parent, new Guid[] { BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Contact }, null, session, newMyData.Oid);

Die Oid des nähesten Datensatz bestimmter Typen

Guid firstCompanyOid = Api.Relation.GetHierarchyPrimarySourceNearestOid(EnumRelationType.Parent, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, null, session, newMyData.Oid);
Guid firstCompanyOrContactOid = Api.Relation.GetHierarchyPrimarySourceNearestOid(EnumRelationType.Parent, new Guid[] { BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Contact }, null, session, newMyData.Oid);

Der oberste Quelldatensatz

Der oberste Datensatz bestimmter Typen

OrmBABase topCompany = Api.Relation.GetHierarchyPrimarySourceTop(EnumRelationType.Parent, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, null, session, newMyData.Oid);
OrmBABase topCompanyOrContact = Api.Relation.GetHierarchyPrimarySourceTop(EnumRelationType.Parent, new Guid[] { BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Contact }, null, session, newMyData.Oid);

Die Oid des obersten Datensatz bestimmter Typen

Guid topCompanyOid = Api.Relation.GetHierarchyPrimarySourceTopOid(EnumRelationType.Parent, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, null, session, newMyData.Oid);
Guid topCompanyOrContactOid = Api.Relation.GetHierarchyPrimarySourceTopOid(EnumRelationType.Parent, new Guid[] { BA.Contact.Enums.Extensions.EnumDataSourceExtension.Company, BA.Contact.Enums.Extensions.EnumDataSourceExtension.Contact }, null, session, newMyData.Oid);

Komplexe Abfragen

Für komplexere Hierarchieabfragen kann man eine Abfrage auf die Hierarchietabelle selbst erhalten.

IQueryable<OrmHierarchyRelationBase> hierarchyRelationQuery = RelationTools.GetHierarchyRelationsQuery(EnumRelationType.Parent, session);

Ein Beispiel wie man alle Anrufe erhält, die als Kinder und Kindeskinder zu dem aktuellen Datensatz in der gesamten Hierarchie zu finden sind.

IQueryable<Guid> phonecallsOids = hierarchyRelationQuery.Where(ff => ff.Source == newMyData.Oid && ff.TargetType == EnumDataSource.PhoneCall).Select(ff => ff.Target);
IQueryable<OrmPhoneCall> phonecallsWithRead = Api.ORM.GetQueryWithReadPermissions<OrmPhoneCall>(session);
IQueryable<OrmPhoneCall> phonecalls = phonecallsWithRead.Where(ff => phonecallsOids.Contains(ff.Oid));