Überblick aller Update-Hinweise
4.15
Eigenständiger Identity Service für OAuth-Integration
Mit Version 4.13.0 wurde in map.apps der OAuth Authentifizierungsmodus eingeführt.
In diesem Modus delegiert map.apps die Anmeldung an ArcGIS Online, ArcGIS Enterprise-Portal oder Keycloak.
Dieser Modus wurde umbenannt von OAUTH
in IDENTITY
und erfordert ab dieser Version die Installation des separaten Dienstes Identity Service.
Dieser Dienst kann aus dem con terra Download Portal heruntergeladen werden.
Mehr Informationen zu dem neuen Dienst finden Sie unter Identity Service.
Wenn Sie den Identity Service nicht mit der gleichen Datenbank wie map.apps verwenden, löschen Sie die Tabellen IDENT_EXTSESSIONS
, IDENT_SESSIONS
und IDENT_TOKENS
aus der Datenbank.
Passende SQL Scripte finden Sie hier: PostgreSQL, Microsoft SQL Server und Oracle.
Wenn Sie folgende Konfigurationsparameter in der globalen Konfiguration angepasst haben, entfernen Sie diese Anpassungen:
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
Für die Integration des neuen Dienstes wurden neue Konfigurationsparameter ergänzt. Bitte folgen Sie der Anleitung zur Authentifizierung unter ArcGIS Enterprise portal, ArcGIS Online oder Keycloak, um ihre Konfiguration zu aktualisieren.
Nicht mehr benötigte Datenbankspalten
Die Synchronisierung von Apps und App-Vorlagen wird mit diesem Release entfernt (siehe Ausgelaufene Unterstützung).
Sie können daher die Spalten SYNC_TEMPL_BIN
, SYNC_MODE
, SYNC_AUTO
, SYNC_AT
aus der Tabelle APPS
der Datenbank löschen.
Passende SQL Scripte finden Sie hier: PostgreSQL, Microsoft SQL Server und Oracle.
Umbenennung der Konfiguration proxy.cors.trustedServers
Die Konfigurations-Option proxy.cors.trustedServers
wurde umbenannt in cors.request.trustedServers
.
Wenn Sie in Option proxy.cors.trustedServers
in der globalen Konfiguration angepasst haben, ändern Sie diese auf cors.request.trustedServers
.
Die Namensänderung soll deutlich machen, dass diese Konfigurationsoption nicht vom in map.apps integrierten Proxy interpretiert wird.
Zeichenkodierung von JavaScript-Dateien
Durch Änderungen im Buildsystem von map.apps werden Sonderzeichen in JavaScript-Strings nicht mehr wie zuvor in ASCII umgewandelt.
Betroffen sind insbesondere Dateien, die Übersetzungsstrings enthalten (bundle.js
).
Es besteht kein Handlungsbedarf, wenn Sie map.apps in der Standardkonfiguration betreiben (Auslieferung der Apps über das map.apps Backend).
Falls Sie jedoch einen eigenen Webserver zum Ausliefern von map.apps JavaScript-Dateien betreiben (z.B. im Rahmen des nativen App-Exports),
stellen Sie sicher, dass diese vom Webserver mit dem HTTP-Header Content-Type: text/javascript; charset=utf-8
ausgeliefert werden.
Keine Anführungszeichen in manager.config.viewbundles
verwenden
Bitte entfernen Sie die Anführungszeichen aus den Bundlenamen, die in manager.config.viewbundles
aufgeführt sind.
# Alt:
manager.config.viewbundles="appmanagement", "reportmanagement", "bundlemanagement"
# Neu (Anführungszeichen entfernt)
manager.config.viewbundles=appmanagement,reportmanagement,bundlemanagement
4.14
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.
4.13
Neue Datenbanktabellen
map.apps verwendet die neuen Datenbanktabellen IDENT_EXTSESSIONS
, IDENT_SESSIONS
und IDENT_TOKENS
.
Beginnend mit dieser Version legt map.apps die Tabellen beim Start des Tomcat automatisch an, wenn sie noch nicht existieren und die Einstellung db.hibernate.schemaUpdate=update
in der angewendeten Konfigurationsdatei gesetzt ist.
Sollten Sie diese Einstellung bislang nicht gesetzt oder verändert haben, müssen Sie keine Änderung vornehmen.
Wenn Sie die Datenbanktabellen stattdessen manuell anlegen möchten, verwenden Sie dafür das entsprechende SQL-Skript für Ihre Datenbank:
Nutzung von ArcGIS-Rollen in map.apps
Sollten Sie bislang Rollen, die aus ArcGIS Enterprise-Portal oder ArcGIS Online Gruppen abgeleitet werden, in map.apps genutzt haben, war dafür bislang die folgende Notation erforderlich: "user@@gruppe"
.
Die Syntax ändert sich mit diesem Release zu "gruppe::user"
.
4.12
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.
4.11
Separater Rollout Linie 3 Bundles
Sollten map.apps Linie 3 Bundles benötigt werden, müssen diese ab sofort als separate Bundles installiert werden
Datenbankmodell für voroptimierte Apps
Für die Unterstützung von voroptimierten Apps müssen Änderungen am Datenbankschema vorgenommen werden.
Zwei Änderungen sind notwendig:
-
Die Spalte
PREOPTIMIZED
muss der TabelleAPPS
hinzugefügt werden. -
Die Tabelle
APPS_ASSETS
muss angelegt und indiziert werden.
Dies kann entweder manuell oder automatisch erfolgen.
Stellen Sie in beiden Fällen und vor dem Update sicher, dass Datenbankrechte zum erstellen/verändern und Anlegen eines Index gesetzt sind. Nach der Aktualisierung können die Datenbankrechte wieder zurückgesetzt werden.
Automatisches Update
Stellen Sie sicher, dass die Einstellung db.hibernate.schemaUpdate=update
in der angewendeten Konfigurationsdatei gesetzt ist.
Sollten Sie diese Einstellung bislang nicht gesetzt oder verändert haben, müssen Sie keine Änderung vornehmen.
Starten Sie danach map.apps neu, damit die Änderungen automatisch angewendet werden.
Passwort für Zugang mit Administrationsrecht
Ab sofort wird map.apps ohne vorkonfiguriertes Standard-Passwort für den Administrations-Zugang ausgeliefert. Daher muss, falls nicht bereits in einer vorherigen Installation geschehen, das Passwort gesetzt werden.
Aktualisierte Standard-App
Die Vorlage für die sog. 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 wird über den Parameter data.directory.location
in der Datei %TOMCAT%\webapps\mapapps\WEBINF\classes\custom-application.properties
definiert.
Beim ersten Start von map.apps werden die neuen Vorlagen dort abgelegt.
4.9
Aktualisierte Standard-App
Die Vorlage für die sog. 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 wird über den Parameter data.directory.location
in der Datei %TOMCAT%\webapps\mapapps\WEBINF\classes\custom-application.properties
definiert.
Beim ersten Start von map.apps werden die neuen Vorlagen dort abgelegt.
JavaScript import/export
vs. AMD define
Im Zuge der Modernisierung der map.apps API wird zunehmend das im ECMAScript 6 Standard (ES6) definierte Schlüsselwort export
verwendet.
Dadurch ist eine Änderung bei der Verwendung des AMD Import-Stils define
nötig.
Verwenden Sie die neue ES6 Syntax import
, um Inkompatibilitäten zu vermeiden.
Die folgenden Abschnitte zeigen die Änderung am Beispiel von string-replace
:
define(["apprt-core/string-replace"], function(stringReplace){
var msg = stringReplace('Hello ${key}', { key : "World"});
});
import stringReplace from "apprt-core/string-replace"
const msg = stringReplace('Hello ${key}', { key : "World"});
Code, der im AMD Format vorliegt, kann mit dem Tool amd-to-es6 konvertiert werden. Das Beispielprojekt zum Entwickeln von neuen Bundles mapapps-4-developers ist bereits für die Nutzung der neuen Syntax vorbereitet.
Theming
Neue Farbvariablen sind verfügbar um die Hintergrund- und Eingabetextfarbe der OmniSuche per LessCss zu definieren. Bei eigenen Themes müssen daher die die folgenden Variablen mit den Standardwerten ergänzt werden:
@ct-omnisearch-input-background-color: #fff; @ct-omnisearch-input-text-color: #000; @ct-omnisearch-drawer-button-background-color: @ct-omnisearch-input-background-color; @ct-omnisearch-drawer-button-icon-color: darken(@disabled-text-color, 30);
4.6
Update der ArcGIS API for JavaScript auf Version 4.10 (von 4.8)
Die von map.apps als technische Basis genutzte ArcGIS API for JavaScript wird mit diesem Release auf die Version 4.10 aktualisiert. Mit diesem Release werden daher Änderungen im Umgang mit Cross-Origin Requests und Cross-Origin Resource Sharing (CORS) wirksam, die durch Esri in Version 4.9 der API eingebaut wurden. Eine detaillierte Beschreibung dieser Änderungen erfolgt im Artikel CORS and the ArcGIS API for JavaScript: Changes coming in 4.9 .
Die wichtigsten Änderungen sind:
-
Es wird nun angenommen, dass alle angefragten Server den CORS-Mechanismus unterstützen. Zuvor wurde eine Liste mit unterstützenden Servern gepflegt bzw. es wurde geprüft, ob ein Server CORS unterstützt.
-
Wird kein CORS unterstützt, wird ein Proxy benötigt. Die URL des Servers kann dazu im Parameter
proxy.use.rules
eingetragen werden. Der bisherige Workaround über JSONP bzw. die Unterstützung von JSONP entfällt.
Diese Änderungen beeinflussen entsprechend auch map.apps und einige Konfigurationsoptionen. Die folgenden Einstellungen sind für Apps ab der Version 4.6.0 nicht mehr wirksam (sie gelten jedoch weiterhin für Apps der Linie 3, die unter einer map.apps 4.6 Installation betrieben werden). Anpassungen an diesen Optionen können entfernt werden.
proxy.cors.enabled=true proxy.cors.detection=true proxy.cors.enabledServers=servicesbeta.esri.com,server.organization.com proxy.use.always=true
Die ersten drei Optionen entfallen, da nun immer von einer CORS-Unterstützung ausgegangen wird.
Wurde bislang die Option proxy.use.always
genutzt, müssen nun alle Server, für die immer der Proxy verwendet werden soll, über proxy.use.rules
konfiguriert werden.
Für Apps ab Version 4.6.0 gilt nur die folgende Option, die der bisherigen Option proxy.cors.enabledServers
mit dem Flag "|true" entspricht:
# Liste von URLs zu Backenddiensten, für die die Übergabe von sicherheitskritischen Informationen mittels CORS aktiviert wird (z.B. Cookies und Autorisierungsheader) proxy.cors.trustedServers=https://servicesbeta.esri.com,https://server.organization.com
Vuetify Update auf 1.3.8 (von 1.0.17)
map.apps 4.6 enthält eine aktualisierte Version der Vue-basierten UI-Bibliothek Vuetify. Einen vollständigen Überblick über die Änderungen erhalten Sie in den Vuetify Release Notes von 1.0.18 bis 1.3.8 .
Die folgenden Änderungen können sich auf angepasste Bundles, Themes oder Style-Überschreibungen (z.B. in app.css) auswirken.
Änderungen
-
Alle vuetify Komponenten Style-Klassen sind nun durchgehend mit
v-
geprefixt. Ergänzen Sie .v- an eigene CSS-Selektoren, die sich auf Vuetify-Komponenten beziehen. Zum Beispiel muss der Selektor.ctAppRoot .my-custombundle .list__tile{}
geändert werden in.ctAppRoot .my-custom-bundle .vlist__tile{}
-
Die Komponenten
<v-textfield textarea/>
,<v-text-field autocomplete/>
und<vselect combobox/>
wurden zu unabhängigen Komponenten geändert und werden ersetzt durch<v-textarea/>
,<v-autocomplete/>
und<v-combobox/>
. Ein Änderung durch Suchen und Ersetzen reicht aus, da die Eigenschaften gleich geblieben sind. -
Die Komponenten
<v-radio/>
und<v-checkbox/>
ohne definiertes Farbattribut erhalten die "Akzentfarbe" als Fallback zugewiesen. Alle map.apps UIs haben bereits eine Erfolgsfarbe zugewiesen (z.B.<v-checkbox color="success"/>
). Bei definierten Bundles sollte dies ebenfalls geschehen.
Messen in 2D
In Apps der Linie 4 ist nun das Messen zusätzlich zu den bereits vorhandenen 3D-Messfunktionen auch in 2D-Karten möglich.
Das bisherige Bundle measurement
sorgt ab sofort dafür, dass die Bundles measurement-2d
und measurement-3d
geladen werden.
Wenn eine App nur für den Betrieb in 2D oder 3D vorgesehen ist, kann stattdessen eines der Bundles measurement-2d
und measurement-3d
geladen werden.
Aktualisierte Standard-App
Die Vorlagen für die sog. Standard-Apps sind aktualisiert.
Sofern Sie keine eigenen Anpassungen vorgenommen haben, entfernen Sie die vorhandenen Vorlagen (Dateien: default-app-*.zip
) aus dem Arbeitsverzeichnis.
Der Pfad zu diesem Verzeichnis wird über den Parameter data.directory.location
in der Datei %TOMCAT%\webapps\mapapps\WEBINF\classes\custom-application.properties
definiert.
Beim ersten Start werden dann die neuen Vorlagen dort abgelegt.
4.4
-
Die Vorlagen für die sog. Standard-Apps sind aktualisiert. Sofern Sie keine eigenen Anpassungen vorgenommen haben, entfernen Sie die vorhandenen Vorlagen (Dateien:
default-app-*.zip
) aus dem Arbeitsverzeichnis. Der Pfad zu diesem Verzeichnis wird über den Parameterdata.directory.location
in der Datei%TOMCAT% \webapps\mapapps\WEB-INF\classes\custom-application.properties
definiert. Beim ersten Start werden dann die neuen Vorlagen dort abgelegt. -
Die Einstellung für die Verwendung von Diensten per HTTPS mit selbstsignierten Zertifikaten hat sich geändert. Es werden nur noch solche Dienste zugelassen, die ein offizielles Zertifikat besitzen. Die Einstellung kann über die Eigenschaft
security.ssl.trustAny
geändert werden. -
Die Namen der Basisklassen haben sich geändert. Wenn das Template Seasons verwendet wird, müssen die selbst angelegten CSS Anweisungen entsprechend der unten stehenden Tabelle angepasst werden. Dies betrifft auch selbst angelegte Theme-Bundles.
alter Klassenname neuer Klassenname .header
.ct-application-header
.logo
.ct-application-header__logo
.appTitle
.ct-application-header__app-title
-
.ct-application-header__container-main
-
.ct-application-header__container-right
-
.ct-application-center
.footer
.ct-application-footer
.footer_left
.ct-application-footer__container-left
.footer_right
.ct-application-footer__container-right
-
Beachten Sie die angepasste Kompatibilität der ArcGIS API for JavaScript mit ES Promises. Um über die Auflösung dieser Objekte benachrichtigt zu werden, muss nun die Methode
when()
verwendet werden (vorherthen()
). Dieser BlogPost beschreibt die Änderungen im Detail.