Release Notes 4.14
What’s New
Neues Result Center
Mit dieser Version wird eine neue Tabellen-Komponente eingeführt, die das alte Result Center ersetzt.
Sowohl die Benutzeroberfläche als auch die darunter liegende API wurden komplett überarbeitet und als neue Bundles (result-ui
und result-api
) bereitgestellt.
Mit dem neuen Result Center können Ergebnisse aus verschiedenen Quellen, wie z.B. räumliche Selektionen, in einer modernisierten, hoch konfigurierbaren Benutzeroberfläche angezeigt werden. Daten können auch programmatisch hinzugefügt werden, was eine einfache Integration mit anderen Abfrage- oder Auswahloperationen wie zum Beispiel dem Query Builder ermöglicht. Sogenannte Actions können verwendet werden, um mit einzelnen oder mehreren Einträgen in der Tabelle zu interagieren. Mehrere Aktionen für Standardanwendungsfälle wie "Zoom to" oder "CSV Export" sind bereits verfügbar. Mit einer API ist es möglich, Aktionen programmatisch hinzuzufügen.
Die Bundles resultcenter
und selection-resultcenter
sind weiterhin verfügbar, wir empfehlen aber die neuen Bundles zu verwenden.
Verbesserungen der Accessibility (Barrierearmut)
Die Zugänglichkeit der UI-Elemente wurde in mehreren Punkten verbessert. Dazu gehören bessere Möglichkeiten zur Tastaturnavigation und die Zugänglichkeit für Screenreader.
Verbesserungen im App-Editor
Bundles werden jetzt im App-Editor im map.apps Manager auf Grundlage ihrer Metadaten in der Vorschlagliste angezeigt. Zusätzlich können Bundles über Metadaten als veraltet gekennzeichnet werden und werden im Editor entsprechend markiert. Damit können Bundle-Entwickler entscheiden, wie ihre Bundles im App-Editor behandelt werden.
Log-Level für Apps
Es ist nun möglich, die Bundle Log-Level für die Browser-Konsole global zu konfigurieren. Diese Konfiguration kann pro App überschrieben werden.
Neuerungen für Entwickler
Neues request Bundle
Das Bundle apprt-fetch
wurde eingeführt, um das alte apprt-request
Bundle in kommenden Versionen zu ersetzen.
Das neue Bundle verwendet die native Browser Fetch API anstelle von Dojo/request.
Typescript
Mehrere Bundles wurden nach Typescript migriert, was zu einer besseren API-Dokumentation und Typdefinitionen für Bundle-Entwickler führt.
Rollup
Alle Bundles werden nun mit Rollup erstellt, was zu spezifischeren Einstiegspunkten für Bundles führt. Beachten Sie, dass nicht mehr alle möglichen Dateien importiert werden können. Dies führt zu klareren, spezifischeren und stabileren Schnittstellen.
Karten-Aktionen
Die Kartenaktionen für "highlight" und "zoom" können nun mehrere Geometrien verarbeiten. Es ist zudem möglich, eine Reihenfolge zu definieren, in der verschiedene Kartenaktionen ausgeführt werden.
Weitere neue Funktionen und Verbesserungen
-
Die von map.apps als technische Basis genutzte ArcGIS API for JavaScript wird mit diesem Release auf die Version 4.24 aktualisiert. Dies führt zu zahlreichen Verbesserungen und Fehlerbehebungen in der Basistechnologie.
-
Eine Suche die über einen URL-Parameter gestartet wurde, kann nun auch mehrere Ergebnisse anzeigen. Dieses Verhalten muss per Konfiguration angeschaltet werden.
-
Sie können nun eine Verzögerung im
search-ui
Bundle konfigurieren nach der eine Suche gestartet wird, um zu viele Serveranfragen zu vermeiden. -
Für TileLayer, die eine Query-Schnittstelle anbieten, können nun auch Stores (z.B. für Suche oder Selektion) registriert werden.
-
Über eine neue Konfigurationsoption
autoExpandLegend
kann die Legende im TOC automatisch ausgeklappt werden.
Eine komplette Auflistung aller Änderungen finden Sie im Changelog.
Update-Hinweise
Falls Sie bei dem Update mehrere Versionen überspringen, befolgen Sie bitte auch alle Update-Hinweise der dazwischenliegenden Versionen. |
Aktualisierte Standard-App
Die Vorlage für die Standard-App wurde aktualisiert.
Sofern Sie keine eigenen Anpassungen vorgenommen haben, entfernen Sie die Datei default-app-4.zip
aus dem Arbeitsverzeichnis.
Der Pfad zu diesem Verzeichnis ist im Parameter data.directory.location
in der Datei %TOMCAT%\webapps\mapapps\WEBINF\classes\custom-application.properties
festgelegt.
Editor Widget
Mit Upgrade der Esri ArcGIS API for JavaScript wird mit dem editing
Bundle in map.apps ein komplett überarbeitetes Editing Widget bereit gestellt.
Im Zuge dessen wird die Konfigurationsoption allowedWorkflows:["create"]
abgekündigt. Stattdessen sollte allowedWorkflows:["create-features"]
benutzt werden.
DGrid
DGrid war von einem Design-Fehler in seiner API betroffen, der als Angriffsvektor für JavaScript-Injection genutzt werden konnte. Die genutzte Bibliothek wurde auf Version 1.3.3 aktualisiert, die einen Fix für dieses Problem enthält.
Dieses Update bringt eine wichtige Änderung in Bezug auf benutzerdefinierte Formatierer mit sich:
Während Werte die von einem Formatierer zurückgegeben wurden, bisher immer als HTML interpretiert wurden, werden die Rückgabewerte nun standardmäßig angemessen escaped.
Nur wenn explizit { html: "…string…" }
zurückgegeben wird, wird der Wert als HTML interpretiert.
Weitere Details stehen in diesem Github-Issue .
Example:
// Before:
function makeRed(value) {
// Was vulnerable before, will now be escaped:
return `<span class="red">${value}</span>`
}
// After:
function makeRed(value) {
// Ensure that value is either trusted or escaped correctly!
return {
html: `<span class="red">${escapeHtml(value)}</span>`
}
}
Beachten Sie, dass map.apps-Installationen gegen diese Sicherheitslücke sicher sind, wenn Sie die Standardeinstellungen verwenden:
Die Content-Security-Policy-Header verhindern die Ausführung von Inline-Skripten (unsafe-inline
).
seasons-template
Entfernen von Dijit Layout Containern
Das Dijit BorderContainer-/ContentPane-basierte Layout wurde durch ein modernes CSS-Grid ersetzt.
Dadurch ergeben sich deutlich mehr Möglichkeiten, das Layout per CSS (auch nachträglich per app.css
) anzupassen ohne das zugrundeliegende HTML ändern zu müssen.
Durch die oben beschriebene Änderung fallen auch die CSS-Klassen .dijitContentPane
und dijitBorderContainer
weg.
Wenn Sie eine app.css
verwenden, prüfen Sie, ob es entsprechende Style-Anweisungen gibt.
Hierbei sind zwei Fälle zu unterscheiden:
-
Die Style-Anweisung ist nicht mehr notwendig (paddings von
.dijitContentPane
und.dijitBorderContainer
). -
Die Style-Anweisung greift nicht mehr, weil sie
.dijitContentPane
oder.dijitBorderContainer
im Selector enthält.
/*vorher*/
.ctAppRoot .ct-application-footer.dijitContentPane {
height: 80px;
}
/*nachher*/
.ctAppRoot .ct-application-footer {
height: 80px;
}
Harmonisierung der Attach-Points für Widgets
Die Benennung der Einhängepunkte (attach-points) für Widgets wurde überarbeitet.
Dadurch stehen alle attach-points unter gleichem Namen in allen Sublayouts zur Verfügung.
Im mobilen Querformat-Layout (mobile_landscape
) wurde die dockingbarLeft
in dockingbarBottomLeft
umbenannt.
app.json
Dateien können Sie per Suchen und Ersetzen anpassen.
Ohne diese Anpassung werden Werkzeuge in der mobilen Querformat-Ansicht ggf. nicht mehr dargestellt.
Themes und Theme-Extensions
Die manifest.json
Eigenschaften CSS-Themes
und CSS-Themes-Extension
wurde in cssThemes
und cssThemesExtension
umbenannt. Die alten Werte sind abgekündigt und werden in einem der nächsten Releases nicht mehr unterstützt. Daher sind sie die neuen Werte zu ersetzen.
Dies ist nur relevant, wenn Sie benutzerdefinierte Bundles haben, die ihr eigenes Css, Theme-Bundles oder Theme-Extension-Bundles bereitstellen.
Ausgelaufene Unterstützung
Die Unterstützung für die folgenden Funktionen ist mit diesem Release ausgelaufen:
-
Das Bundle
aceeditor
wurde entfernt.
Abkündigungen
Für folgende Features wird die Weiterentwicklung eingestellt und das Ende der Unterstützung für die Zukunft angekündigt. Beachten Sie außerdem die Hinweise in den Systemanforderungen.
-
map.apps Manager und App-Konfiguration:
-
Die Live-Konfiguration wird nicht mehr weiterentwickelt und wird in einer der kommenden Versionen entfernt. Verwenden Sie stattdessen den App-Editor zur Konfiguration von Apps. Sie können die Live-Konfiguration bereits jetzt für Ihre Nutzer ausblenden, indem Sie die Konfigurations-Option
manager.config.editor.showLiveConfigButton
auffalse
setzen. -
Der Kompatibilitätsmodus im map.apps Manager wurde seit Version 4.6 abgekündigt und wird in Version 4.15 entfernt.
-
Die Synchronisierung von Apps und App-Vorlagen wurde seit Version 4.8 abgekündigt und wird in Version 4.15 entfernt. Verwenden Sie stattdessen Domain-Bundles.
-
Die Konfigurationsoption
allowedWorkflows:["create"]
im Bundleediting
wird demnächst entfernt. Verwenden Sie stattdessenallowedWorkflows:["create-features"]
.
-
-
Bundles:
-
Das Bundle
js-beautify
wird in einem der kommenden Releases entfernt. -
Das Bundle
app-uitest-support
wird in einem der kommenden Releases entfernt. -
Das Bundle
omnisearch
wird nicht mehr weiterentwickelt. Verwenden Sie stattdessen das Bundlesearch-ui
. -
Die Bundles
resultcenter
undselection-resultcenter
werden nicht mehr weiterentwickelt. Verwenden Sie stattdessen das Bundleresult-ui
. -
Das Bundle
locateme-gpsgate
wird in map.apps 4.15 entfernt.
-
-
Entwicklung:
-
Die Unterstützung von
module.exports
in JavaScript-Dateien wird demnächst entfernt. Benutzen Sie stattdessen die ECMAScript Keywordsexport
bzw.export default
. -
Um eine zukünftige Migration von AMD zu einem anderem Modulsystem zu erleichtern sollten JavaScript-Dateien nach Möglichkeit nur noch als ECMAScript Module verfasst und anschließend transpiliert werden.
-
Die Unterstützung von
cancel
in der Rückgabe der Abfrageergebnisse (QueryResult) eines Stores wird demnächst entfernt. Ziel ist es die Komplexität derstore-api.Store
Api zur reduzieren. Bitte benutzen Sie stattdessen einen AbortController , wie unter Nutzung eines AsyncStore beschrieben.```js const aborter = new AbortController(); store.query({name: "Test"}, { signal: aborter.signal }) .then((resultItems)=>{ ... }, (e)=>{ if (e.name === "AbortError"){ // aborted } }) // trigger abort aborter.abort(); ```
-
Die Klasse
ct/mapping/store/MapServerLayerStore
wird durch eine neue KlasseLayerStore
im agssearch-Bundle ersetzt. Die KlasseLayerStore
wird mit einer ArcGIS FeatureLayer Instanz hinterlegt und ist daher konsistent mit dem Inhalt der Karte. Das agssearch-Bundle erzeugt nun standardmäßigLayerStore
-Instanzen in der KlasseAGSStoreFactory
und den KonfigurationsoptionenAutoStoreRegistration
undAGSStore
. Das alte Verhalten kann während der Übergangsphase mit der OptionlegacyImplementation
wiederhergestellt werden. -
Die Verwendung von
data-template-window
unddata-template-window-events
in template files wird zukünftig nicht mehr unterstützt. Nehmen Sie stattdessen Fenster-Definitionen inmanifest.json
Dateien vor. -
Die folgenden Klassen werden in einem der nächsten Releases entfernt:
-
Abgekündigte Klasse | Alternative |
---|---|
|
native JavaScript Funktionen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bekannte Einschränkungen
|
[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations |
|
[Printing] Printing of line measurement not possible with PrintTask published from ArcMap |
Abhängigkeiten
-
Esri ArcGIS API for JavaScript 4.24.7
-
ArcGIS Arcade 1.17
-
Moment.js 2.29.4
-
Vue.js 2.7.8
-
Vuetify.js 1.5.24
Changelog
4.14.3
Fixed Issues
|
[Documentation] Incorrect cross-reference in map.apps documentation ("Filtering of references") |
|
[integration-map] Bundle depends on fixed version |
|
[Layout] Opening a window by toggle tool breaks layout |
|
[Layout] Sublayout templates for iOS Safari and Chrome are not selected correctly |
|
[TOC] Context menu is not fully visible in some situations when opened for the first time |
4.14.2
Fixed Issues
|
[Accessibility] Missing focus indicator in printing dialog |
|
[Accessibility] Poor screenreader support for drop down and update checker buttons in manager |
|
[Accessibility] Some content not well recognizable in high contrast mode |
|
[Accessibility] TOC expand/collapse button loses focus when toggling in screen reader mode |
|
[apprt-fetch] ct-identity token not send on early requests |
|
[Domain Bundles] Timing issue when loading basemaps via domain-system |
|
[Manager] Test bundles not assigned to map.apps product group |
|
[Manager] Update hints for certain bundles may not be displayed |
|
[result-ui] Autofocus opens keyboard on mobile devices |
|
[result-ui] FormattingInfo align center not working |
|
[v-tooltip] Missing z-index for vuetify-tooltips base element |
4.14.1
New Features
|
[Accessibility] Add tooltips in TOC |
|
[Accessibility] Improve layer options menu in TOC |
|
[Accessibility] Increase accessibility for keyboard navigation and screen reader in selection UI |
|
[LayerStore] Add support for Tile-Layers |
|
[TOC] Do not show icon with visibility hints as disabled icon |
|
[TOC] Initially expand the layer legend |
Fixed Issues
|
[apprt-binding] Model change on Mutable when bound to Vue model is not effective under certain condition |
|
[apprt-fetch] Unexpected proxy fallback on same site requests |
|
[apprt-tokens] No token looked up, when relative url is used inside apprt-request |
|
[apprt] Errors during bundle start are not logged |
|
[Coordinate Conversion] Coordinate search not working in some coordinate systems |
|
[jsregistry] Brace detection and comment removal broken by regular expression |
|
[Map] Browser window freezes when switching SRS with WMTS service |
|
[search-ui] Search-UI with main-app-menu is missaligned with default window configurations |
|
[search-ui] Special characters are not supported in searchLabel fields |
4.14.0
New Features
|
[Accessibility] Allow to set alt text for image in banner widget |
|
[Accessibility] Improve HTML element heading structure |
|
[Accessibility] Make login dialog accessible via screenreader |
|
[Accessibility] Make notifier information accessible via screenreader |
|
[Accessibility] Make Vuetify select element readable and useable in a screenreader |
|
[Accessibility] Remove focus from empty tool container in toolbar in window widget |
|
[Accessibility] Use checkboxes instead of buttons in TOC for proper recognition in screen readers |
|
[Accessibility] v-select/v-menu/v-list: backport aria improvements from Vuetify 2.x |
|
[AGS Search] Set default search attribute/ title attribute for search-ui |
|
[App Editor] Exclude bundles from autocompletion in allowedBundles based on bundle metadata |
|
[App Editor] Introduce mechanism to deprecate bundles and show hints in editor |
|
[apprt-core] Add utility to encode/decode base64 strings |
|
[apprt-core] Locale support conversion into Intl.Locale and access to locale string |
|
[apprt-dom] Add getMarginBox, setMarginBox and getMarginSize helpers |
|
[apprt-esri-init] Strip https?:// prefix from proxy rule if configured |
|
[ct-proxy] Support configuration of additional HTTP headers to forward to proxied services |
|
[Documentation] Add reference to bundle "parametersearch" |
|
[Documentation] Describe visibilityMode exclusive |
|
[Documentation] Typo in measurement-3d constraints |
|
[jsregistry] Add 'jsregistry.sourcemaps.enabled' config option to prevent delivering of '.js.map' files |
|
[Manager] Hide Live Configuration by configuration property |
|
[map-actions] Execute actions in order and sequentially by default |
|
[map-actions] Highlight and zoom to actions should react to multiple results |
|
[Map] Allow to disable sandbox flag on WMS layers |
|
[maven-plugin] Add includePattern option to deployApps goal |
|
[Native Export] Add |
|
[Parameter Search] Add config option that only first result is used |
|
[Popups] Allow promise as return value in getTypes() method of popups.ActionFactory |
|
[Result Center] Action to create PDF report |
|
[Result Center] Add results to existing result set |
|
[Result Center] Configure highlight colors |
|
[Result Center] Do not show store selection pane when only results from one store are shown |
|
[Result Center] Ensure that popup is not hidden by result center |
|
[Result Center] Export data from result center |
|
[Result Center] Filter results of one store |
|
[Result Center] Hide empty result topics |
|
[Result Center] Highlight object when hovering table row |
|
[Result Center] Provide API to show results |
|
[Result Center] Remove results from existing result set |
|
[Result Center] Remove single result |
|
[Result Center] Show or hide actions based on rules |
|
[Result Center] Show result items of spatial selection in map |
|
[Result Center] Show results of spatial selection |
|
[Result Center] Zoom to selected items |
|
[Result Center] Zoom to single result |
|
[rollup-build] Emit error when importing a JavaScript module from a bundle that is not listed as a dependency |
|
[Search UI] Add screen reader support for result list |
|
[Search UI] Add tooltip to delete button |
|
[Search UI] Configurable Typing Delay |
|
[System] Update ArcGIS API for JavaScript to version 4.24 |
|
Allow to configure log level for apps globally |
|
Provide license-folder as separate artefact |
|
Support sub path in proxy.use.rules to control more explicitly for which services the proxy is required |
Fixed Issues
|
[AGS Search] Configuring filterOptions has no effect |
|
[AGS Search] popupEnabled on AGSStore triggers default popup on search and spatial selection |
|
[apprt-core/Mutable] A watch handler should not be informed about pending change events |
|
[apprt-esri-init] Error code 'identity-manager:unknown-resource' thrown instead of real request error |
|
[apprt-request] Endless loop with certain URLs when falling back from CORS to proxy servlet |
|
[AppsOverview] Switching to POST leads to failed requests |
|
[ct-proxy] X-Forwarded-For Header has missing space after comma |
|
[Documentation] Incomplete documentation for implementing a custom ToolRuleProcessor |
|
[Domain Bundles] Timing issue when registering AGSStore via domain-system |
|
[Integration API] Map manipulation methods not available on app start |
|
[Layout] Sublayout templates for iPad Safari and Chrome are not selected correctly |
|
[Layout] UI can be broken by tabbing |
|
[Manager] Obsolete $ in bundle delete dialog |
|
[Map] ID of basemap layer is interpreted as well known basemap name |
|
[Map] Inconsistent removal of blocked layers between different browsers |
|
[Map] WMS GetFeatureInfo not routed over /roxy |
|
[Measurement] Copy to clipboard button has no tool tip |
|
[Measurement] Tools not working in map views other than WebMercator or WGS84 based |
|
[OAuth] Cross Domain Login not possible |
|
[Parameter Search] Esri Locator items not correctly displayed |
|
[Reporting] Static report fails for non MapServerLayerStores |
|
[Result Center] No update if values in store change and fireDataChanged is called |
|
[Search UI] Wrong mobile result layout when switching from portrait to landscape |
|
[Search] SearchServiceImpl does not ensure that event service is available |
|
[TOC] supportsSublayerVisibility not handled |
|
[TOC] Tooltip not correctly read from screen reader |
|
Compressed build introduces unsupported javascript constructs |
|
Deadlock on bundle upload |
|
Languages with country codes like de-CH are not supported correctly |
|
LayerStore created for MapServer sublayer does not honor definition expression |
|
Layout issues with tool tips in embedded integration |
|
Whole app does not start if one bundle fails to start |