Search the FirstSpirit Knowledge Base
Hallo Community,
mit folgendem Script(-Auszug) versuche ich einen Datenquellen-Eintrag zu erzeugen, bei dem der Titel gesetzt wird. Das Script läuft durch, nur leider wird kein Eintrag erzeugt. Das "csTerm.save()" wird scheinbar schon in irgendeiner Form ausgeführt, da ich, wenn ich die Entity nicht "locke", eine entsprechende LockExeption bekomme.
Content2 csTerm = (Content2) contentStore.getStoreElement("terms", IDProvider.UidType.CONTENTSTORE);
Schema schema = csTerm.getSchema();
Session session = schema.getSession();
Entity entity = session.createEntity(csTerm.getEntityType().getName());
try {
csTerm.lock(entity);
csTerm.setLock(true, false);
Dataset dataset = csTerm.getDataset(entity);
FormData formData = dataset.getFormData();
GomEditorProvider prov = formData.getForm();
GomFormElement elementTitle = prov.findEditor("cs_title");
TextEditorValue editorTitle = (TextEditorValue) elementTitle.getDefaultValue();
editorTitle.set(lang, "NurnTest");
csTerm.save();
csTerm.unlock(entity);
csTerm.setLock(false, false);
…
Kann mir jemand weiterhelfen?
...
FormData formData = dataset.getFormData();
FormField<String> field = (FormField<String>) formData.get(lang, "cs_title");
field.set("My new Value");
dataset.setFormData(formData);
....
Hallo,
in Ihrem Script fehlt noch das zurückschreiben des FormData -Objekt dataset.setFormData(formData); Und das commit in die Datenbank mit session.commit(). Das commit sollte immer erst erfolgen wenn man mit den Verändern, Anlegen und löschen fertig ist. Soll heissen werden mehrere Datensätze angelegt erfolgt abschliessend nur ein commit.
Danke für Ihre Antwort. Nun bin ich in der glücklichen Lage, Einträge zu erstellen. Nur leider ist das Feld "cs_title" leer.
Folgendermaßen sieht der Code innerhalb des try-Blocks jetzt aus:
csTerm.lock(entity);
csTerm.setLock(true, false);
Dataset dataset = csTerm.getDataset(entity);
FormData formData = dataset.getFormData();
GomEditorProvider prov = formData.getForm();
GomFormElement elementTitle = prov.findEditor("cs_title");
TextEditorValue editorTitle = (TextEditorValue) elementTitle.getDefaultValue();
editorTitle.set(lang, "NurnTest");
// System.out.println(formData.get(lang, "cs_title").get());
// Gibt mir korrekterweise den String "NurnTest" aus
dataset.setFormData(formData);
csTerm.save();
csTerm.unlock(entity);
csTerm.setLock(false, false);
session.commit();
Und die XML-Struktur für "cs_title":
<CMS_INPUT_TEXT name="cs_title" hFill="yes" singleLine="no" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Titel"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Was habe ich hier wieder übersehen…?
...
FormData formData = dataset.getFormData();
FormField<String> field = (FormField<String>) formData.get(lang, "cs_title");
field.set("My new Value");
dataset.setFormData(formData);
....
Danke, so funktioniert es!
Hallo zusammen,
obwohl die Frage schon beantwortet ist, hätte ich noch eine angrenzende Frage.
Wie bekomme ich denn das csTerm Objekt? Im Beispiel oben wurde dies folgendermassen geholt:
Content2 csTerm = (Content2) contentStore.getStoreElement("terms", IDProvider.UidType.CONTENTSTORE);
Gerne würde ich es gleich holen. Da stellt sich aber die Frage, wie ich an das Element contentStore komme.
Danke für eure Hilfe!
Was ist denn mit "gleich holen" gemeint? Entweder man hat das Element bereits (z.B. in einem Kontextmenü-Skript das aktuelle Element), oder man muss es sich anhand der ID oder der UID holen. Einen anderen Weg gibt es nicht.
[EDIT]
Ah, "gleich" im Sinne von "ebenfalls" -> Siehe Antwort unten von Tobias
Das Objekt "contentstore" ist der ContentStore / Datenquellen. Diesen kann man über den UserService erhalten. http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/UserService.html#getStore%28de.e...
Ich möchte einen Sprachfallback für Datenquellen Einträge implementieren. Hierzu prüfe ich die Mussfelder des jeweiligen Entitys. Wenn ich feststelle, dass die Attribute in der aktuellen Sprache nicht vorhanden sind, dann möchte ich auf das Element der Mastersprache zugreifen.
Ich habe ein aktuelles Datenbank Entity Element in der englischen Sprache. Jetzt möchte ich über das Element auf das Element der deutschen Sprache zugreifen. Herr Waltenberg von e-Spirit hat vorgeschlagen über getFormData auf die Attribute zuzugreifen und hat mir diesen Community Eintrag als Referenz angegeben. Wie ich jetzt aber von meinem englischen Element auf das deutsche Element komme, weiss ich noch nicht.
Sprachfallback? Im Template? Das wäre doch $CMS_VALUE(#row.spaltenname,default:#row.spaltenname_EN)$
und im script hat man doch ein Objekt mit allen sprachen und weleche Sprache man will kan man ja steuern:
FormField<String> field = (FormField<String>) formData.get(lang, "cs_title");
lang entspricht einem Language Objekt.http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/Language.html