Search the FirstSpirit Knowledge Base
Hallo,
ich versuche gerade mittels eines FS_BUTTON einen Termin einer referenzierten Entität in einen Datepicker des aktuellen Formulars zu übernehmen.
Ich schaffe es, die aktuelle Entität in der DB zu updaten/speichern, jedoch kriegt der Nutzer diese Änderungen nicht mit. Erst, wenn der auf Aktualisieren drückt (und die Meldung "Sie verlieren alle ungespeicherten Werte" abnickt), wird die Änderung im Formular aktualisiert.
Gibt es eine Möglichkeit, das "live" zu updaten?
Im Skritpt gibt es lt. Doku den context (BasicScriptContext), und das aktuelle Element (vom Typ DataSet) ...
Grüße,
Matthias
Wichtig ist der Teil: <PARAM name="textfield">#field.label_trade_fair_travel</PARAM>
<FS_BUTTON name="cs_tft_button" hFill="yes" noBreak="no" onClick="script:av_tft" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="update fair dates"/>
<LANGINFO lang="DE" label="Daten übernehmen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="textfield">#field.label_trade_fair_travel</PARAM>
</PARAMS>
</FS_BUTTON>
<CMS_INPUT_TEXT name="label_trade_fair_travel" allowEmpty="yes" preset="copy" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Label"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Im Skript kann man dann über die Variable textfield (vom Typ FormField) auf den Wert zugreifen, bzw. über textfield.set("mein wert") den Wert setzen.
[EDIT] Fehlerhafte Referenz nach Hinweis korrigiert
Da scheint es tatsächlich ein Problem zu geben, weiter Untersuchung erfolgen bei uns unter der internen ID #103947.
Es wäre gut, wenn du noch das Formular und den Skript-Code beilegen könntest (ev. auch per direkte Nachricht an mich).
--Peter
Damit auch die Anderen etwas von dierser Diskussion haben, hier mal mein kleines Skript, dass das Feld "tft_start_date" auf die aktuelle Zeit setzen soll:
Skript:
//! Beanshell
if (null != element) {
// get the current entity
entity = element.getEntity();
// update some values
entity.setValue( "tft_start_date", new java.util.Date() );
entity.setValue( "label_trade_fair_travel_EN", "omfgwtfbbq" );
// this doesn't work either
properties.put( "label_trade_fair_travel_EN", "omfgwtfbbq" );
// save the changes
entity.getSession().commit();
}
Formular:
<FS_BUTTON name="cs_tft_button" hFill="yes" noBreak="no" onClick="script:av_tft" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="update fair dates"/>
<LANGINFO lang="DE" label="Daten übernehmen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="foo">#label_trade_fair_travel</PARAM>
</PARAMS>
</FS_BUTTON>
<CMS_INPUT_TEXT name="label_trade_fair_travel" allowEmpty="yes" preset="copy" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Label"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
<CMS_INPUT_DATE name="cs_tft_start_date" singleLine="yes" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="date of arrival:" format="dd.MM.yy HH:mm:ss"/>
</LANGINFOS>
</CMS_INPUT_DATE>
Funktioniert leider nicht, auch verstehe ich die Dokumentation der properties-Variablen nicht ganz. Klingt lt. Doku so, als würde sie nach Skriptdurchlauf Variablen setzen. Passiert aber nicht
properties:
Zugriff auf die über die Eingabekomponente gesetzten Werte (Map). Die Werte werden nach der Ausführung des Skripts gesetzt und beim Speichern der Eingabekomponente gespeichert. Auf die zurückgelieferten Werte können Methoden des Interface java.util.Map<String, String> ausgeführt werden.
Matthias
Link zur Doku:
http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/formular/fs/fs_button/button.html
Bitte da den Teil beachten, wie aus dem Skript auf Formularelemente zugegriffen werden kann ("#formfield").
Der Weg über "element.getEntity()" ist der falsche. Auch sollte in dem Button-Skript kein "commit" gemacht werden, oder die Daten über das Element gesetzt werden.
Edit: Text wurde korrigiert, s.u.
Ok,
dann bin ich auf dem falschen Weg, gibt es denn eine offizielle Beschreibung, wie man denn mittels eines Skriptes das aktuelle Formular modifiziert?
Oder einfach nur ein kurzes Skript. Der Hinweis mit #form bringt mich leider nicht weiter 😕
Grüße,
Matthias
Wichtig ist der Teil: <PARAM name="textfield">#field.label_trade_fair_travel</PARAM>
<FS_BUTTON name="cs_tft_button" hFill="yes" noBreak="no" onClick="script:av_tft" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="update fair dates"/>
<LANGINFO lang="DE" label="Daten übernehmen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="textfield">#field.label_trade_fair_travel</PARAM>
</PARAMS>
</FS_BUTTON>
<CMS_INPUT_TEXT name="label_trade_fair_travel" allowEmpty="yes" preset="copy" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Label"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Im Skript kann man dann über die Variable textfield (vom Typ FormField) auf den Wert zugreifen, bzw. über textfield.set("mein wert") den Wert setzen.
[EDIT] Fehlerhafte Referenz nach Hinweis korrigiert
Field statt Form, dann geht's. Dankeschön!
<PARAMS>
<PARAM name="label">#field.label_trade_fair_travel</PARAM>
</PARAMS>
Ups, danke für den Hinweis, habe mein Posting korrigiert, damit keine weiter Verwirrung entsteht.