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