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