julia
I'm new here

Wie komme ich an die Eingabekomponenten / das Formular einer Absatzvorlage per API

Jump to solution

Hallo zusammen,

ich möchte per API aus einem SectionTemplate die Eingabefelder auslesen und in eine andere SectionTemplate übertragen.

Ich habe angenommen, so geht es:

GomEditorProvider form = sourceSectionTemplate.getMetaFormData().getForm();

targetSectionTemplate.setLock(true);

targetSectionTemplate.getMetaFormData().getForm().addAll(form);

targetSectionTemplate.save();

targetSectionTemplate.setLock(false);

Ich scheitere schon daran, dass ich ein JavaHeap Error erhalte Smiley Sad!

Und wenn ich die Anzahl der Form Elemente ausgeben, kommt 13 raus, obwohl das Template nur 1 Eingabefeld hat.

Ist der Ansatz total falsch? Wie komme ich an die Eingabefelder bzw. das Formular einer Absatzvorlage und wie kann ich sie in eine andere übertragen.

Danke im  Voraus und Gruß

Julia

1 Solution

Accepted Solutions

Hallo Julia,

das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:

targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());

LG, Peter

Peter

View solution in original post

0 Kudos
5 Replies
Nitros
I'm new here

Denkfehler. Smiley Happy

Vorlagen (magenta) haben keine Eingabefelder. Inhalte (grün) haben diese. Was man hier braucht ist also eine Section und kein SectionTemplate Objekt. Beachte, dass es zu einem Absatz mehre Inhalte geben kann. Prinzipiell sind sie im DataProvider Interface definiert. Section implementiert dieses.

Der Rest sollte recht einfach sein:

public Set<FormField<?>> getFields(final DataProvider dataProvider, final Language language){

    final FormData formData = dataProvider.getFormData();

    final Spliterator<GomFormElement> spliterator = formData.getForm()

        .forms()

        .spliterator();

    return StreamSupport.stream(spliterator, false)

        .map(GomFormElement::name)

        .map(fieldName -> formData.get(language, fieldName))

        .collect(Collectors.toSet());

}

0 Kudos

Nein, ich brauche tatsächlich das Kopieren des Formulare auf Templateebene.

Der Unterschied zwischen Template (magenta) und Inhalte (grün) ist mir bekannt Smiley Wink!

Ich möchte nicht die Inhalte kopieren, sondern die Formulare, also Eingabefelder (nicht die Inhalte, die sich in den Eingabefeldern befinden!)

Kann mir hier Jemand helfen?

Danke im Voraus

0 Kudos

Hallo Julia,

das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:

targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());

LG, Peter

Peter
0 Kudos

Ach so, verstehe.

Wenn es tatsächlich einfach überschrieben werden soll, dann würde ich getGomSource und setGomSource probieren. Das scheint dem Formular Tab zu entsprechen.

Ansonsten sehe ich in der Doku, GomEditorProvider extends GomList<GomElement>. Bei GomList scheint es sich um eine Implementierung vom java.util.List zu handelt. Habt ihr einmal ausprobiert am GomEditorProvider einfach die get() und add() Methode zu nutzen?

Also...

GomEditorProvider provider = sectionTemplate.getGomProvider();

GomElement element = provider.get(0);

otherSectionTemplate.getGomProvider().add(element);

Das scheint zu funktionieren.

Edit: Ninjaed. Smiley Sad

Hallo Peter und Jens,

danke für die schnellen Rückmeldungen.

Beide Varianten funktionieren super, wobei man beachten muss, dass bei der ersten das komplette Formular überschrieben wird und somit die alten Felder weg sind.

Und bei der zweiten Variante nicht vergessen den GomProvider wieder zu setzen.

GomEditorProvider otherProvider = otherSectionTemplate.getGomProvider();

otherProvider.add(element); 

otherSectionTemplate.setGomProvider(otherProvider);

Danke und Gruß

Julia

0 Kudos