Questions & Answers

SOLVED
thmd
I'm new here

Option erzeugen mit SimpleObjectFactory

Jump to solution

Hallo,

es geht darum, in einer CMS_INPUT_LIST per Skript neue Eintrรคge zu erzeugen. Dazu muss ja irgendwann eine Option erzeugt werden, was, wenn ich die API richtig lese, รผber die ObjectFactory geschieht. Die ObjectFactory der CMS_INPUT_LIST ist eine SimpleObjectFactory. Es ist allerdings egal, was wir der create() Methode der OptionFactory รผbergeben, sobald die Option dem NotifyingSet der Liste hinzugefรผgt wird taucht im Formular eine Fehlermeldung auf (Datenfehler: Der Wert "...... " ist keine gรผltige Wahl!). Welche "Objektarten" kann man denn einer (Simple)OptionFactory รผbergeben, damit eine vernรผnftige Option erzeugt wird bzw. hat jemand nen Codebeispiel dafรผr Smiley Happy.

Viele GrรผรŸe

Thomas-Michael Domschke

0 Kudos
1 Solution

Accepted Solutions

Nein, das ist so nicht mรถglich. Die CMS_INPUT_LIST verwaltet eine Auswahl definierter Eintrรคge (fest oder per CMS_INCLUDE_OPTIONS aus einer anderen Quelle).

Die Liste dynamisch erweiterbar zu halten ist eher aufwรคndig. Dazu mรผsste man jetzt wissen, รผber welche Wege die Liste gepflegt werden soll. Programmatisch kรถnnte man dies รผber die Anbindung an eine Datenbanktabelle machen, wenn man zunรคchst die Eintrรคge in die Tabelle einpflegt und anschlieรŸend in der Liste einstellt. Ohne Datenbankanbindung geht dies eventuell auch รผber eine eigene Implementierung des GomIncludeValueProvider in Verbindung mit einem entsprechenden Service. Hierzu bitte die Dokumentation fรผr Entwickler konsultieren.

GruรŸ

Stefan

View solution in original post

0 Kudos
8 Replies
StefanSchulz
I'm new here

Hi,

ich nehme mal an, dass die hier verwendete CMS_INPUT_LIST mittels CMS_INCLUDE_OPTIONS konfiguriert wurde, dann funktioniert die SimpleOptionFactory zumeist nicht als Options-Lieferant. Die richtige Factory bekommt man รผber die Definition der Eingabekomponente: das zugehรถrige GomFormElement-Objekt implementiert das Interface OptionFactoryProvider und somit die Methode getOptionFactory().

Hoffe dies hilft weiter.

GruรŸ

Stefan

0 Kudos

Hallo,

nein die CMS_INPUT_LIST ist in unserem Fall nicht mit CMS_INCLUDE_OPTIONS konfiguriert. Es ist einfach nur eine Auswahlliste in einem Formular.

   <CMS_INPUT_TEXT name="input" noBreak="yes" useLanguages="no">

      <LANGINFOS>

        <LANGINFO lang="*" label=""/>

      </LANGINFOS>

    </CMS_INPUT_TEXT>

    <FS_BUTTON name="do_search" onClick="script:fill_list">

      <LANGINFOS>

        <LANGINFO lang="*" label="Suchen"/>

      </LANGINFOS>

      <PARAMS>

        <PARAM name="searchvalue">#field.input</PARAM>

        <PARAM name="searchlist">#field.search_list</PARAM>

      </PARAMS>

    </FS_BUTTON>

    <CMS_INPUT_LIST name="search_list">

      <LANGINFOS>

        <LANGINFO lang="*" label="test"/>

      </LANGINFOS>

    </CMS_INPUT_LIST>

Der Benutzer gibt im Eingabefeld einen Text ein und รผber ein Button wird ein Script gestartet (Parameter fรผr das Script sind die leere CMS_INPUT_LIST und der CMS_INPUT_TEXT). Dieses Script ruft mit dem Wert aus dem Eingabefeld eine externe Anwendung auf und bekommt eine Menge von Ergebnissen zurรผck, die dann der Liste hinzugefรผgt werden. Von der Idee her entsprechen sie am ehesten den normalen <ENTRIES>, nur dass sie halt durch das Script erzeugt werden sollen.

Im Script selbst holen wir und die OptionFactory รผber getOptionFactory(). Das Erzeugen funktioniert auch mit allen mรถglichen Objektarten (Strings, JavaObjekte etc.) aber sobald die von der OptionFactory erzeugte Option dem NotifyingSet des Formularfeldes (#field.search_list) hinzugefรผgt wird, damit es in der Liste auswรคhlbar ist, gibt es die bereits erwรคhnte Fehlermeldung.

Viele GrรผรŸe

Thomas-Michael Domschke

0 Kudos

Ah, O. K., dann ist das Problem ja noch einfacher: es sind immer nur die Werte fรผr die CMS_INPUT_LIST gรผltig, die auch definiert sind. Hier ist die Liste ja offensichtlich leer.

GruรŸ

Stefan

0 Kudos

Hallo,

hm ok, was wรคre wenn ich der Liste einen Dummy-Entry gebe, also z.B.

<CMS_INPUT_LIST name="search_list">

      <LANGINFOS>

        <LANGINFO lang="*" label="test"/>

      </LANGINFOS>

      <ENTRIES>

          <ENTRY value="dummy">

              <LANGINFOS>

                  <LANGINFO lang="*" label="Dummy" />

              </LANGINFOS>

          </ENTRY>

      </ENTRIES>

    </CMS_INPUT_LIST>

ist es dann mรถglich, neue ENTRY-Elemente programmatisch zu erzeugen? Und wenn ja, wie wรผrde das funktionieren?

GrรผรŸe

Thomas-Michael Domschke

0 Kudos

Nein, das ist so nicht mรถglich. Die CMS_INPUT_LIST verwaltet eine Auswahl definierter Eintrรคge (fest oder per CMS_INCLUDE_OPTIONS aus einer anderen Quelle).

Die Liste dynamisch erweiterbar zu halten ist eher aufwรคndig. Dazu mรผsste man jetzt wissen, รผber welche Wege die Liste gepflegt werden soll. Programmatisch kรถnnte man dies รผber die Anbindung an eine Datenbanktabelle machen, wenn man zunรคchst die Eintrรคge in die Tabelle einpflegt und anschlieรŸend in der Liste einstellt. Ohne Datenbankanbindung geht dies eventuell auch รผber eine eigene Implementierung des GomIncludeValueProvider in Verbindung mit einem entsprechenden Service. Hierzu bitte die Dokumentation fรผr Entwickler konsultieren.

GruรŸ

Stefan

0 Kudos

Hallo,

vielen Dank fรผr die Info. Schade das es nicht geht. Die Variante รผber den GomIncludeValueProvider hatten wir schon mal probiert, da war aber das Problem, dass dieser nicht wirklich mit dynamischen Parametern gefรผttert werden konnte bzw. wir keinen Weg gefunden haben.

Wรคre es denn eventuell mit einer FS_LIST Komponente mรถglich neue Eintrรคge mit bestehenden Absatzvorlagen zu erzeugen, oder geht das dort auch nicht?

Viele GrรผรŸe

Thomas-Michael Domschke

0 Kudos

Ja, klar. Die FS_LIST kann beliebige Inhalte aufnehmen. Die zulรคssigen Absatzvorlagen kรถnnen dazu in der Formulardefinition festgelegt werden (zum Beispiel eines mit nur einem Textfeld).

Um neue Inhalte zu erstellen, muss man hier des FormDataProducers habhaft werden. Diesen erhรคlt man รผber den Wertecontainer der Eingabekomponente: FormDataList. Welchen FormDataProducer man erhรคlt, hรคngt von der Konfiguration der FS_LIST ab und muss entsprechend behandelt werden (siehe FormDataProducer-Hierarchie).

GruรŸ

Stefan

0 Kudos

Hallo!

Ich habe einen neuen Eintrag erstellt und einer FS_LIST รผbergeben (analog zu dem Beispiel: http://www.e-spirit.com/odfs42/access/examples/de/espirit/firstspirit/access/editor/FsListEditorValu...). Wie erfolgt nun die Aktualisierung der GUI, so dass der entsprechende Eintrag auch dargestellt wird?

Viele GrรผรŸe

Stefan Mรผller

0 Kudos

Type a product name