Search the FirstSpirit Knowledge Base
Gehört im Prinzip zu diesem Beitrag: https://community.e-spirit.com/thread/1873?start=0&tstart=0
Besteht bei CMS_INCLUDE_OPTIONS die Möglichkeit ein IDProvider als Parameter zu übertragen , oder wenigstens dessen ID / UID?
Die ID/UID natürlich nicht statisch sondern aus dem aktuellen Element ausgelesen.
Hallo Svenja,
ich fürchte um Dir helfen zu können brauchen wir etwas mehr Kontext.
Grundsätzlich findest Du im ODFS (welches bei jedem installierten FirstSpirit-Server vorhanden ist) folgende Informationen zum Thema CMS_INCLUDE_OPTIONS:
http://www.e-spirit.com/odfs52/vorlagenentwicklung/formulare/datenelemente/options/
und
In dem verlinken Beitrag geht es um eine eigene Implementierung. Grundsätzlich kann man dort natürlich auch UIDs verwenden, oder auch gleich IDProvider (Beispiel! ungetestet!):
final class MyValueProvider implements GomIncludeValueProvider<IDProvider> {
@NotNull
public Class<IDProvider> getType() {return IDProvider.class;
}
@NotNull
public List<IDProvider> getValues(@NotNull final SpecialistsBroker broker) {List<IDProvider> list = new LinkedList<>();
StoreElementAgent agent = broker.requireSpecialist(StoreElementAgent.TYPE);
// hier irgendwie IDProvider in die Liste packen...
return list;
}
@NotNull
public String getKey(@NotNull final IDProvider value) {return value.getUid(); //wir benutzen hier die UID als eindeutigen Schlüssel
}
}
Wenn Du die Checkboxes vorbelegen willst, dann kann man das über den normalen FirstSpirit-Weg machen. Da in meinem Beispiel der Wert die Uid ist, würde ich erwarten, dass ein enstprechende String-Wert ausreichen müsste.
In den Parametern müsste eigentlich soetwas wie #global.node.uid funktionieren, habe ich aber jetzt nicht ausprobiert:
Grüße Marian
Hi Marian, ich versuchs nochmal genauer zu erklären.
Für unsere Seiten muss ein Autor festgelegt werden. Wer Autor sein darf hängt von der jeweiligen Inhaltsseite ab ( Die User mit Freigaberecht für diese Seite können Autor sein) Bisher nutzen wir dafür ein Treeselect um die vorausgewählten User darzustellen. Jetzt wollten wir das auf eine Combobox umswitchen. Das würde ja bedeuten dass diese dynamisch sein muss.
Ich dachte dass folgender Weg eine Lösung wäre:
<CMS_INPUT_CHECKBOX name="st_auswahl" gridWidth="1" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="public">
<NAME>de.xyz.firstspirit.template.IncludeServiceOptions</NAME>
<PARAMS>
<PARAM name="p1">1</PARAM>
<PARAM name="p2">2</PARAM>
<PARAM name="p3">3</PARAM>
</PARAMS>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Auswahl" description="TEXT"/>
</LANGINFOS>
</CMS_INPUT_CHECKBOX>
Die selbstimplementierte Klasse IncludeServiceOptions dient dazu die möglichen Autoren rauszufinden, das heißt sie dient dazu die Checkbox zu füllen (richtig)? Die Angaben bei PARAM dienen dazu dass ich Parameter vom FS Client in diese Klasse reichen kann (richtig?) Das würde bedeuten wenn ich es wie in dem Beispiel mache steht mir im Java Code später eine Liste zur Verfügung mit den Keys p1, p2 und p3 und den Werten 1,2 und 3 als String
Das hat auch funktioniert. Aber ich brauche ja keine beliebigen Strings die ich meiner Klasse übergeben muss, sondern die aktuelle Seite, also zB #global.node oder zumindest deren ID / UID. Wenn ich aber <PARAM name="page">#global.node</PARAM> in meinem Formular ausprobiere dann schreibt er #global.node als String in die List.
Mein Problem war daher: Wie komme ich in meiner implementierten Klasse an das aktuelle FS Element? Damit ich aus diesem die User rausfinden kann, welche als Autor in Frage kommen. Diese User müssen dann zurück an die Checkbox geleitet werden und dort zur Auswahl angezeigt.
Ich hoffe jetzt ist es verständlich.
Hallo Svenja,
ich habe nochmal recherchiert und mit Kollegen gesprochen. Wie dem auch sei, leider kommt man in dem PARAM-Tag nicht an den aktuellen Node (#global.node). Es gibt aber ggf. einen Workaround mit Regeln:
http://www.e-spirit.com/odfs52/vorlagenentwicklung/regeln/formulareigenschaften-property/
Die Idee wäre, dass man per Regeln auf das Systemobjekt #global zugreift und die benötigte Information in ein verstecktes Formularfeld schreibt. Von dort aus müsste man per PARAM darauf zugreifen können (<PARAM name="uid">#field.pt_uid</PARM>). Bei FS-BUTTONS gibt es ein solches Konstrukt (http://www.e-spirit.com/odfs52/vorlagenentwicklung/formulare/eingabekomponenten/button/#s9).
Sollte das wieder nicht mit CMS_INCLUDE_OPTIONS gehen, muss man per FS-Button eine Executable ausführen, welche per FormAgent und ShowFormDialogOperation einen zusätzlichen Dialog öffnet. Hier kann man dann sogar das GOM dynamisch zusammenbauen und dann schon sehr viel tun. Aktuell habe ich das in einem Projekt gemacht, wobei ich GOM und RULSETS dynamisch im StringBuilder zusammenbaue und so Daten aus Fremdsystemen in FirstSpirit integriere.
Parallel könnte man dann auch einen Feature-Request erstellen, damit wir das Verhalten bzgl. des CMS_INCLUDE_OPTIONS dem des FS_BUTTON angleichen.
Grüße Marian