Search the FirstSpirit Knowledge Base
Hallo Zusammen,
wir wollen die Werte von einem CMS_INPUT_COMBOBOX mittels GomIncludeValueProvider befüllen, so dass der Redakteur die Werte auswählen kann. Die Werte sollen dynamisch ermittelt werden, so dass diese sich ändern können. Jetzt besteht ja die Möglichkeit der COMBOBOX einen PARAM zu übergeben. Diesen PARAM würde ich jetzt gerne im GomIncludeValueProvider auslesen, aber leider finde ich keine Möglichkeit dazu.
<CMS_INPUT_COMBOBOX name="lt_field" singleLine="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="public">
<NAME>BaukastenValueProvider</NAME>
<PARAMS>
<PARAM name="max">10</PARAM>
</PARAMS>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="feld"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
public class BaukastenValueProvider implements GomIncludeValueProvider<Integer> {
private List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
@Override
public String getKey(Integer value) {return "Option2 with value " + value;
}
@Override
public Class<Integer> getType() {return Integer.class;
}
@Override
public List<Integer> getValues(SpecialistsBroker arg0) {FormsAgent formsAgent = arg0.requestSpecialist(FormsAgent.TYPE);
UIAgent uiAgent = arg0.requestSpecialist(UIAgent.TYPE);
OperationAgent operationAgent = arg0.requestSpecialist(OperationAgent.TYPE);
StoreElementAgent agent = arg0.requireSpecialist(StoreElementAgent.TYPE);
return list;
}
}
Habt ihr da eine Lösung? Oder ist das der falsche Weg?
Gruß
Daniel
Hallo Daniel,
die Parameter werden dem GomIncludeValueProvider übergeben, wenn dieser das Interface de.espirit.firstspirit.access.store.templatestore.gom.Parameterizable implementiert.
Beste Grüße
Stefan
Hallo Daniel,
die Parameter werden dem GomIncludeValueProvider übergeben, wenn dieser das Interface de.espirit.firstspirit.access.store.templatestore.gom.Parameterizable implementiert.
Beste Grüße
Stefan
Hey Stefan,
kannst du mir hier kurz ein kleines Beispiel zeigen?
Gruß
Daniel
Hi Daniel,
ein Beispiel wozu genau? Wenn dein BaukastenValueProvider die Schnittstelle Parameterizable implementiert, dann werden die im GOM definierten Parameter als Map an die einzige Methode setParameters übergeben. Dann kannst du damit im Baukasten arbeiten.
Die genaue Definition der Schnittstelle findest du in unserer API-Dokumentation (unter Developer-API).
Beste Grüße
Stefan
Hallo Stefan,
ich würde jetzt gerne auf den Parameter zugreifen, aber leider wird mir immer #global.id als String angezeigt.
<CMS_INPUT_COMBOBOX name="lt_formfield" singleLine="no" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="public">
<NAME>FormularframeworkValueProvider</NAME>
<PARAMS>
<PARAM name="project_id">#global.id</PARAM>
</PARAMS>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Formularfeld"/>
</LANGINFOS>
</CMS_INPUT_COMBOBOX>
@Override
public void setParameters(Map<String, String> map) {this.demo = map.get("project_id");
System.out.println(map.get("project_id"));
}
Kannst du mir sagen, warum ich nicht die ID erhalte? BZW. ich möchte gerne die section.uid haben als Parameter.
Hast du da vielleicht eine Lösung?
Dies soll ein dynamischer Parameter sein.
Gruß
Daniel Lüttel
Hallo Daniel,
die Parameter im GOM dienen lediglich zur wertebasierten Parameterisierung des Dienstes. Umgebungsvariablen (wie #global) gibt es an dieser Stelle (bislang) nicht.
Wenn die Anforderung besteht, an spezifische Informationen aus dem ValueProvider-Kontext heranzukommen, wäre der einzige Weg aktuell einen Feature Wunsch zu formulieren. Dieser sollte möglichst das Anwendungsszenario beschreiben (evtl. gibt es ja einen anderen Lösungsweg) und weniger eine konkrete Umsetzung.
Beispielsweise könnte in deinem Fall auch der Einsatz einer FS_INDEX Komponente mit eigenem DataAccessPlugin eine Alternative sein. So ein Plugin verfügt über wesentlich mehr Kontextwissen als ein ValueProvider.
Beste Grüße
Stefan
Hallo stefan,
vielen dank für deine Antwort.
Gibt es den eine Möglichkeit, dass man über eine Regel den PARAM-Wert setzen könnte? Ich brauche dort nur den Referenznamen der Absatzvorlage. Die kann ich mir ja in einer Variable speichern bei setParameters und später bei getValues nuw. getValue drauf zugreifen, wenn ich die Werte befüllen will.
Hi Daniel,
das ist leider an dieser Stelle nicht möglich, Sorry.
Grüße
Stefan.
Hallo Stefan,
dann muss ich mir einen andere Lösung einfallen lassen.
Das Szenario ist eigentlich relativ leicht. Wir wollen in einem DOM (z.B:. st_text) eine Link-Vorlage (lt_link_formular) nutzen. Diese Link-Vorlage beinhaltet dann eine Komponente, wie z.B. CMS_INPUT_COMBOBX, die alle Einträge aus einem FS_CATALOG von der Absatzvorlage liest und diese Werte sollen dann in das CMS_INPUT_COMBOBOX übergeben werden, so dass hier eine dynamische Liste entsteht.
Oder gibt es hier vielleicht eine andere coolere Lösung von eurer Seite aus?
Vielen Dank.
Hi Daniel,
"relativ leicht"?
Wenn ihr euch innerhalb einer Seite bewegt, würde ich mich fragen, ob man statt des Catalog evtl. echte Absätze zur Seite nutzt. Diese kann man dann per FS_REFERENCE referenzieren.
Der Ansatz über die Combobox und Value Service würde zudem wohl nur Werte aus einem alten Stand des Absatzes (Speicherstand) liefern, weil ja kein Zugriff auf das aktuelle Formular erfolgt.
Beste Grüße
Stefan