Release Notes 4.15
What’s New
App editor
The App editor is used to configure apps in map.apps. This release introduces the enhancements described below to make it more efficient to use and help avoid errors.
Add layers for map services automatically
To add an ArcGIS map service (MapServer) to an app, it is sufficient to configure the corresponding URL of the service in map.apps.
However, if you want to display only some layers of the service or make adjustments to the configuration of individual layers ( for example, configure popups), you have to configure the layers individually.
The app editor can now add the configuration of all layers of the corresponding service with one click.
Alternatively, in the sublayers
array all layers are listed in a proposal list and can be selected and added.
Auto-completion for all bundles
Until now, it was possible to use auto-completion in the app editor for the basic structure of an app.json
file as well as for the map-init
bundle.
This results in hints for individual parameters being given in the configuration and suggestions for suitable configurations being displayed when using the key combination Ctrl+Space.
This release extends this mechanism to all bundles.
The configuration parameters of each bundle are automatically read and suggested (also applies to bundles from the con terra Developer Network and custom implementations).
To provide even more detailed suggestions or hints, each bundle can be provided with its own JSON schema file.
Warning for unused configurations
If a configuration is entered in the app for a bundle, but the bundle is not loaded in the app, a warning appears at the configuration, as this can then usually be deleted. This makes the app configuration clearer and avoids unnecessary text being loaded.
Suggest tool IDs
Tools are added to a toolset based on their IDs (see tools). Also here, within a toolset array, pressing Ctrl+Space now gives a list of all tools available in the app.
Search
The search is improved with this release so that it delivers better results than before, especially when searching on ArcGIS services (MapServer, Feature Layer). By means of a client-side scoring, possible search hits are evaluated and displayed weighted according to their similarity to the entered search term. For example, hits that exactly match the entered term are displayed before those that contain the search term.
For details, see section Client-side score in the search-api bundle documentation.
In addition to the improvement in the sorting of results, other optimizations have been introduced.
-
A click in the search field now allows to run the previous search again. This can be useful, for example, if you had moved the map in the meantime and now want to return to the previously selected result.
-
Only those fields are now requested from the server that are needed to display the result texts. This speeds up the display.
-
Via a programming interface the search field can be reset or filled with any text.
Map Content Control (TOC)
In the map content control (TOC), the respective legend can now be displayed for each WMS layer. So far this was only possible for ArcGIS services.
Besides this change, the "Zoom to" icon has been adapted to the icon used in the popup and tools within a so-called ButtonRow (e.g. used to move the layer order in map.apps SDI) can now get tooltips.
Result Center
In map.apps 4.14 a new Result Center was introduced.
Now it is possible to hide certain fields in all tables by configuration (for example objectid
).
In the Result Center the title of a column is displayed based on the field alias. If no alias is defined, the table title is no longer empty, but the field name is displayed instead.
In addition, options for common use cases have been added to the Result API.
Hints in case of missing WebGL support
map.apps uses the ArcGIS Maps SDK for JavaScript to display the map and for various functions. According to its own system requirements, this requires the use of a web browser with WebGL support.
When starting a map.apps application, an error message is now displayed if a browser does not support WebGL. If it can be determined that there is only limited, software-emulated WebGL support, the following warning is displayed instead:
WebGL is only available with reduced performance on this device. The map will therefore only respond very slowly. |
The warning can then be closed.
This mechanism can be disabled in the global configuration (client.config.warnOnSlowGraphicsPerformance
).
Popups
Popups can now access and display Related Records data. This feature is currently only supported for ArcGIS Online feature layers.
For WMS layers, custom actions can now be added to popups.
Accessibility
This release again introduces numerous accessibility improvements. Particularly noteworthy are the following aspects:
-
The order of individual elements when navigating with the keyboard ("tab order") has been structured more logically. The focus now jumps less back and forth but follows a sequence from top left to bottom right.
-
Focus during keyboard navigation is more visibly highlighted in the map and Result Center, and others.
-
Contrast has been checked in the individual color themes included in the standard delivery and optimized by slight color adjustments.
-
Screen reader support has been improved for windows, basemaptoggler and theme switcher, and others.
Documentation
The page structure of the documentation has been simplified. The former chapter "Installation and Operation" has been split into separate pages so that it is clearer which steps are necessary for a first installation. The app configuration chapters are now more quickly accessible and sorted alphabetically. In addition, the home page has been revised so that frequently used pages can be accessed more quickly.
The new section "Reference" contains pages that are used to look up certain facts. New additions here are an overview of the Cookies and Browser Data written by map.apps and a listing of previous map.apps versions and the Versions of the ArcGIS Maps SDK for JavaScript used in them.
The Developer’s Guide has been completely revised to make topics easier to find. The section Getting started contains chapters describing how to start developing your own functions. Other content, some of which already existed, has been restructured and moved to individual pages in the Guides, Basic elements and Reference sections.
Further new functions and improvements
-
The ArcGIS Maps SDK for JavaScript used by map.apps as technical basis is updated to version 4.26 with this release. This results in numerous improvements and bug fixes to the base technology.
-
Vuetify Expansion Panels now have a higher contrast border.
-
The IntegratedMeshLayer layer type is now supported.
-
Editing bundle now supports visibleElements and tooltipOptions options (see bundle documentation ).
-
The legend contains new configuration options to hide layers that are not visible in the map section (see bundle documentation ).
-
The map symbol can now be configured for the display of a coordinate using the CoordinateConversion bundle (see bundle documentation ).
-
The visualization of elements in the CoordinateConversion widget has been improved.
A complete list of all changes can be found in Changelog.
Name change by Esri
In December 2022, Esri changed the name of the "ArcGIS API for JavaScript", which is used by map.apps as a technical foundation, to "ArcGIS Maps SDK for JavaScript" (see Introducing the ArcGIS Maps SDKs ). We are incorporating this name change into the map.apps documentation starting with this release. The name change has no effect on interfaces or functions.
Update Notes
If you skip several versions during the update, please also follow all update notes of the intervening versions. |
Standalone Identity Service for OAuth Integration
With version 4.13.0, OAuth authentication mode was introduced in map.apps.
In this mode map.apps delegates the login to ArcGIS Online, ArcGIS Enterprise Portal or Keycloak.
This mode has been renamed from OAUTH
to IDENTITY
and requires the installation of the separate service Identity Service as of this release.
This service can be downloaded from the con terra Download Portal.
More information about the new service can be found at Identity Service.
If you are not using the Identity Service with the same database as map.apps, delete the IDENT_EXTSESSIONS
, IDENT_SESSIONS
and IDENT_TOKENS
tables from the database.
Suitable SQL scripts can be found here: PostgreSQL, Microsoft SQL Server and Oracle.
If you have customized the following configuration parameters in the global configuration, remove these customizations:
security.oauth.provider
security.oauth.provider.arcgis.url
security.oauth.provider.arcgis.organizations
security.oauth.provider.arcgis.roles
security.oauth.provider.keycloak.url
security.oauth.provider.keycloak.realm
security.oauth.provider.keycloak.revokeRefreshTokens
security.oauth.provider.keycloak.scopes
security.oauth.clientId
security.oauth.clientSecret
security.oauth.tokenRules
security.sharedSecret
security.session.maxIdleTimeInSeconds
security.session.cookieName
security.session.cookieDomain
security.session.enforceSecureAndSameSiteNone
New configuration options have been added for the integration of the new service. Please follow the authentication instructions at ArcGIS Enterprise portal, ArcGIS Online or Keycloak to update your configuration.
No longer needed database columns
Synchronization of apps and app templates is removed with this release (see Discontinued features).
Therefore you can delete the columns SYNC_TEMPL_BIN
, SYNC_MODE
, SYNC_AUTO
, SYNC_AT
from the table APPS
of the database.
Suitable SQL scripts can be found here: PostgreSQL, Microsoft SQL Server and Oracle.
Renaming of the configuration proxy.cors.trustedServers
The configuration option proxy.cors.trustedServers
has been renamed to cors.request.trustedServers
.
If you have customized proxy.cors.trustedServers
in the global configuration change it to cors.request.trustedServers
.
The name change is to make clear that this configuration option is not interpreted by the proxy integrated in map.apps.
Character encoding of JavaScript files
Due to changes in the build system of map.apps, special characters in JavaScript strings are no longer escaped to ASCII as before.
Especially files containing translation strings (bundle.js
) are affected.
There is no need for action if you are running map.apps in the default configuration (delivering apps via the map.apps backend).
But if you are running your own web server to deliver map.apps JavaScript files (e.g. as part of native app export),
make sure that they are delivered by the web server with the HTTP header Content-Type: text/javascript; charset=utf-8
.
Do not use quotes in manager.config.viewbundles
Please remove the quotes from the bundle names listed in manager.config.viewbundles
.
# Old:
manager.config.viewbundles="appmanagement","reportmanagement","bundlemanagement"
# New (removed quotes)
manager.config.viewbundles=appmanagement,reportmanagement,bundlemanagement
Discontinued Features
The following features are discontinued with this release:
-
The
js-beautify
bundle has been removed. -
The
locateme-gpsgate
bundle has been removed. -
The
app-uitest-support
bundle has been removed. -
The compatibility mode for Version 3.x in map.apps Manager has been deprecated since version 4.6 and is now removed.
-
App and app template synchronization has been deprecated since version 4.8 and is now removed. Use domain-bundles instead.
Deprecated Features
The following are deprecated and will be removed in a future release. Also note the additional information in the system requirements.
-
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
tofalse
. -
App and app template synchronization has been deprecated since version 4.8 and will be removed in version 4.15. Use domain-bundles instead.
-
The
allowedWorkflows:["create"]
configuration option in theediting
bundle will be removed soon. UseallowedWorkflows:["create-features"]
instead.
-
-
Bundles:
-
The
omnisearch
bundle is no longer developed. Use thesearch-ui
bundle instead. -
The
resultcenter
andselection-resultcenter
bundles are no longer developed. Use theresult-ui
bundle instead.
-
-
Development:
-
Support for
module.exports
in JavaScript files will be removed soon. Use the ECMAScript keywordsexport
orexport 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.
-
Support for
cancel
in return values of store queries (QueryResult) will be removed soon. The goal is to simplify thestore-api.Store
interface. Please use a AbortController , described in Usage of an AsyncStore to cancel pending queries.const aborter = new AbortController(); store.query({name: "Test"}, { signal: aborter.signal }) .then((resultItems)=>{ ... }, (e)=>{ if (e.name === "AbortError"){ // aborted } }) // trigger abort aborter.abort();
-
The class
ct/mapping/store/MapServerLayerStore
is replaced by a new classLayerStore
in the agssearch bundle. TheLayerStore
class is stored with an ArcGIS FeatureLayer instance and is therefore consistent with the map content. The agssearch bundle now createsLayerStore
instances by default in theAGSStoreFactory
class and theAutoStoreRegistration
andAGSStore
configuration options. The old behavior can be restored during the transition phase with thelegacyImplementation
option. -
The use of
data-template-window
anddata-template-window-events
in template files will not be supported in the future. Instead, make window definitions inmanifest.json
files. -
The following classes will be removed in one of the next releases:
-
Deprecated class | Alternative |
---|---|
|
native JavaScript Funktionen |
|
apprt-core/async |
|
apprt-core/when |
|
apprt-core/comparators |
|
AGSStoreFactory.createStore |
|
store-api/rest/BaseWriteableRestStore |
|
store-api/InMemoryStore |
|
store-api/ComplexQuery |
|
store-api/utils.createComplexQueryEngine |
|
store-api/rest/RQLStore |
|
store-api/rest/ComplexQueryToSolrQL |
|
store-api/rest/ComplexQueryToSQL |
|
store-api/utils.mergeMetadata |
|
store-api/rest/RQLStore |
|
store-api/SpatialQuery |
|
store-api/rest/SQLStore |
|
store-api/utils |
|
- |
Known Limitations
|
[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations |
|
[Popups] No popup shown for MapServer sublayer with custom popupTemplate and unique value renderer |
|
[Printing] Printing of line measurement not possible with PrintTask published from ArcMap |
Workaround for MAPAPPS-6844
Mapserver layers that use a UniqueValueRenderer sometimes do not display popups.
This bug is known and has been fixed by Esri in the next version of the ArcGIS Maps SDK for JavaScript (4.27).
As a workaround, the outFields
required by the renderer can be defined in the popupTemplate
, as in the following example:
"popupTemplate": {
}, "title": { "test",
"outFields": [ "field1", "field2" ],
"content": [
{ "type": "text", "text": "The value of test property is {test}." }
]
}
Dependencies
-
ArcGIS Maps SDK for JavaScript 4.26.3
-
ArcGIS Arcade 1.21
-
JasperReports 6.20.0
-
Moment.js 2.29.4
-
Vue.js 2.7.8
-
Vuetify.js 1.5.24
Changelog
4.15.1
Fixed Issues
|
[Accessibility] TOC actions of type slider do not have an aria-label |
|
[Accessibility] Parsing errors during automated accessibility check in v-combobox |
|
[Browsersync] @@properties@@ with special characters are not replaced |
|
[Configuration] Paths not loaded correctly when using include in global configuration |
|
[Editing] Features cannot be saved on services published with ArcGIS Pro |
|
[geojson] geojsonTransformer does not respect rings correctly |
|
[iPhone] map.apps cannot be loaded in iFrame |
|
[jsregistry] Out of memory errors in cache implementation |
|
[Layout] Misaligned icon when drawer is aligned to the right |
|
[Map] Ground layer not initialized correctly with many layers in map |
|
[Map] Inconsistent removal of blocked layers |
|
[mapapps-maven-plugin] includePattern for deployApps goal is not working as expected |
|
[Omnisearch] Keyboard disappears on Android WebView |
|
[result-ui] CSV export contains thousand separators in number fields |
|
[result-ui] Scroll position is lost when minimizing or resizing the widget |
|
[search-ui] Search on numeric field leads to error during client side scoring |
|
[selection-ui] Dropdown not closed when selection is done using touch |
|
[store-api] Operator $or with empty sub-expressions returns unexpected result |
|
[TOC] Group layer sublayers are not indented correctly |
|
[Vuetify] Combobox does not show input after first chip |
4.15.0
New Features
|
[Accessibility] Add label spelling for dropdown lists (theme and language switcher) |
|
[Accessibility] Adjust tab order for keyboard navigation |
|
[Accessibility] Improve contrast in map.apps themes |
|
[Accessibility] Improve focus of result-ui for keyboard navigation |
|
[Accessibility] Use unique labels for toolbar components |
|
[agolauthn] Ensure that oauth properties defined in app.json are used in standalone export |
|
[agolauthn] Support PKCE authorization code flow |
|
[App Editor] Allow to add bundle specific json config schema |
|
[App Editor] Automatically add configuration for layers of ArcGIS map services |
|
[App Editor] Automatically generate json-schema for bundles without config-schema.json |
|
[App Editor] Provide a list of available tool ids when configuring toolsets |
|
[App Editor] Update monaco editor to 0.35.0 |
|
[App Editor] Warn if configured bundle is not loaded in app |
|
[apprt-binding] Improve typings to be compatible with Accessor.watch |
|
[Configuration] Allow to specify configuration options as environment variables |
|
[Configuration] Change default of persistIdentityManagerState to false |
|
[Configuration] Rename "proxy.cors.trustedServers" to "cors.request.trustedServers" |
|
[Coordinate Conversion] Allow to configure map symbol |
|
[Coordinate Conversion] Improve contrast for disabled elements in srs selection |
|
[Coordinate Conversion] Small UI improvements |
|
[ct-identity] Rename security.mode from OAUTH to IDENTITY |
|
[ct-identity] Support ctIdentity Cookie as a Domain Cookie to allow extended web application logins |
|
[Documentation] Add searchPriority property to search documentation |
|
[Editing] Allow to configure visibleElements and tooltipOptions |
|
[Layer Storage] Add fallback for field title if alias is empty |
|
[Legend] Allow to configure layer visibility and heading level |
|
[Logging] Change default client side log level to WARN |
|
[Logging] Do not add info log entry when login module is skipped |
|
[Map] Add support for IntegratedMeshLayer |
|
[Map] Show hint when WebGL is not available |
|
[Popups] Allow access to related features |
|
[Popups] Allow to add Custom Actions to WMS layers |
|
[portal-token-conversion] Add support for apprt-tokens/IdentityService |
|
[result-api] Optimize API for common tasks |
|
[result-ui] Hide specific fields in all tables |
|
[result-ui] Set fixed size for checkbox column |
|
[Search] Only request fields required to show result label |
|
[Search] Search for exact search term |
|
[search-ui] Allow selection of same item again from drop down menu |
|
[search-ui] Provide interface to reset the state |
|
[search-ui] Provide interface to set text in search ui box |
|
[search-ui] Resolve missing placeholders used in searchLabel to empty string |
|
[search-ui] Start smart.finder search when pressing <ENTER> |
|
[System] Update ArcGIS Maps SDK for JavaScript to version 4.26 |
|
[TOC] Allow to define tooltips for buttons in (custom) "botton-row" |
|
[TOC] Integrate WMS layer legend images |
|
[TOC] Usability optimization by changing icons |
|
[TypeScript] Synchronize map.apps typings with compiled output |
|
[Vuetify] Improve contrast for expansion panels |
Fixed Issues
|
[Accessibility] Erroneous keyboard control in result-ui |
|
[Accessibility] Missing border around map during keyboard navigation |
|
[Accessibility] Missing labels for windows |
|
[Accessibility] TOC element in footer not accessible when result center is shown in footer |
|
[App Editor] No highlight for bracket pairs |
|
[apprt-esri-init] Pre-configured AGOL token fetching leads to initialization error |
|
[ct-identity] offline_access session expires during use in Keycloak |
|
[Custom Info] Incorrect description of docking bar support in bundle documentation |
|
[Custom Info] Wrong window position when active on startup |
|
[font-mapapps] local() font definition might cause problem when custom font is installed in OS |
|
[Integration API] whenMapReady does not fire |
|
[integration-map] Bundle depends on fixed version |
|
[Language Toggler] Bundle generates unencoded URL |
|
[LayerStore] Some spatial operators are not applied correctly |
|
[Manager] "map" property is added to "bundles" property of app.json on app upload |
|
[Manager] Login processing dialog sometimes covers manager app |
|
[Measurement] Start point not displayed on mobile devices |
|
[Notifier] Wrong notifier position for early messages |
|
[OmniSearch] Input shows wrong context menu |
|
[Report tool] Documentation links to non-existing API documentation |
|
[result-ui] Filter searches for formatted numerical values and not the actual data set |
|
[result-ui] Programmatic update of dataset items does not update highlight geometry |
|
[result-ui] Zoomto results fails if store does not contain geometries |
|
[selection-ui] Selection tools produce errors in console |
|
[selection-ui] Topic choice list sometimes overlaps close button |
|
[Store-API] ComplexQueryExpression $in without any values produces invalid SQL |
|
[TOC] Action menu displays button actions in multiple lines |
|
[Tools] Toolcontainer configured with toggleMode=true deactivates current active Tool in dev mode |
|
[Toolsets] Tool rules cannot be applied on a toolset that is registered as tool |
|
[Vuetify] Screen readers read "empty" because v-select elements have no value |
|
Default referrer-policy is too strict for embedding map.apps in an iFrame |
|
SSO_cookie is invalidated too early |