Zum Hauptinhalt springen

Assoziationen

Assoziationen definieren Beziehungen zwischen Entitäten im Runtime-Modell. Dieses Kapitel beschreibt, wie Sie Assoziationen abfragen und navigieren.

Der einfachste Weg, auf Assoziationen zuzugreifen, führt über typisierte Navigationseigenschaften. Diese werden basierend auf den im Construction Kit definierten Assoziationsrollen generiert.

query {
runtime {
systemCommunicationDataFlow {
items {
rtId
name
children {
systemCommunicationPipeline {
items {
name
rtId
executedBy {
systemCommunicationAdapter {
items {
rtId
ckTypeId
name
}
}
}
}
}
}
}
}
}
}

Diese Abfrage durchläuft: DataFlow → children → Pipeline → executedBy → Adapter

Generische Assoziationsabfrage​

Für mehr Kontrolle über Assoziationsabfragen verwenden Sie das generische Feld associations mit Filterparametern.

Parameter​

ParameterTypBeschreibung
roleIdStringFiltern nach Assoziationsrolle (z. B. System/ParentChild)
directionGraphDirectionINBOUND, OUTBOUND oder ANY
ckIdStringFiltern nach Zielentitätstyp
includeIndirectBooleanTransitive Assoziationen einbeziehen

Richtung​

RichtungBeschreibung
OUTBOUNDVon der aktuellen Entität zu verwandten Entitäten (Quelle → Ziel)
INBOUNDVon verwandten Entitäten zur aktuellen Entität (Ziel → Quelle)
ANYBeide Richtungen
query
{
runtime{
basicTree(rtId: "5fc8fc3d8b2fc75f925e21aa"){
items{
rtId
associations(
roleId: "System/ParentChild"
direction: INBOUND
ckId: "EnergyCommunity/OperatingFacility"
includeIndirect: true
){
items{
rtId
ckTypeId
}
}
}
}
}
}

Gibt alle Operating Facilities zurück, die direkte oder indirekte Eltern des angegebenen Basic Tree sind.

{
"data": {
"runtime": {
"basicTree": {
"items": [
{
"rtId": "5fc8fc3d8b2fc75f925e21aa",
"associations": {
"items": [
{
"rtId": "693c5b93464d7d9e1396cf1c",
"ckTypeId": "EnergyCommunity/OperatingFacility"
}
]
}
}
]
}
}
}
}

Assoziationsdefinitionen​

Um detaillierte Informationen über Assoziationen einschließlich Ursprung und Ziel zu erhalten:

query getRuntimeEntityAssociationsById(
$rtId: OctoObjectId!
$ckTypeId: String!
$direction: GraphDirection!
$roleId: String
) {
runtime {
runtimeEntities(ckId: $ckTypeId, rtId: $rtId) {
items {
rtId
ckTypeId
associations {
definitions(direction: $direction, roleId: $roleId) {
totalCount
items {
targetRtId
targetCkTypeId
originRtId
originCkTypeId
ckAssociationRoleId
}
}
}
}
}
}
}

Definitionsfelder​

FeldBeschreibung
targetRtIdRuntime-ID der Zielentität
targetCkTypeIdTyp der Zielentität
originRtIdRuntime-ID der Ursprungsentität
originCkTypeIdTyp der Ursprungsentität
ckAssociationRoleIdDie Assoziationsrollen-ID

Attribute assoziierter Entitäten abfragen​

Um Attribute assoziierter Entitäten zu erhalten, verwenden Sie das Feld targets:

query {
runtime {
runtimeEntities(ckId: "Basic/Tree", rtId: "5fc8fc3d8b2fc75f925e21aa") {
items {
rtId
associations {
targets(roleId: "System/ParentChild", ckId: "Basic/TreeNode" direction: INBOUND) {
items {
rtId
ckTypeId
# Additional attributes of the target entity can be queried here
}
}
}
}
}
}
}

Die obige Abfrage ruft alle Basic/TreeNode-Entitäten ab, die Eltern des angegebenen Basic/Tree sind.

{
"data": {
"runtime": {
"runtimeEntities": {
"items": [
{
"rtId": "5fc8fc3d8b2fc75f925e21aa",
"associations": {
"targets": {
"items": [
{
"rtId": "5fc8fda18b2fc75f925e21ab",
"ckTypeId": "Basic/TreeNode"
}
]
}
}
}
]
}
}
}
}

Gängige Assoziationsrollen​

Rollen-IDBeschreibung
System/ParentChildHierarchische Eltern-Kind-Beziehung
System/OwnershipEigentümerbeziehung

Welche Rollen tatsächlich verfügbar sind, hängt von der Konfiguration Ihres Construction-Kit-Modells ab.

Best Practices​

  1. Verwenden Sie typisierte Navigationseigenschaften, wenn die Beziehungsstruktur bekannt und fest ist
  2. Verwenden Sie die generische Assoziationsabfrage, wenn Sie dynamische Filterung oder Traversierung benötigen
  3. Begrenzen Sie indirekte Abfragen – transitive Abfragen auf großen Hierarchien können teuer sein
  4. Filtern Sie nach Typ, wenn Sie nur bestimmte Entitätstypen aus Assoziationen benötigen
  5. Verwenden Sie Pagination bei Assoziationen mit vielen verwandten Entitäten