Release Notes 4.12
What’s New
Search
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.
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.
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.
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 anexpand
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
include::_update-notes_en.adoc
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:
<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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
Changelog
4.12.1
Line 4 Bundles (4.12.1)
New Features
|
Allow to configure database connection timeout |
|
[app-mgmt-service] Send Last-Modified header to allow conditional caching of app resources |
Fixed Issues
|
CSP header not added to /manager sites in tomcat |
|
Login dialog sometimes remains visible although a login was successful |
|
Splashscreen in exported standalone app differs from default map.apps |
|
[apprt] Optional dependencies with disabled autostart should not be started |
|
[Editing] No snapping on feature layers which are part of a group layer |
|
[Layout] ct-main-app-menu layout dependent on id |
|
[Layout] ctToolProcessing css class not removed |
|
[Legend] Request for secured ArcGIS Server WMS fails |
|
[Manager] BundleUpdateChecker not displayed |
|
[Map] WMS Sublayers cannot be reconfigured |
|
[Popups] Domains not applied for popup defined on store when opened from result center |
|
[Result Center] Typo in fireDataChanged helper |
|
[selection-resultcenter] ID property of MemoryStore is not filled |
|
[store-api] ComplexQuery.encode does corrupt $not expression |
4.12.0
Line 4 Bundles (4.12.0)
Fixed Security Issues
|
New Features
|
[AGS Search] Disable notification about metadata fetching errors by default |
|
[App Editor] Add link to bundle documentation |
|
[App Editor] Add sub schema for map-init bundle config validation |
|
[App Editor] Automatically show list of available bundles when writing in allowedBundles array |
|
[App Editor] Check if allowed bundles are available in registry |
|
[App Editor] Detect duplicate bundles listed in allowedBundles |
|
[App Editor] Make save button a primary button in app editor only when file is changed |
|
[App Editor] Optimize usage of available space in app editor |
|
[App Editor] Prevent user from accidentally closing browser tab while app editor is opened |
|
[apprt-core] Add apprt-core/assign helper to replace usage of dojo/_base/lang#mixin |
|
[apprt-core] Add apprt-core/url-utils helper to replace usage of dojo/io-query |
|
[apprt-core] Add support for Promise.allSettled and Promise.any to apprt-core/Promise |
|
[apprt-core] Move 'ct/_string.stringPatternToRegExp' to 'apprt-core/string-pattern' |
|
[apprt-core] Provide 'equal' helper function in apprt-core as replacement for ct/_equal |
|
[apprt-dom] Introduce apprt-dom bundle |
|
[apprt-polyfill] Upgrade to apprt-polyfill 1.0.1 to support latest version for older browsers |
|
[apprt-request] Change default value for url length to 3072, allow configuration via application.properties |
|
[apprt-request] Return Promises (apprt-core/CancelablePromise) instances instead of dojo/Deferreds |
|
[apprt-request] Support AbortSignal as query option |
|
[Domain Bundles] Allow to overwrite layer properties in single apps |
|
[Domain Bundles] Configure if domain bundle layers are added on top or below app layers |
|
[Editor] Allow to enable snapping |
|
[esri] Migrate imports from esri/tasks to esri/rest |
|
[jsregistry] Do not autoinclude "main" files in layer.js |
|
[jsregistry] Ensure recursive templatestrings are recognized correctly |
|
[jsregistry] Use same location for root/packages.json and root/bundles.json |
|
[Manager] Move "bundles" button to app editor dialog |
|
[Manager] Move "live configuration" button to app editor dialog |
|
[Manager] Replace ACE Editor with Monaco editor |
|
[map actions] Allow to add expand to zoomto action |
|
[Map] Do not show progress indicator if graphics are drawn on the map (selection, redlining) |
|
[Map] Support "timeExtent" at MapWidgetModel |
|
[mapapps-maven-plugin] Add support to trigger pre-optimize after app upload |
|
[MapServerLayerStore] Support canceling of requests |
|
[Performance] Compress layer.js and bundles.json request parameters to avoid switching to POST |
|
[popups-default] Allow configuration of attachment’s displayType |
|
[Search] New search interface that allows searching on multiple stores at once ('Search All' option) |
|
[Security] Add and document default values for common security headers |
|
[Security] Ensure that SSO cookie appends SameSite=None if secure is true and samesite is false |
|
[store-api] Document what a store in map.apps is |
|
[System] Update ArcGIS API for JavaScript to version 4.20 |
|
[Templates] Move drawer button widget config from default app to template manifest |
|
[TOC] Enable parent layers when activating nested layers |
|
[Vue.js] Update to vue 2.6.14 |
Fixed Issues
|
ArcGIS Server tokens are not deleted during logout |
|
Certain strings trigger replacement in returnURLs |
|
[AGOL Authn] Login not working if apprt-esri-init not listed explicite |
|
[AGS Search] Store is registered if service is protected and usage of layer not authorized |
|
[Apps Overview] No apps displayed when using pre-optimized state |
|
[Authentication] Logout timer shows negative remaining time |
|
[Configuration] App does not start with invalid properties in app.json |
|
[Custominfo] Property toolClass does not set predefined icons |
|
[Docker] Internal https requests fail when using the self signed test certificate |
|
[Editing] Data changes ignored if geometry is changed afterwards |
|
[Editing] Discard feature button text is invisible in some themes |
|
[Editing] Undo action executed using 'z' key on keyboard is not respected |
|
[Live Configuration] Dialog broken when trying to adjust map content |
|
[Live Configuration] Toolset position incorrectly resets to 'top/left' |
|
[Manager] Editing in package.json is possible although it cannot be saved |
|
[Manager] Synchronization of apps not working |
|
[Manager] User with role maEditor cannot use "Export for Native App" |
|
[Native App] Browser locale is not respected on page load |
|
[Notifier] Close and pin icons are not shown |
|
[Notifier] Error messages for non-authorized layers |
|
[Omnisearch] Error is logged if result item has no geometry |
|
[Parameter Manager] Changes on base layer visibility are encoded in layer visibility parameter |
|
[Popups] MapView’s timeExtent property is ignored by MapImageLayer popups |
|
[Pre-Optimize] App still recognized as pre-optimized after upload |
|
[Result Center] Domain values are not resolved correctly |
|
[Selection] Available selection actions are not updated |
|
[Selection] No way to go back to the tool with too many layer choices |
|
[Selection] Polygon not visible after setting the first point |
|
[TOC] Enable/disable all items changes visibility of "exclusive" layers |
|
[TOC] Enable/disable all items sets visibility on hidden layers |
|
[TOC] Missing keyboard support for basemap selection |
|
[TOC] Missing keyboard support for expanding and collapsing layers |
|
[TOC] Missing keyboard support for navigation in layer menu |
|
[TOC] Wrong indentation of child elements |
|
[Themes] Incorrect icon for "share-link" tool in collapsable toolset |
|
[Tools] Using an esri icon and launching the tool on app startup destroys the view |