Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe ein Problem bei der Entwicklung eines Skripts, welches durch ein FS_BUTTON aufgerufen wird. Als FS Version kommt hier 4.2.488 zum Einsatz.
Ich gebe dem Skript mittels #field.feldname ein sprachabhängiges Textfeld mit. Dieses möchte ich im Skript für alle Projektsprachen mit einem Vorgabewert belegen. Um das Feld zu setzen kenne ich die Methode parameter_name.set(value). Hier fehlt die Möglichkeit den Wert sprachabhängig zu setzen. Hat jemend einen Vorschlag wie dies zu erreichen ist?
Zur weiteren Information: Das Formular gehört zu einer Tabellenvorlage, welches über einen CMS_INPUT_OBJECTCHOOSER mit einem mit einem Fremdschlüssel belegtem Formular einer weiteren Tabellenvorlage verbunden ist. Das oben erwähnte Formular wird zur Erfassung von sprachabhängigen Metadaten für die als Datentabelle zu nennenden Tabelle verwendet. Die Lösung sollte so funktionieren, dass die sprachabhängigen Pflichtfelder aus der Datentabelle weiterhin leer sein dürfen, so lang keine Daten für diese Sprache eingetragen wurden, obwohl Metadaten dazu vorhanden sind.
Wäre für einen guten Rat sehr dankbar!
Gruß
Frank
Hallo Jan,
danke für deine Antwort. Wie komme ich an das Objekt zu dieser Methode. Aus dem Formular bekomme ich einen den Parameter vom Typ de.espirit.firstspirit.client.gui.FormAgentImpl$FormAgentFormField.
Die von dir dir genannente Methode finde ich in der Klasse SimpleEditorValue.
Gruß
Frank
Ich habe versucht den Wert über das FormData-Objekt zu setzen, was nicht funktioniert hat. Das Formularfeld bleibt leer obwohl die Ausführung und das Zurücklesen des Feldes positiv waren. Hat noch jemand einen Lösungsvorschlag?
Das Thema hat für mich nach wie vor eine hohe Prio.
Gruß
Frank
Hallo Frank,
hier mal anhand eines Beispiels über eine Page:
Page page = (Page) pageStoreRoot.getStoreElement("mithras_home",
UidType.PAGESTORE);
FormData data = page.getFormData();
FormField field = data.get(project.getMasterLanguage(), "pt_headline");
page.setLock(true, false);
field.set("TESTING 123");
page.setFormData(data);
page.save();
page.setLock(false, false);
So müssten die Änderungen übernommen werden
Freundliche Grüße
Ismail
Hallo Ismail,
das ist die Lösung, die ich auch implementiert hatte. Es stimmt, dass ich so den Wert eines Formularfeldes setzen kann, leer bleibt aber nach wie vor die Anzeige des Formularfeldes. Für den Fall einer Inhaltseite kann man die Seite aktualisieren und der Wert wird angezeigt. Über ein refresh auf dem page-Objekt, bekomme ich hier aber nichts zu sehen. Das Verhalten wäre soweit ok, da es sich um Metadaten handelt, die ich auch auf hidden setzen kann.
Das eigentliche Problem habe ich beim Füllen eines Feldes einer Tabellenvorlage, die über einen CMS_INPUT_OBJECTCHOOSER über eine andere Tabellenvorlage eingebunden ist. Hier führe ich das Skript aus, schaue in meine Metadatentabelle und sehe, dass die Werte richtig geschrieben wurde. Gehe ich zurück zum Formular, ist dieses unbeschrieben, obwohl die Daten ja bereit in der Metadatentabelle gespeichert wurden. Speicher ich jetzt die Datenquelle manuell, werden die Daten aus der Metadatentabelle leer überschrieben.
Zudem entsteht hier auch die Problematik das die Pflichtfeldprüfung der Datentabelle anschlägt, obwohl nur Daten in die Metadatentabelle geschrieben wurde.
Ich hoffe, ich konnte die Problematik soweit erklären und wir kommen der Lösung so ein Stück näher.
Viele Grüße
Frank
Hallo Frank, wenn du die Werte eines Datensatzes in einem CMS_INPUT_OBJECTCHOOSER setzen möchtest funktioniert analog folgender Codesnippet:
FormData data = page.getFormData();
FormField<Entity> field = (FormField<Entity>) data.get(
ject.getMasterLanguage(), "my_objectchooser");
Entity entity = field.get();
Session session = entity.getSession();
entity.setValue("MyKey_LANG", "MyValue_LANG");
session.release(entity);
session.commit();
page.setLock(true, false);
field.set(entity);
page.setFormData(data);
page.save();
page.setLock(false, false);
Freundliche Grüße
Ismail
Hallo nochmal,
der Lösungsansatz von Ismail sollte meine Frage beantworten. Danke dafür! Leider hatte ich bisher noch nicht die gelegenheit das Beispiel umzusetzen. Mir ist für meinen Anwendungsfall eine einfachere Lösung eingefallen. Und zwar werden ohnehin die besagten Datenquelleneinträge per Modul in eine Inhaltsseite übertragen. Im gleichen Prozess schreibe ich jetzt meine Metadaten in die entsprechenden Felder. Der einziger Nachteil ist, dass der Vorgang für den Autor nicht mehr transparent ist.
Viele Grüße
Frank