Search the FirstSpirit Knowledge Base
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 .
Viele Grüße
Thomas-Michael Domschke
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
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
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
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
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
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
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
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
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