Bedingtes Kopieren von Feldern zwischen Tabellen

Fragen und Antworten rund um das Thema JavaScript im LiveCycleDesigner
Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 17.02.2011, 09:07

Hallo!

Ich hab folgendes Problem! Mein Formular enthält zwei Tabellen. In der ersten Tabelle werden Risikoelemente in eine Matrix eingetragen. Sobald ein Element abgearbeitet wurde, wird das Feld Status auf "Geschlossen" gesetzt. Die ersten beiden Elemente sollen dann in die zweite Tabelle übertragen werden.

Um dieses Problem zu lösen, hab ich im Feld Status mit dem EXIT-Event verschiedene if-Anweisungen durchprobiert. Leider immer ohne Erfolg.

Kann mir jemand einen Tipp geben, woran das liegen könnte?

Danke schon mal im Vorraus!

Wolfgang

 
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

KorvinOE
Beiträge: 38
Registriert: 24.03.2010, 12:50

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von KorvinOE » 17.02.2011, 11:41

Hallo Wolfgang,

hier, schau mal...

VG Alex
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 17.02.2011, 11:53

Hey Alex!

Danke für die Lösung :)! Bin noch ein Neuling in Sachen LC Designer und Java-Script!

Für was brauch ich denn hier die "xfa.resolveNode" Anweisung?

VG

Wolfgang

KorvinOE
Beiträge: 38
Registriert: 24.03.2010, 12:50

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von KorvinOE » 17.02.2011, 12:14

Hi Wolfgang,

Die Info dafür findest du, wenn du im LCD auf "F1" drückst. Dort kannst du darüber unter "Skripterstellung"->"Skripterstellung mit LiveCycle Designer"->
"Objekte in Berechnungen und Skripten referenzieren" genauer nachlesen.

Ein Ausschnitt daraus:

Code: Alles auswählen

    xfa.form.form1.#subform.TextField1.rawValue
    xfa.form.form1.#subform[0].TextField1.rawValue

FormCalc erkennt die oben angegebene  vollständig qualifizierte Referenz-Syntax und wertet sie korrekt aus. Wenn  Sie mit JavaScript auf denselben Wert zugreifen möchten, müssen Sie eine der  folgenden Varianten der Skriptmethode resolveNode  verwenden:

    xfa.resolveNode("xfa.form.form1.#subform.TextField1").rawValue;
    xfa.resolveNode("xfa.form.form1.#subform[0].TextField1").rawValue;
VG Alex

Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 18.02.2011, 08:00

Danke, soweit hab ich das verstanden :)!

Leider hab ich aber beim Testen festgestellt, dass meine Vorgehensweise nur bedingt funktioniert. Das Skript wird wohl nur für die erste Zeile ausgeführt, bei jeder neu hinzugekommenen Zeile, deren Status als "Geschlossen" gewählt wird, werden die Felder Abweichung und Ref-Nr nicht übernommen!

Wie sollte man da am elegantesten vorgehen? Mir würde da nur zweidimensionale Arrays einfallen mit 7 Spalten (bis zur Spalte Status) und n Zeilen!

 

 

KorvinOE
Beiträge: 38
Registriert: 24.03.2010, 12:50

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von KorvinOE » 18.02.2011, 11:41

Hallo Wolfgang,

ich bin mir nicht sicher, dass ich deine Idee ganz verstanden habe. Aber ich habe dein Formular so umgebaut, wie ich es mir vorgestellt hab. Schau mal, vielleicht bringt es dich weiter...
Änderungen die ich vorgenommen habe:
1. Zeile[0] und Zeile[1] auf Kopfzeile[0] und Kopfzeile[1] geändert.
2. gebliebene Zeile als "Ausgeblendet" eingestellt (diese Zeile wird immer kopiert).
3. "exit" Skript noch mal geändert (hier siehst du wie man auf die laufende Zeile und auf die neue Zeile in der unteren Tabelle zugreifen kann).

VG Alex )
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 18.02.2011, 13:17

Klasse! Es funktioniert so, wie das wollte! Muss mir aber erstmal den ganzen Ablauf des Scripts ansehen!

Danke nochmal für deine Hilfe :)!

Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 25.02.2011, 12:55

Irgendwie funktioniert das Skript zwar, aber verstehen tu ich die einzelnen Befehle nicht so ganz:
[fontsize=2]
this.access [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] "readOnly";[/fontsize]

[fontsize=2]Warum brauch ich hier die "readOnly" Anweisung?[/fontsize][fontsize=2]
[line]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] newZeile [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] xfa.resolveNode("Formular1.Seite2.TF3.Tabelle4.Zeile1[0]").instanceManager.addInstance(0);[/fontsize]

[fontsize=2][/fontsize][fontsize=2]Welche(r) Wert(e) werden an die Variable newZeile übergeben?
[line]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] zIndex [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] newZeile.index;[/fontsize]

[fontsize=2]Was bewirkt die Methode index?[/fontsize][fontsize=2]
[line]
[/fontsize]

[fontsize=2][fontsize=2] 
[/fontsize][/fontsize]

KorvinOE
Beiträge: 38
Registriert: 24.03.2010, 12:50

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von KorvinOE » 28.02.2011, 10:19

Hallo Wolfgang,

ich war leider letzte Woche sehr beschäftigt bei der Arbeit und habe den Forum nicht angeschaut...

Code: Alles auswählen

this.access = "readOnly";
Dadurch kann man den Feld "Status" nicht mehr ändern. Da in dem Formular kein Skript für das Löschen von den Zeilen noch existiert, wird immer eine neue Zeile in die untere Tabelle geschrieben, wenn man den Status wieder editiert. Dadurch werden mehrere Zeilen für eine Aufgabe in die untere Tabelle geschrieben.

Code: Alles auswählen

var newZeile = xfa.resolveNode("Formular1.Seite2.TF3.Tabelle4.Zeile1[0]").instanceManager.addInstance(0);
Hier wird eine neue Zeile erstellt und das Objekt an die Variable newZeile übergeben. Jetzt kann man mit dieser Variable auf diese Zeile direkt zugreifen.

Code: Alles auswählen

var zIndex = newZeile.index;
Index ist ein Nummer einer Instance. Davor wird eine neue Zeile erstellt. Dadurch hast du schon zwei Objekte von "Zeile1" - Zeile1[0] und Zeile1[1]. Wenn man den Index in die Anweisung [fontsize=2]xfa.resolveNode("Formular1.Seite2.TF3.Tabelle4.Zeile1[" + index + "]") rein steckt, kann man auf die entsprechende Zeile greifen.

VG Alex
[/fontsize]

Kenji
Beiträge: 6
Registriert: 04.02.2011, 08:52

Bedingtes Kopieren von Feldern zwischen Tabellen

Beitrag von Kenji » 28.02.2011, 13:37

KorvinOE hat geschrieben:Hallo Wolfgang,

ich war leider letzte Woche sehr beschäftigt bei der Arbeit und habe den Forum nicht angeschaut...

Code: Alles auswählen

this.access = "readOnly";
Dadurch kann man den Feld "Status" nicht mehr ändern. Da in dem Formular kein Skript für das Löschen von den Zeilen noch existiert, wird immer eine neue Zeile in die untere Tabelle geschrieben, wenn man den Status wieder editiert. Dadurch werden mehrere Zeilen für eine Aufgabe in die untere Tabelle geschrieben.
Hab ich verstanden. Ist ja eigentlich auch logisch!

Code: Alles auswählen

var newZeile = xfa.resolveNode("Formular1.Seite2.TF3.Tabelle4.Zeile1[0]").instanceManager.addInstance(0);
Hier wird eine neue Zeile erstellt und das Objekt an die Variable newZeile übergeben. Jetzt kann man mit dieser Variable auf diese Zeile direkt zugreifen.
Wird die Variable newZeile jedes mal neu erstellt oder nur überschrieben? Welchen beispielhaften Wert hat die Variable newZeile? Ist das die genaue Bezeichnung des Knotens, also der neuen Zeile?

Code: Alles auswählen

var zIndex = newZeile.index;
Index ist ein Nummer einer Instance. Davor wird eine neue Zeile erstellt. Dadurch hast du schon zwei Objekte von "Zeile1" - Zeile1[0] und Zeile1[1]. Wenn man den Index in die Anweisung [fontsize=2]xfa.resolveNode("Formular1.Seite2.TF3.Tabelle4.Zeile1[" + index + "]") rein steckt, kann man auf die entsprechende Zeile greifen.
Den letzten Schritt deiner Ausführung hab ich auch verstanden! Ich versteh nur nicht, wie aus der Variable newZeile in Verbindung mit der Methode index der Laufindex zIndex (von 0 bis x) entsteht!
VG Alex
[/fontsize]

Antworten