Правила атрибутов и классы отношений

Правила атрибутов могут использоваться для чтения и редактирования связанных записей для наборов данных, которые участвуют в классах отношений в базе геоданных. Правила могут применяться к классам признаков и таблицам, участвующим в классах отношений, включая вложения и объектно-связанные аннотации. Правила атрибутов также могут быть использованы для отделения событий редактирования от обновлений класса-источника и класса-адресата в отношении, т.е. добавления, перемещения или удаления связанной записи. Например, правило атрибута немедленных вычислений может обновлять поле атрибута при добавлении пространственного объекта в связанный класс пространственных объектов.

Включающие события в классах отношений

Правила немедленного вычисления и ограничения атрибутов запускаются при определенных событиях редактирования (операциях вставки, обновления и удаления). Для событий обновления можно дополнительно указать список запускающих полей. При добавлении связанной записи в ArcGIS Pro с помощью опций контекстного меню Добавить новый к отношению или Добавить выбранное к отношению запускается несколько событий редактирования.

При использовании операции контекстного меню Добавить новый к отношению происходит следующее:

  • Создается пустая строка в таблице-адресате класса отношений.
    • Вставляется триггер на целевой строке.
  • В строке назначения устанавливается внешний ключ.
    • Обновляется триггер на целевой строке.
Например, при добавлении правила атрибута для таблицы-адресата с запускающим событием обновления, правило захватывает внешний ключ и запрашивает связанную с ним строку в таблице-источнике.

Также можно использовать операции контекстного меню Добавить выбранное к отношению и Удалить из отношения.

В следующей таблице перечислены конкретные функции, которые можно отличить по событию обновления, сравнив $originalFeature.key и $feature.key.

ФункцияСобытиеВыражение ArcGIS Arcade

Добавление объекта к отношению

Обновить

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

Добавление выбранных объектов к отношению

Обновить

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

Удаление объекта из отношения

Обновить

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

Операция удаления, выполненная над связанной записью

Удалить

Чтение связанных записей

При работе с классами отношений можно читать связанные записи с помощью функций Arcade, которые принимают входные объекты и возвращают связанные записи.

  • FeatureSetByRelationshipName - запуск ограничен контекстом сервера. При использовании этой функции для правил атрибутов убедитесь, что опция Исключить из оценки приложения задана как true.
  • FeatureSetByRelationshipClass — Поддерживает работу как на стороне сервера, так и на стороне клиента. Правила, использующие эту функцию, могут быть запущены локально в приложении (например, ArcGIS Pro и ArcGIS Maps SDKs for Native Apps) перед отправкой изменений в источник данных.

Также можно читать связанные записи с помощью функции FeatureSetByName Arcade и Фильтр по внешнему ключу.

Прочитайте соответствующие записи для класса отношений с помощью функции FeatureSetByName Arcade.

Правило вычисления создается для поля InspectionCount в классе объектов опор, который участвует в классе отношений один ко многим с таблицей проверки. Для непосредственного считывания класса проверки и извлечения связанных записей при обновлении можно использовать функцию FeatureSetByName. Для использования этой функции Arcade необходимо знать поле класса отношений. Для этого класса отношений исходным первичным ключом является опора globalID класса объектов опор, а исходным внешним ключом является poleguid автономной таблицы проверки.

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

Читайте соответствующую запись для класса отношений с помощью функции FeatureSetByRelationShipName Arcade.

Тот же скрипт для чтения связанных записей для класса отношений можно переписать с помощью функции FeatureSetRelationshipName. Используя эту функцию, вам необязательно знать внешний ключ, только имя отношения, pole_inspection.

Внимание:

При использовании этой функции для создания правила атрибута убедитесь, что для параметра Исключить из оценки приложения установлено значение true.

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

Читайте соответствующую запись для класса отношений с помощью функции FeatureSetByRelationshipClass Arcade.

Тот же скрипт для чтения связанных записей из класса отношений можно переписать с помощью функции FeatureSetByRelationshipClass. Используя эту функцию, вам необязательно знать внешний ключ, только имя отношения, pole_inspection. Эта функция поддерживает выполнение как на стороне сервера, так и на стороне клиента, поэтому правила атрибутов, использующие эту функцию, могут выполняться локально в приложении.

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

Создание, обновление и удаление связанных записей

Связанные записи из классов отношений также могут быть отредактированы с помощью правил вычислений на основе возврата словаря.

Приведем пример создания правила вычисления, которое создает связанную запись. Когда поле комментария столба обновляется пользователем, для создания записи о проверке используется ключевое слово словаря edit. Аналогично можно обновлять или удалять связанные записи. Подробнее см. Ключевые слова словаря для правил атрибутов.

Добавьте новую связанную запись для класса отношений при обновлении редактирования.

Правило вычисления используется для создания новой связанной записи, когда поле комментария столба обновляется пользователем. В этом выражении для создания новой записи проверки используется ключевое словарное слово edit, если поле с комментариями изменится. Аналогично можно обновлять или удалять связанные записи. Дополнительную информацию см. в разделе Ключевые слова словаря правил атрибутов.

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

Проверка и оценка правил класса отношений

Правила атрибутов проверка или ограничение можно создавать и применять для обеспечения соблюдения правил класса отношений.

Например, у вас есть настройка класса отношений между классом объектов опор (источник) и таблицей проверок (адресат). Для каждой опоры должна быть зарегистрирована хотя бы одна или несколько проверок.

Для этого вы можете создать правило класса отношений один-к-одному (1:1) или один-ко-многим (1:M) между этими связанными данными. После создания правила класса отношений вы можете использовать следующий скрипт для написания правила атрибута проверки, которое будет применяться к классу объектов опор (источник), чтобы обеспечить, чтобы каждая опора прошла одну или несколько проверок:

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

После добавления этого правила атрибута проверки к данным, процесс оценки проверяет правила для данных, чтобы убедиться, что правила соблюдаются. Используемый метод оценки зависит от типа и свойств правила.

Правила проверки оцениваются в указанное пользователем время с помощью вида Инспектор ошибок или инструмента Оценить правила. Во время оценки правило проверки создает ошибочные объекты, которые выделяют объекты, нарушающие правила. Объекты ошибок для этих правил можно просмотреть с помощью вида Инспектора ошибок.

Примечание:

Вы можете создать эти правила, используя функции Arcade FeatureSetByRelationshipName или FeatureSetByRelationshipClass. FeatureSetByRelationshipClass позволяет оценивать правила через сервис на стороне клиента, что потребует ArcGIS Pro 3.2 или более позднюю, это объясняется в разделе Чтение связанных записей выше.

Для изменения этого правила атрибута, чтобы обеспечить для опоры только одну проверку или отменить проверки совсем, вы можете переписать скрипт следующим образом:

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

Вы также можете создать и применить к данным правило ограничения атрибута. Правила ограничения определяют допустимые конфигурации атрибутов и общие отношения для пространственного объекта. В отличие от правил вычисления, правила ограничений не используются для заполнения атрибутов; они используются для обеспечения выполнения определенных условий объекта, а также могут предотвратить редактирование, если условие не выполнено.

Правила ограничений оцениваются во время событий редактирования (операций вставки, обновления и удаления). Для событий обновления можно дополнительно задать список запускающих полей. Правила ограничений возвращают значения true или false, которые которые указывают, выполняется ли то или иное правило ограничения:

  • True - Предоставленное выражение скрипта выполнено, объект будет создан.
  • False - Предоставленное выражение скрипта не выполнено, объект не будет создан.

При создании и применении правил ограничения атрибутов обратите пристальное внимание на порядок триггера редактирования.

Например, правило ограничения атрибута создается и применяется к классу объектов опор, чтобы обеспечить наличие хотя бы одного события проверки для каждой опоры в классе объектов опор. Если правило ограничения атрибута настроено на срабатывание при вставке, например, при добавлении новой опоры, опору создать не удастся. В этом сценарии рекомендуется создать правило ограничения атрибута, которое будет активироваться при обновлении, а не при вставке.

Примечание:

Кнопка Готовые к использованию правила Готовые к использованию правила обеспечивает доступ к галерее настраиваемых проверок, которые поддерживают создание ограничений и правил проверки. Это доступно с лицензией ArcGIS Data Reviewer.

Узнайте больше о том, как создавать правила атрибутов с помощью ArcGIS Data Reviewer

Узнайте больше о создании правил атрибутов и управлении ими