Questions & Answers

SOLVED
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

Type a product name