Search the FirstSpirit Knowledge Base
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
Hallo Julia,
das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:
targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());
LG, Peter
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());
}
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
Hallo Julia,
das geht am einfachsten indem du den Quelltext der Formularbeschreibung in das Ziel kopierst:
targetSectionTemplate.setGomSource(sourceSectionTemplate.getGomSource());
LG, Peter
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.
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