Questions & Answers

SOLVED
dluettel
Elite Observer

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

0 Kudos
1 Solution

Accepted Solutions
StefanSchulz
I'm new here

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

View solution in original post

0 Kudos
9 Replies
StefanSchulz
I'm new here

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

0 Kudos
dluettel
Elite Observer

Hey Stefan,

kannst du mir hier kurz ein kleines Beispiel zeigen?

GruรŸ

Daniel

0 Kudos

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

0 Kudos

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

0 Kudos

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

0 Kudos

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. 

0 Kudos

Hi Daniel,

das ist leider an dieser Stelle nicht mรถglich, Sorry.

GrรผรŸe

Stefan.

0 Kudos

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.

0 Kudos

Hi Daniel,

"relativ leicht"? Smiley Happy

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

0 Kudos

Type a product name