ACordes
I'm new here

Datenquellen-Eintrag via Script – keine Reaktion

Jump to solution

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?

0 Kudos
1 Solution

Accepted Solutions

...

FormData formData = dataset.getFormData();

FormField<String> field = (FormField<String>) formData.get(lang, "cs_title");

field.set("My new Value");

dataset.setFormData(formData);

....

View solution in original post

0 Kudos
13 Replies
tklein
I'm new here

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.

0 Kudos

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…?

0 Kudos

...

FormData formData = dataset.getFormData();

FormField<String> field = (FormField<String>) formData.get(lang, "cs_title");

field.set("My new Value");

dataset.setFormData(formData);

....

0 Kudos

Danke, so funktioniert es!

0 Kudos

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!

0 Kudos

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" Smiley Wink -> Siehe Antwort unten von Tobias

Peter
0 Kudos

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...

0 Kudos

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.

0 Kudos

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

0 Kudos