Attributregeln und Beziehungsklassen

Mit Attributregeln können zugehörige Datensätze für Datasets, die an Beziehungsklassen in einer Geodatabase beteiligt sind, gelesen und bearbeitet werden. Regeln können auf Feature-Classes und Tabellen angewendet werden, die an Beziehungsklassen beteiligt sind. Dazu zählen Anlagen und Feature-bezogene Annotationen. Attributregeln können auch verwendet werden, um Bearbeitungsereignisse von Aktualisierungen abzufangen, die an Ursprungs- und Zielklassen in einer Beziehung vorgenommen werden, also Hinzufügen, Entfernen oder Löschen eines zugehörigen Datensatzes. Beispielsweise kann eine Attributregel für eine sofortige Berechnung ein Attributfeld aktualisieren, wenn ein Feature zu einer zugehörigen Feature-Class hinzugefügt wird.

Auslösen von Ereignissen mit Beziehungsklassen

Attributregeln für sofortige Berechnungen werden für Bearbeitungsereignisse wie Einfüge-, Aktualisierungs- und Löschvorgänge ausgelöst. Wenn ein zugehöriger Datensatz mit ArcGIS Pro über die Kontextmenüoptionen Neue zur Beziehung hinzufügen oder Auswahl zur Beziehung hinzufügen hinzugefügt wird, werden mehrere Bearbeitungsereignisse ausgelöst.

Bei Verwendung der Kontextmenüoption Neue zur Beziehung hinzufügen geschieht Folgendes:

  • In der Zieltabelle der Beziehungsklasse wird eine leere Zeile erstellt.
    • Der Trigger wird in der Zielzeile eingefügt.
  • Der Fremdschlüssel wird für die Zielzeile festgelegt.
    • Der Trigger wird in der Zielzeile aktualisiert.
Wenn Sie eine Attributregel zur Zieltabelle mit dem ausgelösten Ereignis "Aktualisieren" hinzufügen, erfasst die Regel den Fremdschlüssel und fragt die zugehörige Zeile in der Quelltabelle ab.

Die Kontextmenüvorgänge Auswahl zur Beziehung hinzufügen und Aus Beziehung entfernen können ebenfalls verwendet werden.

In der folgenden Tabelle sind die spezifischen Funktionen aufgeführt, die für das Ereignis "Aktualisieren" unterschieden werden können, wenn "$originalFeature.key" und "$feature.key" verglichen werden.

FunktionObjektArcGIS Arcade-Ausdruck

Hinzufügen eines Features zu einer Beziehung

Aktualisieren

Isempty($originalfeature.key) == true And isempty($feature.key) == false

Hinzufügen ausgewählter Features zu einer Beziehung

Aktualisieren

Isempty($originalfeature.key) == true And isempty($feature.key) == false

Entfernen eines Features aus einer Beziehung

Aktualisieren

Isempty($originalfeature.key) == false And isempty($feature.key) == true

Löschvorgang für einen zugehörigen Datensatz

Löschen

Lesen zugehöriger Datensätze

Bei der Arbeit mit Beziehungsklassen können Sie zugehörige Datensätze mit Arcade-Funktionen lesen, die Eingabe-Features annehmen und zugehörige Datensätze zurückgeben.

  • FeatureSetByRelationshipName: Die Ausführung ist auf Serverkontexte beschränkt. Stellen Sie bei der Verwendung dieser Funktion für Attributregeln sicher, dass die Option Von Anwendungsauswertung ausschließen auf "True" festgelegt ist.
  • FeatureSetByRelationshipClass: Unterstützt die Ausführung auf dem Server und dem Client. Regeln, die diese Funktion verwenden, können lokal in der Anwendung ausgeführt werden (z. B. ArcGIS Pro und ArcGIS Maps SDKs for Native Apps), bevor die Änderung an die Datenquelle gesendet wird.

Sie können zugehörige Datensätze auch mit der Arcade-Funktion FeatureSetByName lesen und nach dem Fremdschlüssel filtern.

Lesen zugehöriger Datensätze für eine Beziehungsklasse mit der Arcade-Funktion "FeatureSetByName".

Eine Berechnungsregel wird für das Feld "InspectionCount" in der Feature-Class für Masten erstellt, die Teil einer Klasse von Eins-zu-Viele-Beziehungen mit der Inspektionstabelle ist. Die Funktion FeatureSetByName kann verwendet werden, um die Inspektionsklasse direkt zu lesen und die zugehörigen Datensätze bei einer Aktualisierung abzurufen. Zur Verwendung dieser Arcade-Funktion sind Kenntnisse zum Feld "Beziehungsklasse" erforderlich. Für diese Beziehungsklasse ist der Quell-Primärschlüssel das Feld "globalID" der Feature-Class für Masten und der Quell-Fremdschlüssel das Feld "poleguid" der Standalone-Inspektionstabelle.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature. 

Var fs = FeatureSetByName($datastore, “Inspection”, [“comments”], false)
Var poleGuid = $feature.poleguid 
Var fsinspected = Filter(fs, “POLEGUID= @poleguid”);
Return count(fsinspected)

Lesen eines zugehörigen Datensatzes für eine Beziehungsklasse mit der Arcade-Funktion "FeatureSetByRelationShipName".

Dieses Skript zum Lesen zugehöriger Datensätze für eine Beziehungsklasse kann mit der Funktion FeatureSetRelationshipName umgeschrieben werden. Bei Verwendung dieser Funktion muss der Fremdschlüssel nicht bekannt sein, sondern lediglich der Beziehungsname "pole_inspection".

Vorsicht:

Stellen Sie bei der Verwendung dieser Funktion zum Erstellen einer Attributregel sicher, dass die Option "Von Anwendungsauswertung ausschließen" auf "True" festgelegt ist.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature.

Var fsinspected = FeatureSetByRelationshipName($feature, “pole_inspection”, [“comments”], false)
Return count(fsinspected)

Lesen eines zugehörigen Datensatzes für eine Beziehungsklasse mit der Arcade-Funktion "FeatureSetByRelationshipClass".

Dieses Skript zum Lesen zugehöriger Datensätze aus einer Beziehungsklasse kann mit der Funktion FeatureSetByRelationshipClass umgeschrieben werden. Bei Verwendung dieser Funktion muss der Fremdschlüssel nicht bekannt sein, sondern lediglich der Beziehungsname "pole_inspection". Diese Funktion unterstützt die server- und clientseitige Ausführung. Daher können Attributregeln, die diese Funktion verwenden, lokal in der Anwendung ausgeführt werden.

//A calculation rule that returns the count of a pole inspection records.
//When a pole feature is updated, the calculation rule reads all its related inspections records from the comments field and returns the total inspection count for that feature.

Var fsinspected = FeatureSetByRelationshipClass ($feature, “pole_inspection”, [“comments”], false)
Return count(fsinspected)

Erstellen, Aktualisieren und Löschen zugehöriger Datensätze

Zugehörige Datensätze aus Beziehungsklassen können auch mithilfe von Bearbeitungsregeln basierend auf der Rückgabe aus dem Wörterbuch bearbeitet werden.

Dies ist ein Beispiel für die Erstellung einer Berechnungsregel, die einen zugehörigen Datensatz erstellt. Wenn ein Feld für Kommentare zu Leitungsmasten vom Benutzer aktualisiert wird, wird das Schlüsselwort aus dem Wörterbuch "edit" zum Erstellen eines Inspektions-Datensatzes verwendet. Ähnliches gilt für das Aktualisieren oder Löschen zugehöriger Datensätze. Weitere Informationen finden Sie unter Wörterbuch-Schlüsselwörter für Attributregeln.

Hinzufügen eines neuen zugehörigen Datensatzes für eine Beziehungsklasse bei einer Aktualisierung.

Eine Berechnungsregel wird zum Erstellen eines neuen zugehörigen Datensatzes verwendet, wenn ein Feld für Kommentare zu Leitungsmasten vom Benutzer aktualisiert wird. In diesem Ausdruck wird das Schlüsselwort aus dem Wörterbuch edit zum Erstellen eines neuen Inspektionsdatensatzes verwendet, wenn sich das Kommentarfeld ändert. Ähnliches gilt für das Aktualisieren oder Löschen zugehöriger Datensätze. Weitere Informationen finden Sie unter Wörterbuch-Schlüsselwörter für Attributregeln.

//A calculation rule that triggers on an update event when the pole comment field is edited. 
//The expression first checks if the comment field changed and creates a new related record.

If ($originalfeature.comment != $feature.comment)
{ 
    Return {
                 “edit”: [{
   “className”: “inspection”,
   “adds”: [{ “attributes”: { “comments”: $feature.comment } }] 
}] 

}
Return;

Überprüfen und Auswerten von Regeln für Beziehungsklassen

Zum Anwenden von Regeln für Beziehungsklassen können Validierungsattributregeln oder Beschränkungsattributregeln erstellt und angewendet werden.

Beispiel: Zwischen der Poles-Feature-Class (Ursprung) und der Tabelle "Inspections" (Ziel) wurde eine Beziehungsklasse eingerichtet. Für jeden Masten muss mindestens eine Inspektion erfasst worden sein.

Hierfür können Sie eine Regel für eine Beziehungsklasse der Beziehungsart Eins-zu-eins (1:1) oder der Beziehungsart Eins-zu-viele (1:M) erstellen. Nachdem Sie die Regel für die Beziehungsklasse erstellt haben, können Sie mit dem folgenden Skript eine Validierungsattributregel schreiben, die auf die Poles-Feature-Class (Ursprung) angewendet wird, um durchzusetzen, dass jeder Masten mindestens eine Inspektion bestehen muss:

//A validation rule that ensures each pole passes one or more inspections.

var fsInspections = FeatureSetByRelationshipClass($feature, "poles");
if (count(fsInspections) == 0) return false;
return true;

Nachdem Sie diese Validierungsattributregel den Daten hinzugefügt haben, überprüfen Sie die für die Daten geltenden Regeln im Rahmen der Auswertung, um sicherzustellen, dass die Regeln befolgt werden. Welche Auswertungsmethode verwendet wird, hängt vom Regeltyp und von den Regeleigenschaften ab.

Validierungsregeln werden zu einem vom Benutzer festgelegten Zeitpunkt in der Ansicht Fehler-Inspektor oder mit dem Werkzeug Regeln auswerten ausgewertet. Während der Auswertung erstellt eine Validierungsregel Fehler-Features, mit denen Features hervorgehoben werden, die gegen Regeln verstoßen. Die Fehler-Features für diese Regeln können mithilfe des Fehler-Inspektors überprüft werden.

Hinweis:

Diese Regeln können Sie mit der Funktion FeatureSetByRelationshipName oder der Funktion FeatureSetByRelationshipClass Arcade erstellen. Mit der Funktion FeatureSetByRelationshipClass können Sie Regeln über einen Service clientseitig auswerten. Hierfür benötigen Sie ArcGIS Pro 3.2 oder höher. Diese Funktion wird im Abschnitt Lesen zugehöriger Datensätze weiter oben erläutert.

Wenn Sie diese Attributregel so ändern möchten, dass dafür gesorgt wird, dass für einen Masten nur eine oder keine Inspektion durchgeführt wird, können Sie das Skript wie folgt umschreiben:

//A validation rule that ensures each pole has one or fewer inspections.

var fsInspections = FeatureSetByRelationshipClass($feature, "poles");
if (count(fsInspections) > 1 ) return false;
return true;

Sie können auch eine Beschränkungsattributregel erstellen und auf die Daten anwenden. Beschränkungsregeln geben zulässige Attributkonfigurationen und allgemeine Beziehungen für ein Feature an. Im Gegensatz zu Berechnungsregeln werden Beschränkungsregeln nicht zum Belegen von Attributen mit Werten verwendet, sondern zum Sicherstellen, dass bestimmte Bedingungen für ein Feature erfüllt werden. Zudem kann mit Beschränkungsregeln eine Bearbeitung verhindert werden, wenn eine Bedingung nicht erfüllt ist.

Beschränkungsregeln werden im Rahmen von Bearbeitungsoperationen zum Auslösen von Ereignissen wie Einfügen, Aktualisieren und Löschen ausgewertet. Dabei wird als Ergebnis wahr oder falsch zurückgegeben, um folgendermaßen darzustellen, ob die Regel befolgt wird:

  • Wahr: Der angegebene Skriptausdruck ist erfüllt und das Feature wird erstellt.
  • Falsch: Der Skriptausdruck ist nicht erfüllt und das Feature wird nicht erstellt.

Achten Sie beim Erstellen und Anwenden von Beschränkungsattributregeln auf die Reihenfolge der Bearbeitungsauslöser.

Beispiel: Es wird eine Beschränkungsattributregel erstellt und auf die Poles-Feature-Class angewendet, um sicherzustellen, dass mindestens ein Inspektionsereignis für jeden Masten in der Poles-Feature-Class vorhanden ist. Wenn die Beschränkungsattributregel so festgelegt ist, dass sie beim Einfügen ausgelöst wird (wenn beispielsweise ein neuer Masten hinzugefügt wird), wird der Masten nicht erstellt. Es wird empfohlen, die Beschränkungsattributregel in diesem Szenario so festzulegen, dass sie nicht beim Einfügen, sondern beim Aktualisieren ausgelöst wird.

Hinweis:

Die Schaltfläche Einsatzbereite Regeln Einsatzbereite Regeln bietet Zugriff auf eine Galerie konfigurierbarer Prüfungen, die die Erstellung von Beschränkungs- und Validierungsregeln unterstützen. Diese Option ist mit einer ArcGIS Data Reviewer-Lizenz verfügbar.

Weitere Informationen zum Erstellen von Attributregeln mit ArcGIS Data Reviewer

Weitere Informationen zum Erstellen und Verwalten von Attributregeln