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

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

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

Немедленные правила атрибутов запускаются операциями редактирования, такими как вставка, обновление и удаление. При добавлении связанной записи в 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;