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 option data.directory.location. With the help of the new option, you can separate the configuration directory config.directory.location from the working directory data.directory.location of the application.

  • The configuration file ${config.directory.location}/secrets.properties is now loaded by default. It is no longer necessary to reference the file in application.properties using include ./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: false is 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-ui bundle. In addition, unnecessary returnCountOnly requests 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:

Example HTTP request
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

@ct-omnisearch-input-background-color

@ct-inverted-background-color

@ct-omnisearch-input-text-color

@ct-inverted-text-color

@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

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:

Aborting a store query
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 omnisearch bundle has been removed. It has been deprecated since map.apps 4.12. Use the search-ui bundle instead.

    • The resultcenter and selection-resultcenter have been removed. They have been deprecated since map.apps 4.14. Use the result-ui bundle instead. The old bundles are still available in the con terra Developer Network .

    • The bundle apprt-request has been removed. It has been deprecated since map.apps 4.14. Use the apprt-fetch bundle instead.

  • The class apprt-core/Observable has been removed. It was based on an outdated draft of the JavaScript-Observable proposal, which was rejected.

  • Support for cancel in return values of store queries (QueryResult) has been removed.

  • Support for the GeometryService strategy has been removed from the coordinatetransformer bundle. Use the other available strategies (projection engine, proj4js) or implement a custom one via the CustomTransformerStrategy interface.

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.changes will 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 to false and 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.showLiveConfigButton to false.

    • The configuration option config.view.navigation.mouseWheelZoomEnabled in the map-init bundle will be removed soon.

  • Development:

    • The support for JavaScript modules test-utils/later and test-utils/waitForProperty will be removed soon. Instead, use the new module test-utils/waitFor.

    • Support for module.exports in JavaScript files will be removed soon. Use the ECMAScript keywords export or export default instead.

    • 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/array

      native JavaScript functions

      ct/async

      apprt-core/async

      ct/_when

      apprt-core/when

      ct/_compare

      apprt-core/comparators

Known Limitations

MAPAPPS-5654

[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

MAPAPPS-7411

[Accessibility] Add aria-label to header of actions column in result-ui

MAPAPPS-7484

[Accessibility] Add hint for screenreader that search suggestions are available in search-ui

MAPAPPS-7452

[Accessibility] Add i18n support for aria-label of filter DropDown in DataView

MAPAPPS-7443

[Accessibility] Add more context to selection checkboxes for screen reader in result-ui

MAPAPPS-7480

[Accessibility] Add visual highlight for focused tool in a Menu or Menubar toolset

MAPAPPS-7501

[Accessibility] Allow to focus app launch button in manager by keyboard

MAPAPPS-7437

[Accessibility] Support aria-checked attribute for assistive technology in ShrinkingDropdownMenus

MAPAPPS-7354

[agssearch] Support suggestContains: false in AutoStoreRegistration

MAPAPPS-7413

[App Editor] "Refresh/Import metadata" code lens

MAPAPPS-6057

[App Editor] Check for duplicated layer IDs

MAPAPPS-7398

[App Editor] Define initial view in map window

MAPAPPS-7327

[App Editor] Make notifier look less offset

MAPAPPS-7490

[AutoStoreRegistration] Do not register stores for basemaps by default

MAPAPPS-5389

[Coordinate Conversion] Prevent opening popups while using coordinate picker tool

MAPAPPS-7416

[CoordinateConversion] Introduce bundle to replace Esri’s Coordinate Conversion Widget

MAPAPPS-7485

[Coordinatetransformer] Drop support for GeometryService

MAPAPPS-6213

[Domain Bundles] Allow to edit domain bundle in map.apps Manager

MAPAPPS-7502

[domains-system] Allow the identification of the source domain bundle for each layer

MAPAPPS-7451

[Editing] Allow configuration of all supportingWidgetDefaults settings

MAPAPPS-7415

[IntegrationAPI] Automatically register integration api as global variable

MAPAPPS-3216

[Manager] Allow to export bundle

MAPAPPS-4902

[Map APIs] Layer Visibility Tracking and Calculation API

MAPAPPS-7454

[Map] Implement support for navigation.actionMap

MAPAPPS-7481

[Notifier] Improve accessibility of buttons inside notifier

MAPAPPS-6356

[Popup] Allow to create default actions

MAPAPPS-7390

[Popups] Allow custom actions for portal item layers with predefined popupTemplate

MAPAPPS-7457

[Popups] Allow to set initialDisplayMode

MAPAPPS-7467

[Reporting] Configure basemap url for default report

MAPAPPS-7258

[result-api] Provide support for columns displaying information about geometry data

MAPAPPS-7489

[result-api] Use Esri highlight API

MAPAPPS-7469

[result-ui] Show URLs as clickable links automatically

MAPAPPS-7465

[result-ui] Specify link label for fields of renderType "link"

MAPAPPS-7355

[search-ui] Configure minimum input length

MAPAPPS-7352

[search-ui] Omit unnecessary returnCountOnly requests

MAPAPPS-5232

[selection-ui] Configure order of selection tools

MAPAPPS-7391

[System] Update ArcGIS Maps SDK for JavaScript to version 4.33

MAPAPPS-7172

[Vuetify] Show tooltips by default if activator receives focus

MAPAPPS-7385

Add support for DHHN2016

MAPAPPS-7476

Define stronger default CSP header

MAPAPPS-7431

Introduce "config.directory.location" to separate writable directories and static configuration files

MAPAPPS-7430

Introduce general "secrets.properties" as special configuration file

MAPAPPS-7384

Remove apprt-core/Observable

MAPAPPS-7478

Split too long bundle requests into multiple ones if POST request is not possible

Fixed Issues

MAPAPPS-7435

"apprt-vue/directives/clipboard" steals focus when calling "copyText"

MAPAPPS-7493

[Accessibility] Focus lost after search-result item selection

MAPAPPS-7482

[Accessibility] Lack of screenreader support for selected toolitem in menu toolset

MAPAPPS-7439

[Accessibility] Screenreader recognizes invisible loading bars in TOC

MAPAPPS-7434

[Accessibility] Wrong order for keyboard navigation when using collapsed toolsets

MAPAPPS-7397

[ct-jsregistry-maven-plugin] scanPackagesIncludes does not find configured files

MAPAPPS-7449

[Editing] Not all visibleElements are configurable

MAPAPPS-7514

[locateme] Position display limited for EPSG:3857 and missing for other CRS

MAPAPPS-7504

[Manager] Bundles in bundle list stay selected although selection reset by user

MAPAPPS-7500

[Manager] Focus displayed and jumping to arbitrary tab on mouse click

MAPAPPS-7491

[Mutable/Reactivity] Setting a mutable property in a reactive effect throws "Cycle Detected" error

MAPAPPS-7523

[parametermanager] Home button not working when launching with different view mode via URL parameter

MAPAPPS-7466

[Performance] Limited performance when using measurement widget and feature layer

MAPAPPS-7471

[Printing] Printpreview frame still shown when printing widget is closed

MAPAPPS-7474

[Reporting] security.ssl.trustAny is not used to fetch remote image data

MAPAPPS-7506

[result-api] BulkAction not informed about selection reset after table switch

MAPAPPS-7518

[result-ui] Order of actions not stable

MAPAPPS-7505

[result-ui] Table rows with objectID 0 not highlighted when focused

MAPAPPS-6802

[SceneView] Non-visible WMS layer contained in group layer is displayed during initialization of a scene

MAPAPPS-7517

[Theming] Insufficient color contrast in v-expansion-panel

MAPAPPS-7479

[Toolbars] Missing key event handling to use up/down arrow keys for vertical navigation