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.

app editor sublayers

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.

app editor tools

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.

search ui

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.

toc wms legend

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.

popups relates

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:

Dropped options
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.

No quotes 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 to false.

    • 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 the editing bundle will be removed soon. Use allowedWorkflows:["create-features"] instead.

  • Bundles:

    • The omnisearch bundle is no longer developed. Use the search-ui bundle instead.

    • The resultcenter and selection-resultcenter bundles are no longer developed. Use the result-ui bundle instead.

  • Development:

    • 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.

    • Support for cancel in return values of store queries (QueryResult) will be removed soon. The goal is to simplify the store-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 class LayerStore in the agssearch bundle. The LayerStore class is stored with an ArcGIS FeatureLayer instance and is therefore consistent with the map content. The agssearch bundle now creates LayerStore instances by default in the AGSStoreFactory class and the AutoStoreRegistration and AGSStore configuration options. The old behavior can be restored during the transition phase with the legacyImplementation option.

    • The use of data-template-window and data-template-window-events in template files will not be supported in the future. Instead, make window definitions in manifest.json files.

    • The following classes will be removed in one of the next releases:

Deprecated class Alternative

ct/array

native JavaScript Funktionen

ct/async

apprt-core/async

ct/_when

apprt-core/when

ct/_compare

apprt-core/comparators

ct/mapping/store/MapServerLayerStore

AGSStoreFactory.createStore

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

ct/ui/controls/mobile/Drawer

-

Known Limitations

MAPAPPS-5654

[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations

MAPAPPS-6844

[Popups] No popup shown for MapServer sublayer with custom popupTemplate and unique value renderer

MAPAPPS-6377

[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

MAPAPPS-6875

[Accessibility] TOC actions of type slider do not have an aria-label

MAPAPPS-6874

[Accessibility] Parsing errors during automated accessibility check in v-combobox

MAPAPPS-6862

[Browsersync] @@properties@@ with special characters are not replaced

MAPAPPS-6845

[Configuration] Paths not loaded correctly when using include in global configuration

MAPAPPS-6864

[Editing] Features cannot be saved on services published with ArcGIS Pro

MAPAPPS-6848

[geojson] geojsonTransformer does not respect rings correctly

MAPAPPS-6873

[iPhone] map.apps cannot be loaded in iFrame

MAPAPPS-6855

[jsregistry] Out of memory errors in cache implementation

MAPAPPS-6881

[Layout] Misaligned icon when drawer is aligned to the right

MAPAPPS-6828

[Map] Ground layer not initialized correctly with many layers in map

MAPAPPS-6876

[Map] Inconsistent removal of blocked layers

MAPAPPS-6815

[mapapps-maven-plugin] includePattern for deployApps goal is not working as expected

MAPAPPS-6843

[Omnisearch] Keyboard disappears on Android WebView

MAPAPPS-6833

[result-ui] CSV export contains thousand separators in number fields

MAPAPPS-6859

[result-ui] Scroll position is lost when minimizing or resizing the widget

MAPAPPS-6851

[search-ui] Search on numeric field leads to error during client side scoring

MAPAPPS-6867

[selection-ui] Dropdown not closed when selection is done using touch

MAPAPPS-6858

[store-api] Operator $or with empty sub-expressions returns unexpected result

MAPAPPS-6860

[TOC] Group layer sublayers are not indented correctly

MAPAPPS-6831

[Vuetify] Combobox does not show input after first chip

4.15.0

New Features

MAPAPPS-6777

[Accessibility] Add label spelling for dropdown lists (theme and language switcher)

MAPAPPS-6638

[Accessibility] Adjust tab order for keyboard navigation

MAPAPPS-6623

[Accessibility] Improve contrast in map.apps themes

MAPAPPS-6724

[Accessibility] Improve focus of result-ui for keyboard navigation

MAPAPPS-6771

[Accessibility] Use unique labels for toolbar components

MAPAPPS-6792

[agolauthn] Ensure that oauth properties defined in app.json are used in standalone export

MAPAPPS-6791

[agolauthn] Support PKCE authorization code flow

MAPAPPS-6591

[App Editor] Allow to add bundle specific json config schema

MAPAPPS-5877

[App Editor] Automatically add configuration for layers of ArcGIS map services

MAPAPPS-6677

[App Editor] Automatically generate json-schema for bundles without config-schema.json

MAPAPPS-6595

[App Editor] Provide a list of available tool ids when configuring toolsets

MAPAPPS-6676

[App Editor] Update monaco editor to 0.35.0

MAPAPPS-6675

[App Editor] Warn if configured bundle is not loaded in app

MAPAPPS-6691

[apprt-binding] Improve typings to be compatible with Accessor.watch

MAPAPPS-6735

[Configuration] Allow to specify configuration options as environment variables

MAPAPPS-6793

[Configuration] Change default of persistIdentityManagerState to false

MAPAPPS-6731

[Configuration] Rename "proxy.cors.trustedServers" to "cors.request.trustedServers"

MAPAPPS-6111

[Coordinate Conversion] Allow to configure map symbol

MAPAPPS-6776

[Coordinate Conversion] Improve contrast for disabled elements in srs selection

MAPAPPS-6780

[Coordinate Conversion] Small UI improvements

MAPAPPS-6736

[ct-identity] Rename security.mode from OAUTH to IDENTITY

MAPAPPS-6558

[ct-identity] Support ctIdentity Cookie as a Domain Cookie to allow extended web application logins

MAPAPPS-6702

[Documentation] Add searchPriority property to search documentation

MAPAPPS-6590

[Editing] Allow to configure visibleElements and tooltipOptions

MAPAPPS-6738

[Layer Storage] Add fallback for field title if alias is empty

MAPAPPS-6384

[Legend] Allow to configure layer visibility and heading level

MAPAPPS-6671

[Logging] Change default client side log level to WARN

MAPAPPS-6639

[Logging] Do not add info log entry when login module is skipped

MAPAPPS-6649

[Map] Add support for IntegratedMeshLayer

MAPAPPS-6647

[Map] Show hint when WebGL is not available

MAPAPPS-4372

[Popups] Allow access to related features

MAPAPPS-5711

[Popups] Allow to add Custom Actions to WMS layers

MAPAPPS-6796

[portal-token-conversion] Add support for apprt-tokens/IdentityService

MAPAPPS-6753

[result-api] Optimize API for common tasks

MAPAPPS-6656

[result-ui] Hide specific fields in all tables

MAPAPPS-6750

[result-ui] Set fixed size for checkbox column

MAPAPPS-6751

[Search] Only request fields required to show result label

MAPAPPS-6551

[Search] Search for exact search term

MAPAPPS-6752

[search-ui] Allow selection of same item again from drop down menu

MAPAPPS-6365

[search-ui] Provide interface to reset the state

MAPAPPS-6206

[search-ui] Provide interface to set text in search ui box

MAPAPPS-6672

[search-ui] Resolve missing placeholders used in searchLabel to empty string

MAPAPPS-6577

[search-ui] Start smart.finder search when pressing <ENTER>

MAPAPPS-6686

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

MAPAPPS-6452

[TOC] Allow to define tooltips for buttons in (custom) "botton-row"

MAPAPPS-6714

[TOC] Integrate WMS layer legend images

MAPAPPS-6633

[TOC] Usability optimization by changing icons

MAPAPPS-6716

[TypeScript] Synchronize map.apps typings with compiled output

MAPAPPS-6754

[Vuetify] Improve contrast for expansion panels

Fixed Issues

MAPAPPS-6723

[Accessibility] Erroneous keyboard control in result-ui

MAPAPPS-6637

[Accessibility] Missing border around map during keyboard navigation

MAPAPPS-6773

[Accessibility] Missing labels for windows

MAPAPPS-6582

[Accessibility] TOC element in footer not accessible when result center is shown in footer

MAPAPPS-6692

[App Editor] No highlight for bracket pairs

MAPAPPS-6786

[apprt-esri-init] Pre-configured AGOL token fetching leads to initialization error

MAPAPPS-6620

[ct-identity] offline_access session expires during use in Keycloak

MAPAPPS-6333

[Custom Info] Incorrect description of docking bar support in bundle documentation

MAPAPPS-6608

[Custom Info] Wrong window position when active on startup

MAPAPPS-6705

[font-mapapps] local() font definition might cause problem when custom font is installed in OS

MAPAPPS-6757

[Integration API] whenMapReady does not fire

MAPAPPS-6602

[integration-map] Bundle depends on fixed version

MAPAPPS-6689

[Language Toggler] Bundle generates unencoded URL

MAPAPPS-6613

[LayerStore] Some spatial operators are not applied correctly

MAPAPPS-6778

[Manager] "map" property is added to "bundles" property of app.json on app upload

MAPAPPS-6740

[Manager] Login processing dialog sometimes covers manager app

MAPAPPS-6383

[Measurement] Start point not displayed on mobile devices

MAPAPPS-6814

[Notifier] Wrong notifier position for early messages

MAPAPPS-6781

[OmniSearch] Input shows wrong context menu

MAPAPPS-6787

[Report tool] Documentation links to non-existing API documentation

MAPAPPS-6660

[result-ui] Filter searches for formatted numerical values and not the actual data set

MAPAPPS-6645

[result-ui] Programmatic update of dataset items does not update highlight geometry

MAPAPPS-6600

[result-ui] Zoomto results fails if store does not contain geometries

MAPAPPS-6805

[selection-ui] Selection tools produce errors in console

MAPAPPS-6739

[selection-ui] Topic choice list sometimes overlaps close button

MAPAPPS-6742

[Store-API] ComplexQueryExpression $in without any values produces invalid SQL

MAPAPPS-6682

[TOC] Action menu displays button actions in multiple lines

MAPAPPS-6652

[Tools] Toolcontainer configured with toggleMode=true deactivates current active Tool in dev mode

MAPAPPS-6587

[Toolsets] Tool rules cannot be applied on a toolset that is registered as tool

MAPAPPS-6693

[Vuetify] Screen readers read "empty" because v-select elements have no value

MAPAPPS-6678

Default referrer-policy is too strict for embedding map.apps in an iFrame

MAPAPPS-6545

SSO_cookie is invalidated too early