Frank_HLP
Returning Observer

Mehrsprachige Felder im Skript setzen

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

0 Kudos
7 Replies
kohlbrecher
Crownpeak employee

Hallo Frank,

setValueFromText(Language language, String text)

müsste das sein, was du suchst.

Grüße

Jan

0 Kudos

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

0 Kudos
Frank_HLP
Returning Observer

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

0 Kudos

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

0 Kudos

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

0 Kudos

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

0 Kudos