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