Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Adobe Summit 2023 [19th to 23rd March, Las Vegas and Virtual] | Complete AEM Session & Lab list

Adobe LiveCycle - Javascript - Initialize event is looping when I try to update a variable

Avatar

Level 1

Hi,

I am struggling to manipulate an address field to remove the country code, format lines breaks and add the country name.

 

The text I am using is in the format: "First Line / Second Line / Third Line / IE"


var vAddress;
vAddress = addresstest.rawValue ;
vAddress = vAddress.substring(0,vAddress.length-3) ;
vAddress = vAddress.replace(/ \/ /g, "\n");
addresstest.rawValue = vAddress+"\n"+masterHeader.masterHeaderLeft.country.rawValue ;

 

Output is :

"First Line 

Second Line
Third Line /
Irel"

 

I think the issue is with the final line but when I tested appending text on each line, 

GarethEade_0-1660231565754.png

the output was:

"First Line 

Second Line
Third Line

IE lin line 2 line 3 lin line 2 line 3"

 

So there is some kind of loop being created.

 

I have also tried: 

addresstest.rawValue = addresstest.rawValue+"\n"+masterHeader.masterHeaderLeft.country.rawValue ;

 

Which then adds the country line twice so the issue isn't isolated to it being a variable.

 

Does anyone have any ideas?

Thanks

6 Replies

Avatar

Level 5

I don't see anything obviously wrong with your code.

Just not clear on a few things.

I am assuming "masterHeader" is a master page?

On which event is this code executing?

Which "Initialize event" is looping, are you referring to?

 

Cheers
M

 

Avatar

Level 1

Yes is is on a master page.

The event is an Initialize event - it repeats even more when I tried running the code on Validate and doesn't work on Exit.

The looping is presumed from what appears on the output.

Avatar

Employee Advisor

@GarethEade try below:

 

var vAddress;
vAddress = "First Line / Second Line / Third Line / IE" ;
vAddress = vAddress.substring(0,vAddress.length-4) ;
vAddress = vAddress.replace(/ \/ /g, "\n");
app.alert(vAddress + "\n" + "test") ;

 

Work fine for me on all events and the master page too

Avatar

Level 10

I would split the string and then use a loop to create a new one.

 

var aInput = addresstest.rawValue.split(/\s*\/\s*/g),
	cOutput = "";
if (aInput.length > 0) {
    // process all items in the array except the last one.
    for (var i = 0; i < aInput.length - 1; i += 1) {
            // add a line break in front of every item except the first.
	    cOutput += (i > 0 ? "\n" : "") + aInput[i];
    }
}
addresstest.rawValue = cOutput + "\n" + masterHeader.masterHeaderLeft.country.rawValue;

Avatar

Level 1

An excellent solution. It covers off some of the issues which I didn't address here:

  • When the length of the country code is 1 letter instead of two (it is actually vehicle registration code rather than ISO country code!)
  • When it puts in the whole country name for cross border addresses.
  • If there is more than the three address lines - different formats for different countries.

Thanks for your help, I can't help but think you have come across my exact problem before with invoice addresses in SAP ByDesign!