XML-Datenbindung in Abhängigkeit deaktivieren

Alles was sich mit dem Thema dynamische XML Formulare auf Basis des LiveCycleDesigners beschäftigt
Antworten
lpix
Beiträge: 23
Registriert: 29.01.2013, 08:10

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von lpix » 11.02.2014, 14:50

Hallo zusammen!

Ich stehe hier gerade vor einem neuen Problem beim Datenexport per XML mit Email-Versand. An sich funktioniert dieser.

Ich möchte nun allerdigs in Abhängigkeit von bestimmten Feldwerten ein Teilformular von der XML-Weiterverarbeitung ausschließen und hatte mich schon gefreut, die Präsenz des Teilformulars einfach auf "inaktiv" zu setzen (also von der Formularverarbeitung komplett auszuschließen). Dazu wollte ich eigentlich mit

Code: Alles auswählen

Teilformular.presence = "...";
arbeiten.

In der Skriptreferenz habe ich nun allerdings gesehen, dass ich ausgerechnet "inaktiv" nicht per Javascript setzen kann - zumindest ist das nicht dokumentiert. Und Versuche ins Blaue mit "incative", "disabled" und "deactivated" & Co. haben leider auch nix gebracht.

Funktioniert meine Vorgehensweise grundsätzlich überhaupt so oder sollte man besser einen anderen Weg gehen? Vielen Dank für Eure Hilfe!

VG
Lpix

landei2003
Beiträge: 114
Registriert: 25.02.2011, 19:08

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von landei2003 » 11.02.2014, 17:39

Hallo,

es ist nicht möglich per JavaScript die Bindung(Export) der Felder zu steuern.
Man kann hier mit Instanzen der Teilformulare arbeiten, was nicht da ist kann
auch nicht exportiert werden:-)







Grüße
Landei

lpix
Beiträge: 23
Registriert: 29.01.2013, 08:10

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von lpix » 11.02.2014, 22:09

Wie genau meinst du das?

Die Datenstruktur in meinen Teilformularen ist allerdings gänzlich unterschiedlich. Auch haben die Teilformulare differenzierte Namen die so erhalten bleiben müssen.

lpix
Beiträge: 23
Registriert: 29.01.2013, 08:10

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von lpix » 12.02.2014, 09:48

Also das mit den Instanzen funktioniert leider nicht. Denn im Hauptformular müsste ja schon die eigentliche Datenbindung vorhanden sein, damit diese dann in die Instanzen übernommen wird. Ich kann dann zwar die Instanz bei Bedarf ein und ausblenden und damit die Datenbindung der Instanz entfernen, aber die Datenbindung im Hauptformular bleibt ja immer vorhanden - und genau das sollte eben nicht sein.

Kennt irgendjemand einen Befehl, mit dem man ein Teilformular oder eine Tabelle komplett entfernen kann. Vielleicht kann man es über den Weg lösen...

landei2003
Beiträge: 114
Registriert: 25.02.2011, 19:08

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von landei2003 » 12.02.2014, 18:10

Hallo,

/Quote:Ich möchte nun allerdigs in Abhängigkeit von bestimmten Feldwerten ein Teilformular von der XML-Weiterverarbeitung ausschließen.

Das funktioniert mit Instanzen einwandfrei ohne die Benamung der Teilformulare zu ändern.
Was verstehst du unter Datenbindung im Hauptformular? Es ist möglich die Datenbindung
für ein einziges Feld zu setzen das als Child-Element unter dutzenden Teilformularen/Seiten etc. liegt.
Häng doch mal ein Beispiel an, ist einfacher...






Grüße Landei



Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von radzmar » 12.02.2014, 21:13

Also man kann die Bindungen zwar nicht zur Laufzeit ändern, aber man kann das Data DOM manipulieren.

Dafür gibt es verschiedene Änsätze.
Einer wäre ein XSLT-Stylesheet, das die Exportdaten prüft und nach gewissen Kriterien formatiert.
Das ist aber alles andere als schnell gemacht, denn XSLT ist knifflig und hat eine ziemlich steile Lernkurve.

Ein andere Ansatz ist die Löschung der gewünschten Daten vor dem Export mit den Bordmitteln.
Dafür nimmt man die remove() Methode, die Nodes entfernen kann.
Dieses Beispiel löscht die Node "TF2" unter "Formular1.Seite" aus dem Data DOM.

Code: Alles auswählen

xfa.datasets.data.Formular1.Seite.nodes.remove(xfa.datasets.data.Formular1.Seite.nodes.namedItem("TF2"))
Nun ja, die Node ist dann aber ganz und gar weg und mit ihr auch alle Daten, die Sie mal bereit hielt.
Damit das nicht so bleibt, braucht man also – na? – genau ein Backup!
Das kann man alles mit ein paar Zeilen Code erreichen.

Dieses Beispiel erstellt also ein Backup des Data DOM, entfernt dann die gewünschte Node aus den zu exportierenden Daten, sendet die Daten als Mail und stellt dann das ursprüngliche Data DOM aus dem Backup wieder her.

Code: Alles auswählen

//Variablen
var dataDOM = xfa.datasets.data, //Data DOM
	backupXML = dataDOM.saveXML(), //Backup des kompletten Data DOM
	backupData = xfa.datasets.createNode("dataGroup", "backupDOM"), //Datennode für Backup erstellen
	backupNode = xfa.datasets.nodes.namedItem("backupDOM"); //Temporäres Data DOM suchen

//Backup mit Daten befüllen
backupData.loadXML(backupXML);

//Temporäres Data DOM unter xfa.datasets anlegen
//Zuerst evtl. vorhandene Backups entfernen ... 
while (backupNode !== null) {
	xfa.datasets.nodes.remove(backupNode);
	backupNode = xfa.datasets.nodes.namedItem("backupDOM");
}
// ... dann Backup auslagern.
xfa.datasets.nodes.append(backupData);

//Data DOM für Export von ungewünschter Node bereinigen
xfa.datasets.data.Formular1.Seite.nodes.remove(xfa.datasets.data.Formular1.Seite.nodes.namedItem("TF2"));

//Data DOM exportieren z.B. per Mail-Anhang
var cEmailURL = "mailto:user@domain.org?subject=Meine Daten&body=Hallo, hier kommen meine Daten.";
event.target.submitForm({cURL: encodeURI(cEmailURL), cSubmitAs:"XML", cCharSet:"utf-8"});

//Data DOM aus Backup wiederherstellen
xfa.datasets.data.loadXML(xfa.datasets.nodes.namedItem("backupDOM").saveXML(), true, true);

lpix
Beiträge: 23
Registriert: 29.01.2013, 08:10

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von lpix » 12.02.2014, 21:45

Hallo Landei2003 und Radzmar, danke schon einmal für Eure Postings! Ich werd' mich morgen gleich mal ransetzen und den Lösungsvorschlag von Radzmar versuchen zu adaptieren. Ich setzte dann auch noch mal ein Beispiel rein.
@Radzmar: Man, da hast Du Dir ja richtig Arbeit gemacht mit Deinem Lösungsvorschlag - toll! :D

lpix
Beiträge: 23
Registriert: 29.01.2013, 08:10

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von lpix » 13.02.2014, 09:34

Hallo Radzmar,

ich hab heute Dein Skript angewendet - funktioniert natürlich suuuper! Freu mich wie ein Schneekönig, dass damit jetzt alles genauso funktioniert, wie ich es mir vorgestellt habe. :D Vielen Dank noch mal!

Hab auch noch mal ein Beispiel-PDF mit einem Ausschnitt aus meinem Formular beigefügt. Eine Sache habe ich allerdings festgestellt: Nach dem Email-Versand sind die Formularfelder in der PDF-Ansicht alle leer, obwohl das Wiederherstellen aus dem Data DOM funktionierte. (zumindest sind die Daten wieder da in einem nachgelagerten XML-Export per Email)


@Landei2003
In dem PDF siehst Du auch noch mal die Grundstruktur. Im TF "KundenGeratedaten" werden unter Umständen nicht alle Daten eingegeben. Wenn z.B. Betriebsstunden leer bleibt, soll die ausgeblendete Bindung "tbl_betriebsstundenverlauf" nicht in die XML-Daten übergeben werden.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Aragui
Beiträge: 36
Registriert: 30.07.2014, 14:01

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von Aragui » 16.09.2015, 13:13

Hallo zusammen,

vielen Dank zunächst für so ein tolles Skript. Es hat auf Anhieb sofort funktioert! :-)

Ist es auch möglich, nur einzelne Teilformulare in die abzusendende Datei zu exportieren? Würde gerne einzelne TF ansprechen (fix)-sprich, pro Schaltfläche wäre es bei mir ein festes Formular.

Beste Grüße, Aragui!

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

XML-Datenbindung in Abhängigkeit deaktivieren

Beitrag von radzmar » 21.09.2015, 19:59

Um nur die Daten einer bestimmten Data-Node zu senden, muss man die submitForm()-Methode benutzen.

Code: Alles auswählen

event.target.submitForm({
		cURL: cEmailURL,
		cSubmitAs: "XML",
		oXML: "TeilformularName"
	});

Antworten