Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Data repeats in multiple instances, please help.

Avatar

Level 1

Hi,

I have been working for days on this form using Adobe Livecycle 9 ES2 and need some help.  I am new to LiveCycle and JavaScript, but as you'll see, I've learned a lot .

I have a repeatable subform (GoalSheet) that totals values based on a dropdown:

var len = form1.GoalSheet.Table6._Others.count;

var sum = 0.0;

this.rawValue=0;

if (form1.GoalSheet.Table6.First.Funding1.rawValue==1)

{

sum += form1.GoalSheet.Table6.First.Cost.rawValue;

}

for (var i = 0; i < len; i++){

if (form1.GoalSheet.Table6.resolveNode("Others[" + i + "]").fsource.rawValue==1) {

sum += form1.GoalSheet.Table6.resolveNode("Others[" + i + "]").Cost2.rawValue;

}

}

this.rawValue = sum;

This works beautifully.  However, when the user creates a second instance of GoalSheet, it doesn't work. 

Any suggestions?

A link to the form is here:  https://www.dropbox.com/s/94t48cw2ywcxpcq/4-20%20Draft_total_formcalc_pagination_safetynet%20v126.pd...

Thanks for any and all help!

Michael

1 Accepted Solution

Avatar

Correct answer by
Level 10

Hi,

as the GoalSheet is a repeatable instance as the Others row you have to loop through all its instanced too.

var goalSheets = _GoalSheet.count,

          sum = 0;

for (var i = 0; i < goalSheets; i += 1) {

          var vGoalSheet = form1.resolveNode("GoalSheet[" + i + "]"),

                    vOthers = vGoalSheet.Table6._Others.count;

          if (vGoalSheet.Table6.First.Funding1.rawValue == "1") {

                    sum += vGoalSheet.Table6.First.Funding1.rawValue;

                    for (var j = 0; j < vOthers; j += 1) {

                              sum += vGoalSheet.Table6.resolveNode("Others[" + j + "]").Cost2.rawValue;

                    }

          }

}

this.rawValue = sum;

Hope this helps.

View solution in original post

3 Replies

Avatar

Correct answer by
Level 10

Hi,

as the GoalSheet is a repeatable instance as the Others row you have to loop through all its instanced too.

var goalSheets = _GoalSheet.count,

          sum = 0;

for (var i = 0; i < goalSheets; i += 1) {

          var vGoalSheet = form1.resolveNode("GoalSheet[" + i + "]"),

                    vOthers = vGoalSheet.Table6._Others.count;

          if (vGoalSheet.Table6.First.Funding1.rawValue == "1") {

                    sum += vGoalSheet.Table6.First.Funding1.rawValue;

                    for (var j = 0; j < vOthers; j += 1) {

                              sum += vGoalSheet.Table6.resolveNode("Others[" + j + "]").Cost2.rawValue;

                    }

          }

}

this.rawValue = sum;

Hope this helps.

Avatar

Level 1

Thank you so much for your reply.  You are putting me on the right track.

However, in my original code I have two if statements, one to sum the First row and one to sum the Others row.  Would you mind incorporating that in your explanation?  I am having trouble picturing how that looks.

I appreciate your time.

Michael

form1.GoalSheet.PracticeTitle1::calculate - (JavaScript, client)

var len = form1.GoalSheet.Table6._Others.count;

var sum = 0.0;

if (form1.GoalSheet.Table6.First.Funding1.rawValue==1)

          {

          sum += form1.GoalSheet.Table6.First.Cost.rawValue;

          }

for (var i = 0; i < len; i++){

if (form1.GoalSheet.Table6.resolveNode("Others[" + i + "]").fsource.rawValue==1) {

                              sum += form1.GoalSheet.Table6.resolveNode("Others[" + i + "]").Cost2.rawValue;

                    }

          }

this.rawValue = sum;

Avatar

Level 1

I got it working correctly. 

Thank you so much for your help!

Michael