| 漏洞 ID 编号 |
BUG-000148951 |
| 已提交 | May 3, 2022 |
| 上次修改时间 | June 17, 2025 |
| 适用范围 | ArcGIS GIS Server |
| 找到的版本 | 10.9 |
| 操作系统 | Windows OS |
| 操作系统版本 | 10.0 64 Bit |
| 修正版本 | 3.1 |
| 状态 | Fixed
此漏洞已得到修复。 有关详细信息,请参阅“版本修复”和“其他信息”(如果适用)。
|
附加信息
The way the attribute rule is authored is the main cause of the performance.
The attribute rule loops through the entire `Property` layer looking for a property matching the edited feature name. What exacerbates the problem is the fact that the attribute rule is permitted to be executed in the client (Exclude from App Evaluation is unchecked).
ArcGIS Pro first executes the rule locally before sending the applyEdits function, which means ArcGIS Pro needs to fetch all properties from the service, causing paging query requests defined by the maximum record size. The time to pull the class to the client is what takes most of the execution. Later, the applyEdits function is sent to the server to only repeat the same process to execute the attribute rule on the server side. The queries are faster due to querying the database directly. This can be avoided by rewriting the rule to push the where clause to the database, which should push the time to a sub-second.
This attribute rule did, however, expose an optimization in Arcade when some of the fields are asked to be retrieved. The optimization fix was pushed to 11.1/3.1 but cannot be patched to older releases.
解决办法
Rewrite the attribute rule as follows: if ($originalfeature.Name != $feature.Name) { var newName = $feature.Name; var oid = $feature.OBJECTID; var Properties = FeatureSetByName($datastore, 'Branch.GIS.Property', ['OBJECTID'], false); var duplicates = Filter(Properties, 'RetiredByRecord IS NULL AND Name=@newName AND OBJECTID < > @oid') return false; } return true;
重现步骤