tfuchs
Elite Observer

Feature per FeatureInstallAgent via Modul installieren - Mapping der Layer

Jump to solution

Hallo zusammen,

ich möchte in einem FSM ein Feature mitliefern, das ich per FeatureInstallAgent installieren will (in installed()). Dazu mache ich zunächst folgendes:

final SpecialistsBroker broker = environment.getBroker();

final FeatureInstallAgent installAgent = broker.requestSpecialist(FeatureInstallAgent.TYPE);

final FeatureFile featureFile;

featureFile = installAgent.uploadFeatureFile(inputStream);

final ServerActionHandle<? extends FeatureProgress, FeatureAnalyseResult> analyseHandle =

  installAgent.analyzeFeature(featureFile);

final FeatureAnalyseResult analyseResult = analyseHandle.getResult(true);

In dem Feature wird ein Schema mitgeliefert. Das muss ja auf einen Layer gemappt werden. Wie findet das Mapping statt? Das muss ja eigentlich der Admin, der das Modul installiert irgendwie auswählen, oder? Wie mache ich das?

Danke und Grüße

Timo

0 Kudos
1 Solution

Accepted Solutions

Für die Welt, die Antwort:

Möglichkeit 1: neuer Layer wird angelegt:

installAgent.installFeature(featureFile, LayerMapper.CREATE_NEW_DEFAULT_LAYER_MAPPER);

Möglichkeit 2: Layer per Namen zuweisen

Map<String, String> layerMapping = new HashMap<>();

for (String layerName : analyseResult.getUnmappedLayers()) {

    layerMapping.put(layerName, moduleValues.getString(NewsletterConstants.PROP_DEFAULT_LAYERNAME));

}

installAgent.installFeature(featureFile, LayerMapper.LayerNameBasedLayerMapper.from(layerMapping));

View solution in original post

0 Kudos
10 Replies
mbergmann
Crownpeak employee

Hallo Timo,

mit dem Code installierst du das Feature ja noch nicht sonderst machst nur die Prüfung, ob es zu Problemen kommt.

Die eigentliche Installation erfolgt ja dann über die Methode .installFeature(...). Dort kannst du dann einen LayerMapper mitgeben.

Viele Grüße

Michael

0 Kudos

Hallo Michael,

ja, das habe ich verstanden. Aber wie erstelle ich den LayerMapper? Ich weiss ja nichts von dem Projekt, in dem ich das installieren will, d.h. der Admin, der das Modul installiert, muss ja die Info mitgeben, auf welchen Layer er das Schema mappen will. Irgendwie habe ich da gedanklich einen Missing Link 🙂

Ich fände es ja hilfreich, wenn ich eine Anleitung dazu hätte, anstelle mich durch die leider eher spärlich dokumentierte Javadoc zu graben.

Danke und Grüße

Timo

0 Kudos

Hallo mbergmann,

also, ich gebe auf. Mir ist völlig unklar, wie ich einen LayerMapper erstelle. Habt Ihr irgendein Beispiel? Die Dokumentation erscheint mir an der Stelle sehr dünn, oder ich weiss nicht, wo ich schauen soll.

Grüße

Timo

0 Kudos

Hallo tfuchs​,

eine Möglich bestünde m. E. darin, das Modul über eine de.espirit.firstspirit.module.Configuration-Implementierung dahingehend konfigurierbar zu machen, dass der installierende Benutzer ein Mapping (z.B. pro Projekt / Schema) über die Modul Konfiguration einrichten kann. Das Content Transport Feature könnte dann im 2. Schritt bei Zuweisung einer Projektkomponente in das gewünschte Projekt installiert werden, dabei die zuvor eingerichtet Konfiguration auslesen und damit ein entsprechenden LayerMapper erzeugen (oder bei fehlendem Mapping für das Projekt mit einer entsprechenden Fehlermeldung abbrechen).

Das Problem in deinem Use-Case ist ja, dass es keine Möglichkeit gibt, eine Art Installationsdialog zu erzeugen in welchem der installierende Nutzer ein Mapping auswählen könnte. Mit dem beschriebenen Ansatz wäre das möglich.

Vielleicht fällt ja noch jemandem eine einfachere Lösung ein..

Gruß, Hendrik

0 Kudos

Hi Hendrik​,

danke für die Rückmeldung. Das könnte evtl. gehen, würde aber den Workflow für den Admin doch ziemlich unschön gestalten.

Ich könnte natürlich knallhart wenn es nur einen Layer im Projekt den einfach ungefragt nehmen, aber das könnte für ungewünschte Effekte sorgen 😉

Grüße

Timo

0 Kudos

Hallo tfuchs​,

immerhin gibt es bei der vorgeschlagenen Lösung keinen "Medienbruch", sprich der installierende Benutzer muss den Server Manager nicht verlassen. Alternativ könntest du deine Lösung so umbauen, dass der installierende Benutzer den SiteArchitect öffnen muss um z.B. mittels Kontextmenü-Skript direkt auf einem DB Schema eine Art Installationsroutine für die Installation des Features in dem Projekt auszuführen. Der Ansatz wäre etwas pragmatischer und m. E. mit weniger Aufwand verbunden, aber vom Workflow her auch nicht "optimal"..

Gruß, Hendrik

0 Kudos

Hallo Hendrik​,

das stimmt.

Ich habe noch eine blöde Frage: Ich verstehe nicht so richtig, wie ich mir eine Instanz des LayerMapper besorgen kann 🙂

Grüße

Timo

0 Kudos

Hallo tfuchs​,

dazu einfach eine Klasse schreiben die das Interface de.espirit.firstspirit.transport.LayerMapper (Link API) implementiert, ist ja recht überschaubar Smiley Wink.

Edit sagt: Alternativ auch mal auf LayerMapper.LayerNameBasedLayerMapper (FirstSpirit Developer-API) schauen..

Gruß, Hendrik

0 Kudos

Ah, hätte ich mal richtig gelesen, das ist ja ein Interface. Danke!

0 Kudos