- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Wie komme ich an die Eingabekomponenten / das Formular einer Absatzvorlage per API
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 !
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
- Labels:
-
Developers
-
Knowledgebase
-
Project Usage
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Julia,
das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:
targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());
LG, Peter
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Denkfehler.
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());
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Nein, ich brauche tatsรคchlich das Kopieren des Formulare auf Templateebene.
Der Unterschied zwischen Template (magenta) und Inhalte (grรผn) ist mir bekannt !
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Julia,
das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:
targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());
LG, Peter
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

