Questions & Answers

arnbae
I'm new here

GOM-Vorgabewerte per Script setzen?

Hallo,

ich hรคnge an dem Problem, per Script ein GOM-Element (also eine Eingabemaske) zu erzeugen und darin auch Vorgabewerte zu setzen. Die Maskengenerierung geht auch schon (mรผhsam aufgrund unvollstรคndiger GOM-Dokumentation Smiley Sad), aber bei den Vorgabewerten scheitere ich daran, dass setDefaultValue() einen Wert vom Typ "EditorValue" erwartet, aber ich keinen neuen EditorValue instantiieren kann, weil es sich um Interfaces handelt.

Folgender Script-Beispielcode soll das zeigen (arbeitet im Formular des gerade in Bearbeitung befindlichen Scripts):

// ********** Imports an dieser Stelle zugunsten der Kรผrze weggelassen ...

// Master language

masterlang = context.getProject().getMasterLanguage();

// Template-Store

ts = context.getUserService().getStore(Store.TEMPLATE_STORE, true, true);

// Aktuelles Script

sc = context.getScript();

// Dessen Formular = GomProvider

gp = sc.getGomProvider();

// Formular lรถschen

gp.clear();

// Neues Formularelement

fe = new GomText();

// Name setzen - war das mรผhsam, das rauszufinden ...

a = new ValueOfContractor.Invoke();

d = a.valueOf(Designator.class,"st_text_1");

fe.setName(d);

// Langinfos spare ich mir im Beispiel

// Sprachunabhรคngig

fe.setUseLanguages(YesNo.NO);

// Default Value ergibt NULL

print fe.getDefaultValue();

// ********* Hier hรคnge ich: Wie erzeuge ich eine Default-Vorgabe?

// ********* Anschlussfrage: Fรผr einen CMS_INPUT_RADIOBUTTON?

// Element zum GomProvider hinzufรผgen

gp.add(fe);

// Template aktualisieren

sc.setGomProvider(gp);

// und Speichern

sc.save("Testscript hat sein eigenes Formular verรคndert");

Wie kann ich da den Default setzen?

Arndt Bรคr

0 Kudos
5 Replies
StefanSchulz
I'm new here

Fรผr die Erzeugung eines EditorValues gibt es keine direkte API. Was aber gehen sollte: nach dem Setzen des GomProviders via sc.setGomProvider(...) sollte sc.getDefaults() ein Dataobjekt liefern, das die entsprechenden EditorValues beinhaltet und  ร„nderungen ermรถglicht. Ein anschlieรŸendes sc.setDefaults(...) setzt die geรคnderten Werte als Vorgabewerte fรผr das GOM. Sprich, Vorgabewertbehandlung zwischen Templateaktualisierung und Skript Speichern durchfรผhren.

Fรผr einen Radiobutton kann ein Wert รผber die OptionFactory erzeugt werden, die man vom zugehรถrigen Forumularelement bekommt: fe.getOptionFactory().create("option");

GruรŸ

Stefan

Ahhhhh (Erleichterung)

Stefan Schulz schrieb:

... nach dem Setzen des GomProviders via sc.setGomProvider(...) ...

das "nach" dem Setzen scheint der entscheidende Hinweis zu ein, vielen DankSmiley Happy. Ich bin davon ausgegangen, dass schon die Erzeugung des GOM-Elements bereits das Default-Objekt anlegen mรผsste. Im Nachhinein habe ich das wahrscheinlich nicht in Betracht gezogen, weil es nicht in meinen Erstellungsprozess passt. Die Quelldaten, aus denen ich die GOM-Elemente erzeuge, enthalten natรผrlich aus die Defaults - da ist es logisch, auch gleich das Element mit den Defaults erzeugen. Nun muss ich

  1. Elemente erzeugen als GOM-Liste
  2. setGomProvider();
  3. Defaults der Elemente erzeugen

Also zwei Durchgรคnge. Aber Hauptsache, es geht รผberhaupt. Das probiere ich jetzt einmal aus.

GrรผรŸe,

Arndt

0 Kudos

Update: getDefaultValue() gibt erst nach dem Speichern :smileyalert: des Templates ein entsprechendes Objekt zurรผck. Das habe ich erst beim Anlegen eines neues Feldes gemerkt.

Vorher hatte ich zum Testen nur bestehende Masken mit GomList().clear() gelรถscht und dann die Eingabefelder neu erzeugt. Da gab es den DefaultValue() auch schon nach dem setGomProvider() (wahrscheinlich aus der alten Instanz des Formularelements).

Also:

  1. Elemente erzeugen als GOM-Liste
  2. setGomProvider();
  3. save();
  4. Defaults der Elemente abfragen, modifizieren
  5. save();
0 Kudos

Das ist tatsรคchlich sogar ein Fehler in der Implementierung, dass beim Setzen der (modifizierten) GOM-Definition die Vorgabewerte nicht korrekt angepasst werden.

Interne ID: #104471

Debugging by Doing Smiley Wink

Andere Frage: Wo ist denn die GOM-API ausfรผhrlicher dokumentiert? Die normale API-Dokumentation bricht irgendwo ab einer bestimmten Ebene ab (in etwa da, wo es von generischen GomElement hin zu den spezifischen Interfaces geht)

0 Kudos

Type a product name