Überblick aller Update-Hinweise

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

Werkzeuge in der DockingBar im Footer sind nicht mehr per default in einer Toggle-Gruppe. Wenn sie nicht gleichzeitig geöffnet werden sollen, müssen sie einer Gruppe zugeordnet werden.

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:

  1. Die Spalte PREOPTIMIZED muss der Tabelle APPS hinzugefügt werden.

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

Manuelles Update

Verwenden Sie hierfür das entsprechende SQL-Skript für Ihre Datenbank:

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.

Angepasste Splashscreens

Besitzt die map.apps Installation, welche geupdatet wird, eine eigene index.html mit angepasster init.css müssen diesen Dateien gesichert und nach erfolgreichem Update wieder angewendet werden.

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:

AMD Import (alt)
define(["apprt-core/string-replace"], function(stringReplace){

   var msg = stringReplace('Hello ${key}', { key : "World"});

});
ES6 Import (neu)
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.

Unterstützung neuer UI-Komponenten

v-autocomplete, v-combobox, v-textarea, v-rangeslider, v-rating, v-img, v-hover, v-item-group, v-timeline, v-treeview

Abkündigungen (funktionieren noch, aber die Unterstützung wird in zukünftigen Updates entfernt):

  • v-card-media

  • v-jumbotrons

Beide können durch v-img ersetzt werden.

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 Parameter data.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 (vorher then()). Dieser BlogPost beschreibt die Änderungen im Detail.

4.2

Im Bundle-Paket 4.2.0 ist das Bundle basemaptoggler in basemapswitcher umbenannt worden.