Seite 1 von 2
Neue Instanz - Neue Feldnamen?
Verfasst: 28.10.2014, 11:59
von AminoX
Hallo,
ich mache hier nochmals einen Thread auf, da ich glaube dass dies die Lösung meiner Problem wäre..
Ich habe eine Tabelle in meinem Formular die man verfielfältien kann.
Ist es per Script etc. möglich neue Feldnamen für die einzelnen Felder zu erstellen, sobald man die Tabelle erweitert? So dass ich in meinem XML im anschluss nur eindeutig zuordenbare Werte habe.
Z.B: die unerweiterte Tabelle hat ein Feld: Formular1.Seite1.Tabelle1.WERT1
Sobald man nun die Tabelle dupliziert/verfielfältigt, sollten die gleichen Felder ein wenig anders heissen:
Z.B: Formular1.Seite1.Tabelle1.WERT11
So dass ich hinterher im XML lauter eigenständige Werte habe:
Wert1
Wert11
Wert111 usw...
Ist es möglich?
Danke und LG
AminoX
Neue Instanz - Neue Feldnamen?
Verfasst: 05.11.2014, 15:50
von daibutsu
Genau das suche ich auch schon lange. Meine Script-Experimente waren leider bislang nicht erfolgreich. Die "Lösung", eine (in der Praxis hoffentlich ausreichende) Anzahl identischer Seiten zu erstellen, die Feldnamen pro Seite entsprechend durchzunummerieren (bei Formularen mit vielen Feldern händisch eine Sch...arbeit), die Seiten dann auszublenden und nach Bedarf sichtbar zu machen, funktioniert zwar, ist aber ausgesprochen unelegant, arbeitsintensiv und fehleranfällig.
Ich bin sicher, dass es dafür eine "richtige" Lösung gibt - ist aber wohl ein Fall für einen JS-Experten.
Neue Instanz - Neue Feldnamen?
Verfasst: 05.11.2014, 19:55
von radzmar
Um hier mal mit einige Missverständnissen aufzuräumen.
1. XML ist so definiert worden, dass sich Elemente wiederholen können. Davon lebt ja letztlich die Interaktivität von XFA-Formularen.
Sich wiederholende Elemente werden über einen Index angesprochen, so wie bei den sich im Formular wiederholenden Objekten auch.
Um diese Instanzen der Elemente anzusprechen benutzt man XPath, was dann z.B. so aussieht: /Firma/Abteilung[4]/Name (gibt den Wert des Elements Name in der 4. Instanz von Abteilung unterhalb von Firma zurück)
2. Wie die Daten von XFA-Formularen strukturiert werden hängt davon ab, ob ein XML-Schema (XSD) benutzt wird oder nicht.
Mit einem Schema landen nur die Daten von Elementen in der XML, die im Schema definiert und an Objekte im XFA-Formular gebunden wurden.
Zudem gibt das Schema immer die Strukturierung der XML vor.
Ohne Schema landet oft alles in der XML, das eine Bindung aufweist, also auch alle unbenannten Objekte, Teilformulare oder Textfelder die gar nicht relevant sind usw.
Die Struktur der XML leitet sich hier direkt aus der Hierarchie des XFA-Formulars ab, kann also sehr verschachtelt und kompliziert erscheinen.
3. Wer Daten von sich wiederholenden Elementen dennoch individuell benamt haben möchte oder die Daten irgendwie sonst gefilter, umbenannt oder verändert haben möchte, muss die XML-Daten transformieren.
Das macht man mittels XSLT-Stylesheet, dass man für den Datenimport und -export einer Datenverbindung hinterlegen kann.
Die 'richtige' Lösung hängt von der jeweiligen Aufgabenstellung ab, aber eine 'gute' Lösung ist zumeist die Verwendung eines XML-Schemas.
Wer hier den Einstieg sucht, sollte unbedingt dieses Buch lesen:
https://www.galileo-press.de/einstieg-in-xml_3467/
Neue Instanz - Neue Feldnamen?
Verfasst: 05.11.2014, 19:58
von radzmar
Neue Instanz - Neue Feldnamen?
Verfasst: 05.11.2014, 19:58
von radzmar
Neue Instanz - Neue Feldnamen?
Verfasst: 06.11.2014, 23:53
von daibutsu
Danke für die Erläuterung. Bevor ich - evtl unnötig - in die XSLT-Wissenschaft einsteige:
Ich habe ein Formular mit einem Stammblatt und n untereinander identischen Folgeseiten. Dabei entspricht n der Anzahl der ausgefüllten Zeilen einer dynamischen Tabelle auf dem Stammblatt. Zu jeder Zeile wird je eine Instanz der Folgeseite benötigt, mit den Daten der jeweiligen Tabellenzeile als Kopf und einem Haufen zusätzlicher Felder.
Wenn ich die Folgeseiten einfach kopiere, haben sie identische Feldnamen. Nun tritt aber das Phänomen auf, dass diese Folgeseiten irgendwie zusammenhängen, so dass ein Eintrag auf einer Seite auch in dem gleichnamigen Feld auf allen anderen erscheint. Ich dachte erst, dass das mit den auf diesen Seiten vorhandenen "global" XOR-verknüpften Kontrollkästchen zusammenhängt, aber nada, das Problem blieb nach dem Rausschmiss derselben bei den anderen Feldern bestehen - obwohl die Bindung dieser Felder explizit auf "Name verwenden" steht, nicht auf "global". Beseitigt war das Problem erst, nachdem ich die Feldnamen auf allen Instanzen manuell durchnummeriert hatte, also z. B. auf der Instanz Nummer 3 alle Feldnamen mit einer 3 ergänzte.
Anstatt nun quasi vorsorglich einen Haufen Kopien anzulegen und die manuell durchzunummerieren zu müssen, wäre es ja sinnvoller, das eine Automatik nach Bedarf erledigen zu lassen. Aber wie?
Wäre dieses Problem tatsächlich mit XSLT lösbar? Es geht ja nicht primär um Datenim- und Export.
Neue Instanz - Neue Feldnamen?
Verfasst: 07.11.2014, 17:37
von armine
Wer will den etwas kopieren, wenn man mit Instanzen arbeiten kann?
Schau mal, ob du so zurecht kommst.
vg armine
Neue Instanz - Neue Feldnamen?
Verfasst: 08.11.2014, 09:21
von AminoX
Vielen Dank für alle eure Antworten!
Ich hatte für mich erstmal festgestellt, dass meine Datei ein totaler Müllhaufen war. Hatte sie aus einer Word Vorlage kopiert, und dann drei Monate lang alles "zusammengeflickt". Sie hatte viele ineinander verschachtelte Tabellen, was dazu geführt hat, dass meine XML Datei so gross wurde, dass Excel beim einlesen abgestürzt ist.
Nun habe ich mein in den Monaten erlangtes Wissen benutzt um mein Formular komplett neu im Fliesstext aufzubauen ohne eine einzige Tabelle zu nutzen. Das hat die Qualität meiner ausgegebenen XML dramatisch erhöht. Oder sagen wir mal die "Übersichtlichkeit" für den Laien...
Daraufhin hatte ich dann gute Erfolge mit dem einlesen der XML in Excel (als eigene komplette Tabelle) und Querverweisen in Excel auf die Zellen die ich benötige. Da Formeln/Verweise aber immer irgendwie doof sind, wars auch nich so ganz das gelbe vom Ei.
Zwischenzeitlich bin ich aber auf ein Script von radzmar in seinem Blog gestossen, dass die XML per Stream in Blanko Formulare laden kann und habe nun beschlossen, dass mein Folgeformualr kein Excel mehr sein soll, sondern auch ne PDF. Insbesondere weil ich eh angefixt bin von den Möglichkeiten hier .-)
Deswegen gehts jetzt weiter im "Javascript im LCD" Forum
http://www.acronaut.de/forum34/5568.html
Ich glaube auch, dass man mit den Schema Dateien und den XSLT Transformationen, quasi alles hinbekommen kann, dass is jedoch sehr komplex, und ich werde mir professionelle Hilfe holen, sobald ich soweit bin und meine Formulare Ihre schlussendliche Form erreicht haben
Gruss
AminoX
Neue Instanz - Neue Feldnamen?
Verfasst: 11.11.2014, 11:39
von daibutsu
Hallo armine,
Wer will denn etwas kopieren, wenn man mit Instanzen arbeiten kann
Ganz genau ...
Herzlichen Dank - das geht in die richtige Richtung. "Prinzipiell" hatte ich schon so etwas versucht, hab mich da aber irgendwo verheddert, weshalb es nicht wie gewünscht funktionierte.
In meinem konkreten Fall gibt es aber noch ein Problem: Auf den Folgeseiten sind Kontrollkästchen*, die gruppenweise per XOR verknüpft sind, also notgedrungen "global". Das heißt aber natürlich, dass diese Kontrollkästchen auf allen Folgeseiten zusammenhängen, weil sie den gleichen Namen haben - und soweit ich Dein Muster analysiert habe, wäre das da auch so. Wie kriege ich die im Rahmen Deines Musters isoliert?
* Optionsfeldgruppen sind da ungünstig, weil das Layout leider so gehalten werden muss, dass die Formulare auch leer ausgedruckt und händisch ausgefüllt werden können, auch muss eine fälschlich angeklickte Gruppe wieder geleert werden können, indem man das aktivierte Kästchen nochmal anklickt. Letzteres geht ja bei LCD-Optionsfeldern afaik nicht (heißt: ich kenne dafür im LCD keine Lösung ...).
Neue Instanz - Neue Feldnamen?
Verfasst: 11.11.2014, 12:52
von armine
Hallo daibutsu,
deine Behauptung "... die gruppenweise per XOR verknüpft sind, also notgedrungen 'global'" will ich nicht glauben. Das muss sich auch durch Code regeln lassen.
Kannst du ein Muster hochladen?
vg armine