Release Notes 4.20
What’s New
Long Term Security Support (LTSS)
This version introduces Long Term Security Support. Version map.apps 4.20 is the first version to be designated as an LTSS release. Further information on this can be found on the page Long Term Security Support (LTSS).
App Editor and Manager
To simplify the configuration of apps, the metadata of a map service can now be automatically retrieved and updated in the App Editor. You will also receive a warning if IDs are assigned twice. To make it easy and intuitive to set the initial map view, you can now open a window with a map or 3D view and define the desired view there.
Domain bundles can now be edited and saved in the map.apps Manager and thus directly in the web browser. This eliminates the need to export and re-import the edited bundle.
All bundles stored in the database can now be exported via the Manager interface.
Query, search and convert coordinates
This release introduces a new bundle that replaces Esri’s Coordinate Conversion Widget. It allows you to conveniently convert, search and query coordinates in different formats. When using the coordinate picker tool, popups are no longer opened, allowing you to work without interruption.
Editing
Starting with this release, it is possible to edit or delete multiple objects simultaneously (‘bulk editing’). In addition, various drawing tools can be used when creating geometries. Before a new object is created, it can be saved as a draft so that additional objects can be created first and saved in the map service later.
Furthermore, all supportingWidgetDefaults settings can now be fully configured to customize the behavior of the editing tools even more precisely.
Result Center
The Result Center has been improved in terms of accessibility (see the following section).
In addition, geometry information is supported as columns, and URLs in result tables are now automatically displayed as clickable links.
An individual link label can be configured for fields with the render type link.
The display of selected objects now uses the Esri Highlight API for consistent behavior in 2D and 3D and better performance.
Accessibility
As part of our ongoing efforts to make applications as accessible as possible, the following improvements are introduced with this release:
-
Improved focus highlighting for menu or menu bar tool sets
-
Apps can be launched in map.apps Manager using the keyboard
-
Improved aria attributes in various modules (including Result Center, DataView, search suggestions)
-
Screen reader notification when search suggestions are available in search-ui
-
aria support for checkboxes and menus (e.g. aria-checked in ShrinkingDropdownMenus)
-
Tooltips are displayed when focusing on elements
-
Notifier components are more keyboard-friendly
Further improvements
-
The technical foundation of map.apps has been updated to ArcGIS Maps SDK for JavaScript Version 4.33. This brings numerous enhancements and bug fixes to the core technology.
-
The new configuration option config.directory.location allows you to specify an alternative directory for
application.properties. The default value points to the same path as the configuration optiondata.directory.location. With the help of the new option, you can separate the configuration directoryconfig.directory.locationfrom the working directorydata.directory.locationof the application. -
The configuration file
${config.directory.location}/secrets.propertiesis now loaded by default. It is no longer necessary to reference the file inapplication.propertiesusinginclude ./secrets.properties. -
This release introduces support for Tomcat 11 and Java 25. At the same time, support for Java 17 has been discontinued.
-
A new layer visibility tracking and calculation API has been introduced, which allows the visibility and status of map layers to be efficiently tracked and determined.
-
The AutoStoreRegistration mechanism has been improved: basemaps are no longer automatically registered and the option
suggestContains: falseis supported. -
Default actions can now be defined in popups. In addition, user-defined actions can be specified for portal item layers. A new option allows you to control the initial display behavior (
initialDisplayMode) of popups. -
The base map for default reports can now be configured via a basemap URL.
-
A minimum input length for search terms can now be configured in the
search-uibundle. In addition, unnecessaryreturnCountOnlyrequests are avoided, which improves performance. -
The order of the selection tools (
selection-ui) can now be freely configured.
Update Notes
| If you skip several versions during the update, please also follow all update notes of the versions in between. |
X-Forwarded-For header
In this version, the processing of the X-Forwarded-For header has been revised to make the determination of the client IP in proxy environments more accurate and secure.
A stricter parser has been implemented that only accepts pure IP addresses. However, it has been found that this strict validation can lead to problems. The definition of X-Forwarded-For is a de facto standard that does not actually provide for port specifications. However, various implementations, for example in IIS/ARR, HAProxy or firewalls, deviate from this and provide IP addresses including port numbers.
These formats are currently rejected by map.apps 4.20.0, which means that the application cannot be accessed.
If you encounter problems after installation, please download the patch map.apps-4.20.0-PATCH-x-forwarded-header.zip from the con terra Portal and follow the instructions in README.txt.
This behaviour will be corrected in the next bugfix release.
Bundle renaming 'esri' → '@arcgis/core'
In alignment with the ArcGIS Maps SDK for JavaScript, the bundle named esri has been renamed to @arcgis/core.
Therefore, you have to change the imports in the code of any of your own bundles accordingly.
For example, in your TypeScript or JavaScript files, change:
import Layer from "esri/layers/Layer";
to
import Layer from "@arcgis/core/layers/Layer";
And in your manifest.json files, change:
{
// ...
"dependencies": {
"esri": "~x.y.z"
}
}
to
{
// ...
"dependencies": {
"@arcgis/core": "~x.y.z"
}
}
To help you with the migration, some scripts will be provided in the map.apps rollout.
Removal of bundle 'apprt-request'
The bundle apprt-request has been removed.
It has been deprecated since map.apps 4.14.
To perform HTTP requests, use apprt-fetch instead, for example:
import { apprtFetch } from "apprt-fetch";
const response = await apprtFetch("https://example.org/get");
Theming
Due to the removal of the omnisearch bundle, the omnisearch-specific LESS variables have either been removed or renamed in the themes.
This affects the following variables, that are defined in the themeSettings.less file:
-
@ct-omnisearch-input-background-color -
@ct-omnisearch-input-text-color -
@ct-omnisearch-result-list-hover-color -
@ct-omnisearch-drawer-button-background-color -
@ct-omnisearch-drawer-button-icon-color
To adapt your custom theme or themes-extension, follow these steps:
Step 1: Adjusting the themeSettings.less file
Open the file themeSettings.less in your theme or theme extension.
Add the variables:
-
@ct-inverted-background-color: #ffffff; -
@ct-inverted-text-color: #000000;
Delete the variable definitions:
-
@ct-omnisearch-input-background-color -
@ct-omnisearch-input-text-color
Rename the variables:
-
@ct-omnisearch-result-list-hover-color→@ct-search-ui-result-list-hover-color -
@ct-omnisearch-drawer-button-background-color→@ct-drawer-button-background-color -
@ct-omnisearch-drawer-button-icon-color→@ct-drawer-button-icon-color
Step 2: Replace the removed variables
This step is only necessary if you have written your own *.less files.
Search for occurrences of the old variables in your *.less files and replace them with the corresponding new variables.
Old name |
New name |
|
|
|
|
|
|
|
|
|
|
Cancellation of store queries
Support for the cancel() method on results returned by store queries (QueryResults) has been removed.
This feature has been deprecated since map.apps 4.15.
To cancel pending store queries, use the standard AbortController instead. For example:
const aborter = new AbortController();
store.query(
{ name: "Test" },
{ signal: aborter.signal }
).then((resultItems ) => {
// ...
}, (e) => {
if (e.name === "AbortError"){
// aborted
}
});
// trigger abort
aborter.abort();
Configuration option configuration.watch.changes
The default value for the configuration option configuration.watch.changes has been set to false.
The option has been discontinued and it is recommended that the option no longer be used (see Discontinuations).
If you still want to restore the previous behaviour, set the option explicitly to true.
Remove unnecessary reference in configuration
The configuration file ${config.directory.location}/secrets.properties is now loaded by default.
The entry include ./secrets.properties in the application.properties can be removed.
Removal of Logstash support in service.monitor Analytics integration
The Logstash support in the service.monitor Analytics integration has been dropped. Therefore, some configuration properties have to be removed.
| Beginning with this release, service.monitor is required in version 4.10 or later, using Ingest pipelines instead of Logstash. |
In your application.properties file, if present, remove the following properties:
### these properties can be removed
analytics.gelf.host=localhost
analytics.gelf.port=12201
analytics.gelf.protocol=udp
Also, change the following property:
# this property now defaults to 'elastic' instead of 'gelf'
analytics.messengerType=elastic
Additionally, add the following properties:
analytics.elastic.url=https://elasticsearch.example.com
analytics.elastic.username=username
analytics.elastic.password=password
Discontinued Features
-
Bundles:
-
The
omnisearchbundle has been removed. It has been deprecated since map.apps 4.12. Use thesearch-uibundle instead. -
The
resultcenterandselection-resultcenterhave been removed. They have been deprecated since map.apps 4.14. Use theresult-uibundle instead. The old bundles are still available in the con terra Developer Network . -
The bundle
apprt-requesthas been removed. It has been deprecated since map.apps 4.14. Use theapprt-fetchbundle instead.
-
-
The class
apprt-core/Observablehas been removed. It was based on an outdated draft of the JavaScript-Observable proposal, which was rejected. -
Support for
cancelin return values of store queries (QueryResult) has been removed. -
Support for the
GeometryServicestrategy has been removed from thecoordinatetransformerbundle. Use the other available strategies (projection engine, proj4js) or implement a custom one via theCustomTransformerStrategyinterface.
Deprecated Features
The following are deprecated and will be removed in a future release. Also note the additional information in the system requirements.
-
The configuration option
configuration.watch.changeswill be removed in the next release. Dynamic applying of configuration changes has caused problems in various cases, which could lead to an unstable application. The default value of this option will be set tofalseand it is recommended to no longer use the option. -
map.apps Manager and app configuration:
-
Live configuration is no longer being developed and will be removed in an upcoming release. Instead, use the app-editor to configure apps. You can already hide the live configuration for your users by setting the configuration option
manager.config.editor.showLiveConfigButtontofalse. -
The configuration option
config.view.navigation.mouseWheelZoomEnabledin themap-initbundle will be removed soon.
-
-
Development:
-
The support for JavaScript modules
test-utils/laterandtest-utils/waitForPropertywill be removed soon. Instead, use the new moduletest-utils/waitFor. -
Support for
module.exportsin JavaScript files will be removed soon. Use the ECMAScript keywordsexportorexport defaultinstead. -
To simplify a future migration from AMD to another module system, JavaScript files should be written as ECMAScript modules only, if possible, and then transpiled.
-
The following classes will be removed in one of the next releases:
Deprecated class Alternative ct/arraynative JavaScript functions
ct/asyncapprt-core/async
ct/_whenapprt-core/when
ct/_compareapprt-core/comparators
-
Known Limitations
|
[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations |
Dependencies
-
Esri ArcGIS Maps SDK for JavaScript 4.33.14
-
ArcGIS Arcade 1.32
-
JasperReports 6.21.5
-
Moment.js 2.29.4
-
Vue.js 2.7.16
-
Vuetify.js 1.5.24 (with custom patches, tracked as 1.5.37)
Changelog
4.20.0
New Features
|
[Accessibility] Add aria-label to header of actions column in result-ui |
|
[Accessibility] Add hint for screenreader that search suggestions are available in search-ui |
|
[Accessibility] Add i18n support for aria-label of filter DropDown in DataView |
|
[Accessibility] Add more context to selection checkboxes for screen reader in result-ui |
|
[Accessibility] Add visual highlight for focused tool in a Menu or Menubar toolset |
|
[Accessibility] Allow to focus app launch button in manager by keyboard |
|
[Accessibility] Support aria-checked attribute for assistive technology in ShrinkingDropdownMenus |
|
[agssearch] Support suggestContains: false in AutoStoreRegistration |
|
[App Editor] "Refresh/Import metadata" code lens |
|
[App Editor] Check for duplicated layer IDs |
|
[App Editor] Define initial view in map window |
|
[App Editor] Make notifier look less offset |
|
[AutoStoreRegistration] Do not register stores for basemaps by default |
|
[Coordinate Conversion] Prevent opening popups while using coordinate picker tool |
|
[CoordinateConversion] Introduce bundle to replace Esri’s Coordinate Conversion Widget |
|
[Coordinatetransformer] Drop support for GeometryService |
|
[Domain Bundles] Allow to edit domain bundle in map.apps Manager |
|
[domains-system] Allow the identification of the source domain bundle for each layer |
|
[Editing] Allow configuration of all supportingWidgetDefaults settings |
|
[IntegrationAPI] Automatically register integration api as global variable |
|
[Manager] Allow to export bundle |
|
[Map APIs] Layer Visibility Tracking and Calculation API |
|
[Map] Implement support for navigation.actionMap |
|
[Notifier] Improve accessibility of buttons inside notifier |
|
[Popup] Allow to create default actions |
|
[Popups] Allow custom actions for portal item layers with predefined popupTemplate |
|
[Popups] Allow to set initialDisplayMode |
|
[Reporting] Configure basemap url for default report |
|
[result-api] Provide support for columns displaying information about geometry data |
|
[result-api] Use Esri highlight API |
|
[result-ui] Show URLs as clickable links automatically |
|
[result-ui] Specify link label for fields of renderType "link" |
|
[search-ui] Configure minimum input length |
|
[search-ui] Omit unnecessary returnCountOnly requests |
|
[selection-ui] Configure order of selection tools |
|
[System] Update ArcGIS Maps SDK for JavaScript to version 4.33 |
|
[Vuetify] Show tooltips by default if activator receives focus |
|
Add support for DHHN2016 |
|
Define stronger default CSP header |
|
Introduce "config.directory.location" to separate writable directories and static configuration files |
|
Introduce general "secrets.properties" as special configuration file |
|
Remove apprt-core/Observable |
|
Split too long bundle requests into multiple ones if POST request is not possible |
Fixed Issues
|
"apprt-vue/directives/clipboard" steals focus when calling "copyText" |
|
[Accessibility] Focus lost after search-result item selection |
|
[Accessibility] Lack of screenreader support for selected toolitem in menu toolset |
|
[Accessibility] Screenreader recognizes invisible loading bars in TOC |
|
[Accessibility] Wrong order for keyboard navigation when using collapsed toolsets |
|
[ct-jsregistry-maven-plugin] scanPackagesIncludes does not find configured files |
|
[Editing] Not all visibleElements are configurable |
|
[locateme] Position display limited for EPSG:3857 and missing for other CRS |
|
[Manager] Bundles in bundle list stay selected although selection reset by user |
|
[Manager] Focus displayed and jumping to arbitrary tab on mouse click |
|
[Mutable/Reactivity] Setting a mutable property in a reactive effect throws "Cycle Detected" error |
|
[parametermanager] Home button not working when launching with different view mode via URL parameter |
|
[Performance] Limited performance when using measurement widget and feature layer |
|
[Printing] Printpreview frame still shown when printing widget is closed |
|
[Reporting] security.ssl.trustAny is not used to fetch remote image data |
|
[result-api] BulkAction not informed about selection reset after table switch |
|
[result-ui] Order of actions not stable |
|
[result-ui] Table rows with objectID 0 not highlighted when focused |
|
[SceneView] Non-visible WMS layer contained in group layer is displayed during initialization of a scene |
|
[Theming] Insufficient color contrast in v-expansion-panel |
|
[Toolbars] Missing key event handling to use up/down arrow keys for vertical navigation |