Release Notes 4.12

What’s New

This version introduces a new, modernized search function. Both the user interface and the search API working underneath are completely reworked and provided as new bundles (search-ui and search-api).

With the new search it is possible to search multiple topics at once without having to specify a topic beforehand. The results are displayed grouped by topic. The new interface is also better usable on mobile devices, as more space is used for the results display and results can be displayed in multiple lines.

search ui

The bundle omnisearch is still available, but we recommend to use the new search.

App-Editor

The former "Manual Configuration" is replaced with this version by the completely modernized, new "App Editor". The App Editor simplifies the configuration of apps with suggestion lists, validations and hints. This makes it easier to avoid incorrect configurations. In addition, it is now possible to go directly to the appropriate documentation for each bundle. The "Bundles" and "Live configuration" functions can now be opened from the app editor.

app editor en

Use domain bundles more effectively

When using domain bundles, it is now possible to define whether the map layers added to an app in this way are inserted above or below the layers defined in the app. In addition, layer configurations can be overwritten in an app. This makes it possible, for example, to efficiently add a subject-related topic to many apps via a domain bundle and to activate the map layers added in this way only in certain subject-related apps when the app is launched and to add them in others as not initially visible.

Better support for OGC services

Support for OGC services is improved with this release for the following two service types.

OGC API - Features - Part 2

map.apps now supports OGC API - Features - Part 2, enabling the use of additional spatial reference systems. All layers in WGS84 and WebMercator as well as all other spatial reference systems supported by the service can now be used.

WFS Layer

A new layer type now allows the use of OGC Web Feature Services (WFS). The used service must be available in version WFS 2.0.0 and support the output format GeoJSON.

Improvement of map content control

When activating a map in the map content control (TOC), it is checked whether the parent elements are also turned visible (e.g. group layers). If they are not, they are automatically activated so that the activated map is immediately visible.

Innovations for developers

TypeScript

With this release, bundles written in TypeScript are delivered for the first time. Our mid-term goal is to migrate the entire JavaScript codebase to TypeScript.

The use of TypeScript is very popular among developers . For us, the main reasons for using it are as follows:

  • Type safety reduces the likelihood of errors in the code.

  • Interfaces for extending map.apps (e.g. map-actions or stores) can be made explicit. A developer can thus see directly while programming if an interface is used correctly.

  • Programming against these interfaces becomes more productive and less error-prone thanks to autocompletion.

  • Private implementation details can be better hidden or marked as such. This makes development against map.apps easier and clearer. It also helps avoid bugs that might occur when updating to newer versions because programming is done against internal interfaces.

  • Code refactoring becomes easier because the IDE (e.g. Visual Studio Code) "understands" the code.

  • The ArcGIS API for JavaScript used by map.apps as technical base is also written completely in TypeScript.

The already existing map.apps typings can be used directly in the map.apps 4 Developers project . A blog article in the Developer Network will explain the usage and its advantages in detail soon.

Default 'Content Security Policy' Header

To increase security, map.apps sends various security headers, including the content-security-policy header. To avoid cross-site scripting, the script-src 'unsafe-inline' directive in particular is avoided. As a result, direct use of HTML <script> blocks within map.apps is no longer allowed.

To customize the security headers that map.apps sends along, see the Security settings section.

New Store API

In map.apps, "stores" are used as data sources for functions such as search or spatial selection. These were previously based on the Dojo Toolkit’s store specification. In this release, the supported store interfaces are moved and specified in the new store-api bundle. This means that there is no longer any dependency on the Dojo Toolkit. For detailed documentation, see bundle-documentation .

New bundle 'apprt-dom'

The new bundle apprt-dom provides functions to replace Dojo helper functions. We recommend to use the functions from the new bundle instead of Dojo functions for own developments. A comparison of the old and new functions is listed in the bundle documentation .

AbortSignal

The apprt-request bundle now supports AbortSignal . For instructions on how to use it, see bundle-documentation .

Further new functions and improvements

  • The ArcGIS API for JavaScript used by map.apps as technical basis is updated to version 4.20 with this release. This results in numerous improvements and bug fixes in the base technology.

  • The edit functionality now offers simple snapping on existing vertices and edges.

  • A 'timeExtent' can now be configured. A 2D or 3D view then only shows the objects from a layer that fall within the corresponding time period.

  • Pre-optimization of an app can now be triggered via the map.apps Maven plugin when uploading an app.

  • The zoomto map action can now be given an expand factor so that a larger map area is displayed around the object when zoomed in on.

  • It is now possible to configure whether file attachments are displayed as a list or preview in the default popup.

  • The loading indicator in the map is now no longer displayed during client-side actions such as sketching or editing. As a result, it is displayed less often overall.

A complete list of all changes can be found in Changelog.

Update Notes

Updated default app

The template for the default app is updated. If you have not made any customizations, remove the file default-app-4.zip from the working directory. The path to this directory is defined in the parameter data.directory.location in the file %TOMCAT%\webapps\mapapps\WEB-INF\classes\custom-application.properties.

Domain bundles

Due to improvements to the domain bundle system, there is a change in behavior. Previously, all thematic maps from domain bundles loaded at app startup were added to the map in their loading order. This resulted in the first loaded topic maps being below the later loaded ones for multiple domain bundles. As of this release, this behavior is reversed so that first loaded topic maps are above later loaded ones.

This new behavior can be influenced by changing the domainBundleOrder option. See Domain-Bundles.

Increase of the maximum URL length for GET requests (instead of POST).

The maximum length of URLs queried by GET from the map.apps server is increased from 2048 to 3072 with this release. This allows the bundle files to be queried via GET instead of POST even in more extensive apps that contain many bundles. This is an advantage because only GET requests can be cached by the browser, increasing performance when the app is reloaded.

Make sure there are no restrictions on your server that prevent longer GET requests. Alternatively, you can change the length at which GET is switched to POST in the client.config.requestMaxUrlLength property in the application.properties file.

Import of map.apps classes

As part of code modernizations, the build process for bundles is incrementally switched to rollup.js . This means that internal, non-public classes from map.apps can no longer be imported in custom implementations. Instead, use official APIs from map.apps or use map.apps classes as templates for your own implementations. As always, we welcome your feedback on missing features, APIs or configuration parameters.

Import of ArcGIS API for JavaScript classes

The ArcGIS API for JavaScript is the largest dependency in map.apps (in the browser) in terms of the number of modules and also their combined size. Until now, the API has been integrated into map.apps in such a way that private, undocumented modules can also be imported at runtime. With this release, the number of JavaScript modules in the API is minimized to what is necessary by only importing documented modules. As a result, the number of JavaScript modules is reduced by more than 55%. On the one hand, this can lead to a performance gain and on the other hand, it prevents accidentally programming against internal interfaces of the API during own developments. If you experience runtime errors in your own developments after updating to this version, please check whether you are using internal modules of the ArcGIS API for JavaScript.

Script blocks in custom index.html files

Direct use of HTML <script> blocks inside map.apps is no longer allowed.

If you use a customized index.html file for an app, use only a single <script> block in it and mark it as follows:

Example of a marked <script> block
<script nonce="@@CSP_NONCE@@">
    $apprt.startApp(...)
</script>

Alternatively, you can outsource scripts to JavaScript files.

Relocation of helper classes from the ct bundle

As part of the introduction of the new store-api bundle, the following utility classes are moved from the ct bundle to the new store-api bundle:

Old New

ct/store/_RestStore

store-api/rest/BaseWriteableRestStore

ct/store/ComplexMemory

store-api/InMemoryStore

ct/store/ComplexQuery

store-api/ComplexQuery

ct/store/ComplexQueryEngine

store-api/utils.createComplexQueryEngine

ct/store/ComplexQueryToRQL

store-api/rest/RQLStore

ct/store/ComplexQueryToSolrQL

store-api/rest/ComplexQueryToSolrQL

ct/store/ComplexQueryToSQL

store-api/rest/ComplexQueryToSQL

ct/store/Filter.filterMetaData

store-api/utils.mergeMetadata

ct/store/RQLStore

store-api/rest/RQLStore

ct/store/SpatialQuery

store-api/SpatialQuery

ct/store/SQLStore

store-api/rest/SQLStore

ct/store/StoreUtil

store-api/utils

For your own developments, change your imports as follows, for example:

// Deprecated:
import RQLStore from "ct/store/RQLStore";

// New:
import { RQLStore } from "store-api/rest/RQLStore";

A 1:1 replacement is not always possible or useful. For more information about the individual classes and their usage, check the API documentation .

Modified response from apprt-request

The apprt-request bundle returns apprt-core/CancelablePromise objects and no longer dojo/promise/Promise objects. This customization results in the dojoPromise.isFulfilled(), dojoPromise.isResolved(), dojoPromise.isRejected(), dojoPromise.isCanceled() methods no longer being available. Use apprt-core/Promise as an alternative. For testing purposes, this change can be disabled using the client.config.requestReturnDojoDeferred configuration option.

Discontinued Features

The following features are discontinued with this release:

  • The dependencies for the SampleProjRemote of line 3 are removed from the m2-repository of the rollout.

  • Custom styling of the scrollbars is removed. The default styling of the respective browser is now used. Custom styling of scrollbars can still be done in custom layouts.

  • Due to changes in apprt-request, dojoPromise.isFulfilled(), dojoPromise.isResolved(), dojoPromise.isRejected(), dojoPromise.isCanceled() methods are no longer available.

Dependencies

Line 4 Bundles

  • Esri ArcGIS API for JavaScript 4.20.2

  • ArcGIS Arcade 1.13

  • core-js 3.8.1

  • Dojo 1.16.4

  • dgrid 1.2.1

  • dstore 1.1.2

  • Moment.js 2.29.1

  • Vue.js 2.6.14

  • Vuetify.js 1.5.24

Line 3 Bundles

  • Esri ArcGIS API for JavaScript 3.25

  • Dojo 1.13.0

  • dgrid 0.3.17

  • xstyle 0.3.2

  • put-selector 0.3.6

  • dstore 1.1.2

  • Moment.js 2.22.1

Changelog

4.12.3

Line 4 Bundles (4.12.3)

Fixed Security Issues

MAPAPPS-6177

Update to Log4j 2.16.0

4.12.2

Line 4 Bundles (4.12.2)

Fixed Security Issues

MAPAPPS-6173

Critical log4j CVE (CVE-2021-44228)

Fixed Issues

MAPAPPS-6170

[Map] valueExpression cannot be used for layer renderer

MAPAPPS-6174

Workers are blocked in Safari browsers (child-src now added to default csp headers)

4.12.1

Line 4 Bundles (4.12.1)

New Features

MAPAPPS-6092

Allow to configure database connection timeout

MAPAPPS-6053

[app-mgmt-service] Send Last-Modified header to allow conditional caching of app resources

Fixed Issues

MAPAPPS-6077

CSP header not added to /manager sites in tomcat

MAPAPPS-6095

Login dialog sometimes remains visible although a login was successful

MAPAPPS-6073

Splashscreen in exported standalone app differs from default map.apps

MAPAPPS-6102

[apprt] Optional dependencies with disabled autostart should not be started

MAPAPPS-6091

[Editing] No snapping on feature layers which are part of a group layer

MAPAPPS-6065

[Layout] ct-main-app-menu layout dependent on id

MAPAPPS-6107

[Layout] ctToolProcessing css class not removed

MAPAPPS-6101

[Legend] Request for secured ArcGIS Server WMS fails

MAPAPPS-6094

[Manager] BundleUpdateChecker not displayed

MAPAPPS-6087

[Map] WMS Sublayers cannot be reconfigured

MAPAPPS-5712

[Popups] Domains not applied for popup defined on store when opened from result center

MAPAPPS-6112

[Result Center] Typo in fireDataChanged helper

MAPAPPS-6093

[selection-resultcenter] ID property of MemoryStore is not filled

MAPAPPS-6052

[store-api] ComplexQuery.encode does corrupt $not expression

4.12.0

Line 4 Bundles (4.12.0)

Fixed Security Issues

MAPAPPS-6015

Clickjacking prevention issue

MAPAPPS-6029

[MSSQL] Security issue with app starts

MAPAPPS-5983

[Reporting] Jasper exceptions are exposed unfiltered in the client

New Features

MAPAPPS-5993

[AGS Search] Disable notification about metadata fetching errors by default

MAPAPPS-5918

[App Editor] Add link to bundle documentation

MAPAPPS-6027

[App Editor] Add sub schema for map-init bundle config validation

MAPAPPS-6028

[App Editor] Automatically show list of available bundles when writing in allowedBundles array

MAPAPPS-5916

[App Editor] Check if allowed bundles are available in registry

MAPAPPS-6023

[App Editor] Detect duplicate bundles listed in allowedBundles

MAPAPPS-6017

[App Editor] Make save button a primary button in app editor only when file is changed

MAPAPPS-5923

[App Editor] Optimize usage of available space in app editor

MAPAPPS-6009

[App Editor] Prevent user from accidentally closing browser tab while app editor is opened

MAPAPPS-5885

[apprt-core] Add apprt-core/assign helper to replace usage of dojo/_base/lang#mixin

MAPAPPS-5871

[apprt-core] Add apprt-core/url-utils helper to replace usage of dojo/io-query

MAPAPPS-5956

[apprt-core] Add support for Promise.allSettled and Promise.any to apprt-core/Promise

MAPAPPS-5970

[apprt-core] Move 'ct/_string.stringPatternToRegExp' to 'apprt-core/string-pattern'

MAPAPPS-5974

[apprt-core] Provide 'equal' helper function in apprt-core as replacement for ct/_equal

MAPAPPS-5874

[apprt-dom] Introduce apprt-dom bundle

MAPAPPS-5958

[apprt-polyfill] Upgrade to apprt-polyfill 1.0.1 to support latest version for older browsers

MAPAPPS-5973

[apprt-request] Change default value for url length to 3072, allow configuration via application.properties

MAPAPPS-5950

[apprt-request] Return Promises (apprt-core/CancelablePromise) instances instead of dojo/Deferreds

MAPAPPS-5949

[apprt-request] Support AbortSignal as query option

MAPAPPS-5523

[Domain Bundles] Allow to overwrite layer properties in single apps

MAPAPPS-5895

[Domain Bundles] Configure if domain bundle layers are added on top or below app layers

MAPAPPS-5919

[Editor] Allow to enable snapping

MAPAPPS-5994

[esri] Migrate imports from esri/tasks to esri/rest

MAPAPPS-5922

[jsregistry] Do not autoinclude "main" files in layer.js

MAPAPPS-5915

[jsregistry] Ensure recursive templatestrings are recognized correctly

MAPAPPS-5924

[jsregistry] Use same location for root/packages.json and root/bundles.json

MAPAPPS-5946

[Manager] Move "bundles" button to app editor dialog

MAPAPPS-5938

[Manager] Move "live configuration" button to app editor dialog

MAPAPPS-5867

[Manager] Replace ACE Editor with Monaco editor

MAPAPPS-5853

[map actions] Allow to add expand to zoomto action

MAPAPPS-5985

[Map] Do not show progress indicator if graphics are drawn on the map (selection, redlining)

MAPAPPS-5914

[Map] Support "timeExtent" at MapWidgetModel

MAPAPPS-5838

[mapapps-maven-plugin] Add support to trigger pre-optimize after app upload

MAPAPPS-5947

[MapServerLayerStore] Support canceling of requests

MAPAPPS-6026

[Performance] Compress layer.js and bundles.json request parameters to avoid switching to POST

MAPAPPS-5846

[popups-default] Allow configuration of attachment’s displayType

MAPAPPS-1976

[Search] New search interface that allows searching on multiple stores at once ('Search All' option)

MAPAPPS-5906

[Security] Add and document default values for common security headers

MAPAPPS-5868

[Security] Ensure that SSO cookie appends SameSite=None if secure is true and samesite is false

MAPAPPS-5969

[store-api] Document what a store in map.apps is

MAPAPPS-5951

[System] Update ArcGIS API for JavaScript to version 4.20

MAPAPPS-6013

[Templates] Move drawer button widget config from default app to template manifest

MAPAPPS-5866

[TOC] Enable parent layers when activating nested layers

MAPAPPS-5941

[Vue.js] Update to vue 2.6.14

Fixed Issues

MAPAPPS-5870

ArcGIS Server tokens are not deleted during logout

MAPAPPS-6044

Certain strings trigger replacement in returnURLs

MAPAPPS-5841

[AGOL Authn] Login not working if apprt-esri-init not listed explicite

MAPAPPS-5881

[AGS Search] Store is registered if service is protected and usage of layer not authorized

MAPAPPS-5836

[Apps Overview] No apps displayed when using pre-optimized state

MAPAPPS-5999

[Authentication] Logout timer shows negative remaining time

MAPAPPS-6035

[Configuration] App does not start with invalid properties in app.json

MAPAPPS-5887

[Custominfo] Property toolClass does not set predefined icons

MAPAPPS-5837

[Docker] Internal https requests fail when using the self signed test certificate

MAPAPPS-5834

[Editing] Data changes ignored if geometry is changed afterwards

MAPAPPS-5892

[Editing] Discard feature button text is invisible in some themes

MAPAPPS-5739

[Editing] Undo action executed using 'z' key on keyboard is not respected

MAPAPPS-5872

[Live Configuration] Dialog broken when trying to adjust map content

MAPAPPS-6045

[Live Configuration] Toolset position incorrectly resets to 'top/left'

MAPAPPS-4860

[Manager] Editing in package.json is possible although it cannot be saved

MAPAPPS-5842

[Manager] Synchronization of apps not working

MAPAPPS-5908

[Manager] User with role maEditor cannot use "Export for Native App"

MAPAPPS-5860

[Native App] Browser locale is not respected on page load

MAPAPPS-5911

[Notifier] Close and pin icons are not shown

MAPAPPS-5913

[Notifier] Error messages for non-authorized layers

MAPAPPS-5955

[Omnisearch] Error is logged if result item has no geometry

MAPAPPS-5942

[Parameter Manager] Changes on base layer visibility are encoded in layer visibility parameter

MAPAPPS-5849

[Popups] MapView’s timeExtent property is ignored by MapImageLayer popups

MAPAPPS-5839

[Pre-Optimize] App still recognized as pre-optimized after upload

MAPAPPS-5882

[Result Center] Domain values are not resolved correctly

MAPAPPS-5925

[Selection] Available selection actions are not updated

MAPAPPS-5899

[Selection] No way to go back to the tool with too many layer choices

MAPAPPS-5854

[Selection] Polygon not visible after setting the first point

MAPAPPS-6003

[TOC] Enable/disable all items changes visibility of "exclusive" layers

MAPAPPS-6002

[TOC] Enable/disable all items sets visibility on hidden layers

MAPAPPS-5901

[TOC] Missing keyboard support for basemap selection

MAPAPPS-5894

[TOC] Missing keyboard support for expanding and collapsing layers

MAPAPPS-5926

[TOC] Missing keyboard support for navigation in layer menu

MAPAPPS-5888

[TOC] Wrong indentation of child elements

MAPAPPS-5862

[Themes] Incorrect icon for "share-link" tool in collapsable toolset

MAPAPPS-5893

[Tools] Using an esri icon and launching the tool on app startup destroys the view

Line 3 Bundles (3.10.10)

New Features

MAPAPPS-6040

Ensure support for new default CSP headers