Release Notes 4.12
What’s New
Suche
Mit dieser Version wird eine neue, modernisierte Suchfunktion eingeführt.
Sowohl die Bedienoberfläche als auch die dahinter arbeitende Such-API sind komplett überarbeitet und werden als neue Bundles bereitgestellt (search-ui
und search-api
).
Mit der neuen Suche ist es möglich, mehrere Themen gleichzeitig zu durchsuchen, ohne vorher ein Thema festlegen zu müssen. Die Ergebnisse werden nach Themen gruppiert angezeigt. Die neue Oberfläche ist zudem besser auf mobilen Geräten nutzbar, da mehr Platz für die Ergebnisdarstellung genutzt wird und Ergebnisse mehrzeilig angezeigt werden können.
Das Bundle omnisearch
steht weiterhin zur Verfügung, wir empfehlen jedoch, die neue Suche zu verwenden.
App-Editor
Die ehemalige "Manuelle Konfiguration" wird mit dieser Version vom komplett modernisierten, neuen "App-Editor" abgelöst. Der App-Editor erleichtert die Konfiguration von Apps durch Vorschlaglisten, Validierungen und Hinweise. Fehlerhafte Konfigurationen können so leichter vermieden werden. Außerdem kann zu jedem Bundle nun direkt zur passenden Dokumentation gewechselt werden. Die Funktionen "Bundles" und "Live-Konfiguration" können ab jetzt aus dem App-Editor heraus aufgerufen werden.
Domain-Bundles effektiver nutzen
Bei der Nutzung von Domain-Bundles kann nun definiert werden, ob die dadurch zu einer App hinzugefügten Kartenlayer oberhalb oder unterhalb der in der App definierten Layer eingefügt werden. Zudem können in einer App Layerkonfigurationen überschrieben werden. Dadurch wird es zum Beispiel möglich, ein fachliches Thema effizient über ein Domain-Bundle zu vielen Apps hinzuzufügen und die dadurch hinzugefügten Kartenlayer aber nur in bestimmten Fach-Apps beim Start der App zu aktivieren und in anderen als nicht initial sichtbar zu ergänzen.
Besserer Support für OGC-Dienste
Die Unterstützung von OGC Diensten wird mit diesem Release für die folgenden zwei Dienste-Typen verbessert.
Verbesserung der Karteninhaltsteuerung
Beim Aktivieren einer Karte in der Karteninhaltsteuerung wird geprüft, ob die übergeordneten Elemente ebenfalls sichtbar geschaltet sind (z.B. Gruppen-Layer). Falls dies nicht der Fall ist, werden sie automatisch aktiviert, damit die eingeschaltete Karte sofort sichtbar ist.
Neuerungen für eigene Entwicklungen
TypeScript
Mit dieser Version werden erstmals in TypeScript geschriebene Bundles ausgeliefert. Unser mittelfristiges Ziel ist die Umstellung der kompletten JavaScript Codebasis auf TypeScript.
Der Einsatz von TypeScript erfreut sich großer Beliebtheit . Für uns stehen die folgenden Gründe für die Nutzung im Vordergrund:
-
Die Typsicherheit reduziert die Wahrscheinlichkeit von Fehlern im Code.
-
Schnittstellen zur Erweiterung von map.apps (z.B. map-actions oder Stores) können explizit gemacht werden. Sie können so direkt beim Programmieren sehen, ob eine Schnittstelle richtig benutzt wird.
-
Die Programmierung gegen diese Schnittstellen wird dank einer Autovervollständigung produktiver und weniger fehleranfällig.
-
Private Implementierungsdetails können besser versteckt oder als solche gekennzeichnet werden. Dies macht die Entwicklung gegen map.apps einfacher und übersichtlicher. Außerdem werden können so Fehler vermieden werden, die bei Updates auf neuere Version auftreten könnten, weil gegen interne Schnittstellen programmiert wurde.
-
Code-Refactoring wird einfacher, da die IDE (z.B. Visual Studio Code) den Code "versteht".
-
Die von map.apps als technische Basis genutzte ArcGIS API for JavaScript ist ebenfalls komplett in TypeScript geschrieben.
Die bereits vorhandenen map.apps Typings können direkt im map.apps 4 Developers Projekt genutzt werden. Ein Blog-Artikel im Developer Network wird die Nutzung und ihre Vorteile demnächst im Detail erläutern.
Standard 'Content Security Policy' Header
Zur Erhöhung der Sicherheit sendet map.apps verschiedene Sicherheitsheader, u.a. den Content-Security-Policy
Header.
Zur Vermeidung von Cross-Site-Scripting wird insbesondere die Direktive script-src 'unsafe-inline'
vermieden.
Dies hat zur Folge, dass die direkte Nutzung von HTML <script>
-Blöcken innerhalb von map.apps nicht mehr erlaubt ist.
Um die Sicherheitsheader, die map.apps mitsendet, anzupassen, lesen Sie den Abschnitt Sicherheitseinstellungen.
Neue Store-API
In map.apps werden "Stores" als Datenquellen für Funktionen wie zum Beispiel die Suche oder die räumliche Auswahl verwendet.
Diese basierten bislang auf der Store-Spezifikation des Dojo Toolkits.
In diesem Release werden die unterstützten Store-Schnittstellen in das neue Bundle store-api
umgezogen und spezifiziert.
Eine Abhängigkeit zum Dojo Toolkit besteht somit nicht mehr.
Eine ausführliche Dokumentation finden Sie in der Bundle-Dokumentation .
Neues Bundle 'apprt-dom'
Das neue Bundle apprt-dom
stellt Funktionen bereit mit denen Dojo Hilfsfunktionen ersetzt werden können.
Wir empfehlen, bei eigenen Entwicklungen die Funktionen aus dem neuen Bundle anstelle von Dojo Funktionen zu nutzen.
Eine Gegenüberstellung der alten und neuen Funktionen ist in der Bundle-Dokumentation aufgelistet.
AbortSignal
Das Bundle apprt-request
unterstützt nun AbortSignal .
Eine Anleitung zur Nutzung finden Sie in der Bundle-Dokumentation
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.20 aktualisiert. Dies führt zu zahlreichen Verbesserungen und Fehlerbehebungen in der Basistechnologie.
-
Die Editier-Funktionalität bietet nun ein einfaches Snapping (Fangen) auf bestehenden Stützpunkten und Kanten an.
-
Es kann nun ein
timeExtent
konfiguriert werden. Eine 2D- oder 3D-Ansicht zeigt dann nur die Objekte aus einem Layer an, die in den entsprechenden Zeitraum fallen. -
Das Voroptimieren einer App kann nun über das map.apps Maven Plugin beim Upload einer App angestoßen werden.
-
Der
zoomto
Map Action kann nun einexpand
Faktor mitgegeben werden, so dass ein größerer Kartenbereich um das Objekt herum dargestellt wird, wenn darauf gezoomt wird. -
Es kann nun konfiguriert werden, ob Dateianhänge im Default Popup als Liste oder Vorschau angezeigt werden.
-
Die Lade-Anzeige in der Karte wird nun nicht mehr bei clientseitigen Aktionen wie zum Beispiel Sketching oder Editing angezeigt. Sie wird dadurch insgesamt seltener angezeigt.
Eine komplette Auflistung aller Änderungen finden Sie im Changelog.
Update-Hinweise
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.
Domain-Bundles
Durch Verbesserungen am Domain-Bundle-System kommt es zu einer Verhaltensänderung. Zuvor wurden alle beim App-Start geladenen Themenkarten aus Domain-Bundles in ihrer Ladereihenfolge zur Karte hinzugefügt. Dies führte dazu, dass bei mehreren Domain-Bundles die zuerst geladenen Themenkarten unter den später geladenen lagen. Ab dieser Version wird dieses Verhalten umgekehrt, sodass zuerst geladene Themenkarten über später geladenen liegen.
Dieses neue Verhalten kann durch Änderungen der Option domainBundleOrder
beeinflusst werden.
Siehe dazu Domain-Bundles.
Erhöhung der maximalen URL-Länge für GET Anfragen (statt POST)
Die maximale Länge von URLs die per GET vom map.apps Server abgefragt werden, wird mit diesem Release von 2048 auf 3072 erhöht. Dadurch können auch in umfangreicheren Apps, die viele Bundles beinhalten, die Bundle-Dateien per GET statt POST abgefragt werden. Dies ist ein Vorteil, da nur GET Anfragen vom Browser gecacht werden können und somit die Performance beim erneuten Aufruf der App gesteigert wird.
Stellen Sie sicher, dass es auf Ihrem Server keine Beschränkungen gibt, die die Anfrage von längeren GET Anfragen unterbinden.
Alternativ können Sie die Länge ab der von GET auf POST gewechselt wird, in der Property client.config.requestMaxUrlLength
in der Datei application.properties
verändern.
Import von map.apps Klassen
Im Zuge von Code-Modernisierungen wird der Build-Prozess für Bundles sukzessive auf rollup.js umgestellt. Dadurch können interne, nicht öffentliche Klassen von map.apps nicht mehr in eigenen Implementierungen importiert werden. Verwenden Sie stattdessen offizielle APIs von map.apps oder nutzen Sie map.apps Klassen als Vorlage für eigene Implementierungen. Ihr Feedback zu fehlenden Funktionen, APIs oder Konfigurations-Parametern nehmen wir wie immer gerne entgegen.
Import von ArcGIS API for JavaScript Klassen
Die ArcGIS API for JavaScript ist die größte Dependency in map.apps (im Browser), was die Anzahl der Module und auch deren kombinierte Größe angeht. Die API wurde bislang so in map.apps integriert, dass auch private, undokumentierte Module zur Laufzeit importiert werden können. Mit diesem Release wird die Anzahl der JavaScript-Module in der API auf das Notwendige minimiert, indem nur noch dokumentierte Module importiert werden. Die Anzahl der JavaScript-Module wurde dadurch um mehr als 55% reduziert. Dies kann zum Einen zu einem Performance-Gewinn führen und verhindert zum Anderen, dass bei eigenen Entwicklungen versehentlich gegen interne Schnittstellen der API programmiert wird. Sollte es nach einem Update auf diese Version zu Laufzeitfehlern in Ihren eigenen Entwicklungen kommen, prüfen Sie bitte, ob Sie interne Module der ArcGIS API for JavaScript verwenden.
Script-Blöcke in angepassten index.html
Dateien
Die direkte Nutzung von HTML <script>
-Blöcken innerhalb von map.apps ist nicht mehr erlaubt.
Wenn Sie eine angepasste index.html
Datei für eine App verwenden, verwenden Sie in dieser nur noch einen einzigen <script>
-Block und markieren Sie ihn wie folgt:
<script>
Blocks<script nonce="@@CSP_NONCE@@">
$apprt.startApp(...)
</script>
Alternativ können Sie Skripte in JavaScript Dateien auslagern.
Umzug von Hilfsklassen aus dem Bundle ct
Im Rahmen der Einführung des neuen Bundles store-api
sind die folgenden Hilfsklassen aus dem Bundle ct
in das neue Bundle store-api
umgezogen:
Alt | Neu |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ändern Sie bei eigenen Entwicklungen Ihre Imports zum Beispiel wie folgt:
// Deprecated:
import RQLStore from "ct/store/RQLStore";
// New:
import { RQLStore } from "store-api/rest/RQLStore";
Nicht immer ist eine 1:1 Ersetzung möglich oder sinnvoll. Für weitere Informationen zu den einzelnen Klassen und Ihrer Nutzung, prüfen Sie die API-Dokumentation .
Veränderte Antwort von apprt-request
Das Bundle apprt-request
liefert apprt-core/CancelablePromise
Objekte und nicht mehr dojo/promise/Promise
Objekte zurück.
Diese Anpassung hat zur Folge, dass die Methoden dojoPromise.isFulfilled()
, dojoPromise.isResolved()
, dojoPromise.isRejected()
, dojoPromise.isCanceled()
nicht mehr zur Verfügung stehen.
Verwenden Sie als Alternative apprt-core/Promise .
Zu Testzwecken kann diese Änderung über die Konfigurationsoption client.config.requestReturnDojoDeferred
deaktiviert werden.
Ausgelaufene Unterstützung
Die Unterstützung für die folgenden Funktionen ist mit diesem Release ausgelaufen:
-
Die Abhängigkeiten für das SampleProjRemote der Linie 3 wurden aus dem
m2-repository
des Rollout entfernt. -
Ein eigenes Styling der Scrollbars wurde entfernt. Es werden nun die Standarddarstellungen des jeweiligen Browsers verwendet. In angepassten Layouts kann weiterhin eine individuelle Anpassung von Scrollbars erfolgen.
-
Durch Änderungen in
apprt-request
stehen die MethodendojoPromise.isFulfilled()
,dojoPromise.isResolved()
,dojoPromise.isRejected()
,dojoPromise.isCanceled()
nicht mehr zur Verfügung.
Abhängigkeiten
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 |