| 漏洞 ID 编号 |
BUG-000150969 |
| 已提交 | July 21, 2022 |
| 上次修改时间 | December 8, 2025 |
| 适用范围 | Portal for ArcGIS |
| 找到的版本 | 10.9.1 |
| 操作系统 | Windows Server |
| 操作系统版本 | 2019 64 Bit |
| 状态 | As Designed
经开发团队审核,已确定此行为符合设计。 有关详细信息,请参阅“其他信息”部分。
|
附加信息
This issue is expected due to the complexity of the expression and some differences between ArcGIS API for JavaScript 3.x used in Map Viewer Classic and ArcGIS API for JavaScript 4.x used in Map Viewer. The expression in question works in Map Viewer Classic because the older ArcGIS API for JavaScript 3.x queries every field in the layer no matter what. This may seem more flexible for a complex expression like this but it comes at a major performance cost, especially when the expression initiates a query against a layer with many fields and data. ArcGIS API for JavaScript 4.x used in Map Viewer is smarter as it detects the fields it knows it requires and only queries those fields to help save on query performance. However, there are limits to this field detection, especially when fields are referenced in an expression without using the $feature.fieldname notation and doubly so when referenced within an array (as is the case in the provided expression).
Refer to the Workaround section for best practices on how to properly declare fields in an Arcade script to prevent this issue.
解决办法
There are some best practices for fixing or safeguarding against this, and the solution depends on the ArcGIS Enterprise version used.
- In ArcGIS Enterprise 10.9.1 and earlier, it is best to explicitly declare all fields used in the execution of the expression. This best practice is noted in this ArcGIS Arcade documentation under the 'Global variables' section: https://developers.arcgis.com/arcade/guide/logic/#variables.
- In ArcGIS Enterprise 11.0, a new Expects function is added. Refer to this ArcGIS Arcade documentation: https://developers.arcgis.com/arcade/function-reference/data_functions/#expects. The Expects function is an optimized way of declaring fields, functioning the same as the example above.
重现步骤