Instanzen über den Index ansprechen

Alles was sich mit dem Thema dynamische XML Formulare auf Basis des LiveCycleDesigners beschäftigt
Antworten
Dennsen
Beiträge: 5
Registriert: 04.09.2012, 15:58

Instanzen über den Index ansprechen

Beitrag von Dennsen » 11.09.2012, 08:17

Moin,

Ich habe eine Frage zum ansprechen eines Feldes einer Instanz.

Ich habe eine dynamische Tabelle in der ich die Anzahl der Tage zwischen zwei Daten errechne und in einem Ergebnisfeld (Dauer) ausgebe. Dies passiert alles in einer Tabellenzeile ("rechnung"). Der Button für die Berechnung liegt außerhalb.

Das Ausrechnen der Anzahl der Tage ist kein Problem. Jedoch möchte ich eine Schleife, die diese Berechnung für jede Zeile/Instanz vornimmt.

Soweit bin ich bisher:

if(nDate2 > nDate1){
    for (var i = 1; i <= Tabelle1._rechnung.count; i++)
    Tabelle1.Fußzeile.Anzahl.rawValue = Tabelle1._rechnung.count; // Das ist nur für Testzwecke, um zu prüfen, ob die korrekte Anzahl an Instanzen ausgelesen wird. Funktioniert.
    Tabelle1.rechnung.Dauer.rawValue = Math.round((Number(nDate2) - Number(nDate1))/1000/60/60/24); // Hier liegt wahrscheinlich das Problem?! Irgendwie schaffe ich nicht, daß Textfeld "Dauer" mit den errechneten Werten zu befüllen. Spreche ich das Feld falsch an?
}
else{
    app.alert("Aktuelles Datum ist älter als " + nDate2Pr);
}

Bin für Hinweise dankbar.

Gruß
Dennsen

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

Instanzen über den Index ansprechen

Beitrag von FileAffairs » 13.09.2012, 18:53

Hallo Dennsen,

mit Tabelle1.rechnung.Dauer sprichst Du nur die 1. Instanz von Tabelle1.rechnung an. Am besten geht es so:

Code: Alles auswählen

var oNodes = Tabelle1.resolveNodes("rechnung[*]);
for (var i=0, numItems = oNodes.length;i<numItems;i++) {
 ...
}
Wichtig ist der "*" bei Rechnung, denn der bezieht sich auf alle Instanzen.

Lieben Gruß

Maruan Sahyoun | fileaffairs.de

Dennsen
Beiträge: 5
Registriert: 04.09.2012, 15:58

Instanzen über den Index ansprechen

Beitrag von Dennsen » 14.09.2012, 14:07

Hallo Maruan,

Danke für den Tipp, leider komme ich nicht ganz weiter. Anbei mal meine PDF. Vielleicht kannst du mal drüber schauen?!

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

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

Instanzen über den Index ansprechen

Beitrag von FileAffairs » 17.09.2012, 08:03

Hallo Dennsen,

Deine innere Schleife muss wie folgt lauten:

Code: Alles auswählen

for (var i=0, numItems = oNodes.length;i<numItems;i++) {
		Tabelle1.Fußzeile.Anzahl.rawValue = Tabelle1._rechnung.count;
		oNodes.item(i).Dauer.rawValue = Math.round((Number(nDate2) - Number(nDate1))/1000/60/60/24);
	}
Zudem musst Du natürlich noch die Datumsabfragen zu nDate1 und nDate2 mit in die Schleife nehmen, da Du sonst immer das Datum der ersten Zeile abfragst. Also

Code: Alles auswählen

var startDate = oNodes.item(i).DatumsUhrzeitfeld1.rawValue;
 var endDate = oNodes.item(i).DatumsUhrzeitfeld2.rawValue;
 ...
Hoffe Du kommst mit den Hinweisen klar.

Schönen Gruß

Maruan Sahyoun | fileaffairs.de

Dennsen
Beiträge: 5
Registriert: 04.09.2012, 15:58

Instanzen über den Index ansprechen

Beitrag von Dennsen » 17.09.2012, 09:29

Hallo Maruan,

Ich habe das Sktipt jetzt auf folgendes reduziert, aber leider noch immer ohne Erfolg.

Code: Alles auswählen

var oNodes = xfa.resolveNodes("Tabelle1.rechnung[*]");
for (var i=0, numItems = oNodes.length;i<numItems;i++)
var startDate = oNodes.item(i).DatumsUhrzeitfeld1.rawValue;
var endDate = oNodes.item(i).DatumsUhrzeitfeld2.rawValue;
var nDate1 = util.scand("yyyy-mm-dd", startDate);
var nDate2 = util.scand("yyyy-mm-dd", endDate);
oNodes.item(i).Dauer.rawValue = Math.round((Number(nDate2) - Number(nDate1))/1000/60/60/24);
 
Ich komme irgendwie nicht weiter.

Gruss
Dennsen

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

Instanzen über den Index ansprechen

Beitrag von FileAffairs » 17.09.2012, 10:48

Hallo Dennsen,

da fehlen geschweifte Klammern bei der for Schleife also

Code: Alles auswählen

var oNodes = xfa.resolveNodes("Tabelle1.rechnung[*]");
for (var i=0, numItems = oNodes.length;i<numItems;i++) {
  var startDate = oNodes.item(i).DatumsUhrzeitfeld1.rawValue;
  var endDate = oNodes.item(i).DatumsUhrzeitfeld2.rawValue;
  var nDate1 = util.scand("yyyy-mm-dd", startDate);
  var nDate2 = util.scand("yyyy-mm-dd", endDate);
  oNodes.item(i).Dauer.rawValue = Math.round((Number(nDate2) - Number(nDate1))/1000/60/60/24);
}

Dennsen
Beiträge: 5
Registriert: 04.09.2012, 15:58

Instanzen über den Index ansprechen

Beitrag von Dennsen » 17.09.2012, 15:39

Jup, das wars.

Vielen Dank für die Hilfe!!

Antworten