Bindung für neu erzeugte Zeilen

Ob nun dynamisch agierende Subformulare, oder einfach nur Textfelder...
Andon
Beiträge: 17
Registriert: 02.12.2008, 17:55

Bindung für neu erzeugte Zeilen

Beitrag von Andon » 22.07.2010, 10:15

Hallo Zusammen,

Mein Problem ist folgendes:

Ich habe eine Tabelle bei der ich mit Hilfe von addInstance und einem Button eine neue Zeile hinzufügen kann. Da unsere Firma mit SAP arbeitet haben wir zu dem Textfeld in der Zeile eine Bindung zu einer Variablen. Wenn ich nun eine Zeile hinzufüge wird die komplette Zeile übernommen mit Variable. Nun hätte ich gerne als Bindung natürlich zu einer neuen Zeile auch eine neue Variable. Meine Versuche waren bis jetzt leider alle erfolglos:

xfa.resolveNode("subform[1].Tabelle1.Zeile1[1].Textfeld1.drop").rawValue = "CHAR_BESCHREIBUNG";


Vielen Dank für die Hilfe.



Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Bindung für neu erzeugte Zeilen

Beitrag von FileAffairs » 26.07.2010, 19:39

Hallo Andon,

kannst Du evtl. mal ein Beispielformular beifügen? Arbeitest Du mit dem LiveCycle Designer oder der SAP Workbench?

Lieben Gruß

Maruan Sahyoun // fileaffairs.de

Andon
Beiträge: 17
Registriert: 02.12.2008, 17:55

Bindung für neu erzeugte Zeilen

Beitrag von Andon » 26.07.2010, 19:55

Hallo,

Ich arbeite normalerweise direkt auf der SAP Workbench. Beim direkten Bearbeiten im Livecycle habe ich noch zusätzlich das Problem, dass das Speichern nach Eingabe von Daten im Reader nicht möglich ist.
In dem Beispiel hat das Feld FS eine Bindung zu einer Variablen, wie du sehen wirst. Durch Drücken von '+' öffnet sich eine weitere Zeile. Hier soll nun automatisch eine neue Bindung zu einer anderen Variablen hergestellt werden, wie oben schon erwähnt klappt das bislang leider noch nicht.

Vielen Dank schon mal für die Mühe!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Bindung für neu erzeugte Zeilen

Beitrag von FileAffairs » 26.07.2010, 20:01

Hallo Andon,

zu welchem Element soll denn eine Bindung hergestellt werden? Ist da eine Namenskonvention dahinter oder wie ergibt sich das?

Schönen Gruß

Maruan Sahyoun // fileaffairs.de

Andon
Beiträge: 17
Registriert: 02.12.2008, 17:55

Bindung für neu erzeugte Zeilen

Beitrag von Andon » 26.07.2010, 20:22

Das ergibt sich dann noch, sobald klar ist wie man das umsetzen kann. In dem Fall habe ich mal eine Standardbindung für das Textfeld 1 'FS' festgelegt. Beim Erscheinen der 2. Zeile soll die Variable dann z.B. $record.CHAR_SONSTIGES1 heißen anstatt $record.CHAR_SONSTIGES. Bzw man startet mit $record.CHAR_SONSTIGES1 und zählt dann die Zahl hoch, das ist vorerst zweitrangig.

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Bindung für neu erzeugte Zeilen

Beitrag von FileAffairs » 26.07.2010, 20:27

Hallo Andon,

die übergebenen Daten stehen in xfa.record. Du könntest also schreiben

Code: Alles auswählen

this.rawValue = xfa.record.CHAR_SONSTIGES1.value
Gruß

Maruan Sahyoun // fileaffairs.de

Andon
Beiträge: 17
Registriert: 02.12.2008, 17:55

Bindung für neu erzeugte Zeilen

Beitrag von Andon » 26.07.2010, 20:41

OK, da ich noch nicht so viel Erfahrung mit dem LiveCycle habe bräuchte ich, da eine etwas genauere Eklärung. Vorallem wie die Logik für die 2. Zeile aussehen sollte, bzw wo ich den Eintrag im Script genau unterbringe.

Vielen Dank

Gruß

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Bindung für neu erzeugte Zeilen

Beitrag von FileAffairs » 26.07.2010, 20:49

Hallo Andon,

das ganze dachte ich als Beispiel für ein Script im Feld FS, wobei die Scriptsprache als JavaScript eingestellt werden muss.

Ich denke mir nun aber, das es irgendein Schema geben muss wie die Daten aus der Datenstruktur in das Formular mappen. Wenn es sich um Tabellendaten handelt kann ich mir durchaus vorstellen, das bereits so aus SAP zu übergeben, das die Daten immer dieselben Namen haben. Dann würdest Du immer dieselbe Referenz verwenden, wobei beim Befüllen ein Automatismus greift dann auch die nächste Instanz eines Datenelementes zu nehmen.

Ansonsten kann man das natürlich auch zu Fuß zusammensetzen falls sich die Datenelementnamen aus SAP unterscheiden sollten.

Wenn Du Beispieldaten hättest könnte ich Dir ein spezifisches Beispiel geben. Ansonsten wäre es ganz gut wenn Du mal die Datenstruktur aufzeigst.

Lieben Gruß

Maruan Sahyoun // fileaffairs.de

Andon
Beiträge: 17
Registriert: 02.12.2008, 17:55

Bindung für neu erzeugte Zeilen

Beitrag von Andon » 26.07.2010, 21:03

Mein Problem ist ja, dass in jeder Zeile das Feld 'FS' dann die selbe Referenz hat. In dem Fall zu CHAR_SONSTIGES1. D.h. wenn ich einen Wert in das Feld eingebe, wird er für die nächsten Zeilen direkt übernommen. Wenn ich in SAP nun fünf Felder anlege, CHAR_SONSTIGES1-5, muss ich nun einen Weg finden, diese den Zeilen mit dem verschiedenen Index zuzuweisen. So dass Zeile1 Feld 'FS' zu CHAR_SONSTIGES1 gehört, Zeile 2 Feld 'FS' zu CHAR_SONSTIGES2 ... Am liebsten würde ich das im Script zuweisen. Nur die Zeile: this.rawValue = xfa.record.CHAR_SONSTIGES1.value weißt, laut meinem Verständnis nur der ersten Zeile das Feld zu bzw. jeder weiteren dasselbe Feld.

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Bindung für neu erzeugte Zeilen

Beitrag von FileAffairs » 26.07.2010, 21:20

Hallo Andon,

also Du kannst eigentlich auch in SAP mit denselben Namen arbeiten wenn es sich um eine Tabelle handelt als z.B. CHAR_BESCHREIBUNG. Die einzelnen Werte werden dann als Instanzen gespeichert. Wenn es aber wie Du schreibst individuelle Felder sind dann hier mal ein kleines Beispiel wobei ich davon ausgehe das Du die Daten aus SAP in einem Formular anzeigen möchtest.

Felder in SAP CHAR_BESCHREIBUNG1-5

Dann kannst Du auf das initialize Event des FS Feldes folgendes Script legen (aus dem Kopf nicht getestet!):

Code: Alles auswählen

// Ermittle die Instanz des Feldes FS im Container und addiere
// 1 dazu, da die Instanzzählung mit 0 beginnt
var instanz = this.parent.instanceIndex + 1;

// Baue die Referenz auf den Knoten auf
var oNode = xfa.resolveNode("xfa.record.CHAR_BESCHREIBUNG"+instanz);

// lese den Wert des XML Knotens und schreibe diesen in das Feld
this.rawValue = oNode.value;

Gruß

Maruan Sahyoun // fileaffairs.de

Antworten