Skip to main content
Known Participant
July 20, 2018
Answered

Help with while loop

  • July 20, 2018
  • 4 replies
  • 1093 views

Hello everyone, hope all is well.

It has been a while since I last visited and this forum has always been very helpful and I thought it would be good to clarify a (newbie) question.

I am trying to obtain data from several form fields using the below code:

var count_item = 1;

while (this.getField("Bem_Descr_"+count_item).value!=="")

{

var REG27 = [];

REG27 ["descricao"] = this.getField("Bem_Descr_"+count_item).value;

REG27 ["valor_ant"] = this.getField("Bem_Posicao_Anterior_"+count_item).value;

REG27 ["valor_atual"] = this.getField("Bem_Posicao_Atual_"+count_item).value;

REG27 ["pais"] = this.getField("Bem_Codigo_Pais_"+count_item).value;

var output_reg27 = "\r27"+NR_CPF+REG27.descricao+REG27.valor_ant+REG27.valor_atual+REG27.pais;

app.alert(output_reg27);

count_item++

}

I am able to see each of the results using the app.alert, but I need to have each of the results in a single string altogether.

Could anyone point me in the right direction?

Many thanks in advance!

This topic has been closed for replies.
Correct answer BarlaeDC

Hi George, thanks. Yes, the names are known upon spawning.

My issues is with "isolating" each result and using the result as a new variable, so I can add it as necessary to a string.

E.g., the values I get from the fields ending with 1 are stored, so I can join it with the values I get from the fields ending with 2 etc.

Thanks!!!


HI,

If I understand correctly you want to create a string that keeps getting added to so you would end up with a string which contains all the fields in the form?

If that is the case then just declare "output_reg27" outside of your loop and use the "+=" inside the loop so your code would look like this.

var count_item = 1;

var output_reg27 = "";

// as you don't know how many fields, this shouldn't cause an error when you run out of fields

while (this.getField("Bem_Descr_"+count_item) !== null)

{

var REG27 = [];

REG27 ["descricao"] = this.getField("Bem_Descr_"+count_item).value;

REG27 ["valor_ant"] = this.getField("Bem_Posicao_Anterior_"+count_item).value;

REG27 ["valor_atual"] = this.getField("Bem_Posicao_Atual_"+count_item).value;

REG27 ["pais"] = this.getField("Bem_Codigo_Pais_"+count_item).value;

// this means, concat the string to what is already there.

output_reg27 += "\r27"+NR_CPF+REG27.descricao+REG27.valor_ant+REG27.valor_atual+REG27.pais;

app.alert(output_reg27);

count_item++

}

Do take note of the response above, if you are renaming the fields when you spawn the template, then this above code wont work as expected.

Hope that helps,

Malcolm

4 replies

lapnetoAuthor
Known Participant
August 3, 2018

Hi guys,

I really appreciate all the help provided. However, as indicated by Malcolm, I cant get the code to work with the spawned pages.

I have already set the applicable page counters etc. but can not get past this (example):

while (this.getField("P"+count_page+".Template."+"Bem_Descr_"+count_item) !== null)  {

code here;

}

Since this field will only show on a specific page (e.g. page 8, but could be page 9, 10 etc), how can I work around to have the loop check whether or not the field exists? I am trying something with try and catch, but no luck also.

Any help in pointing me to the right direction is greatly appreciated.

Thanks and Best Regards,

BarlaeDC
Community Expert
Community Expert
July 20, 2018

Happy to help.

Regards

Malcolm

BarlaeDC
Community Expert
Community Expert
July 20, 2018

Hi,

I would not loop this way as when you run out of fields, you code will crash as the while loop will be unable to get the value of the field as it will be null.

I would change your loop to be

while (this.getField("Bem_Descr_"+count_item) !== null)

Although if you know how many fields you have, it would probably be better just to loop for those fields

for ( var i = 1; i <= 25; i++)

{

    // your code here

}

In you string creation line you have the NR_CPF variable, where does this come from?

Regards

Malcolm

lapnetoAuthor
Known Participant
July 20, 2018

Hi Malcolm,

Thanks for your reply, it is much appreciated. It makes perfect sense to use it as null, thank you!

The NR_CPF is a variable previously defined in other part of the code. It is basically 11 numbers (it is the taxpayer id that needs to come in front of the results found).

Unfortunately the number is not known, as new fields will be created upon spawning a page using a template in the future.

Thanks again!

Inspiring
July 20, 2018

It's not clear to me what you mean by "a single string altogether"? It would be helpful if you provided some example field values and the resulting string that you'd like to see. There are some problems with that code that make me unsure what it is you're trying to accomplish.

lapnetoAuthor
Known Participant
July 20, 2018

Many thanks for the reply, George.

Basically I need to obtain data from form fields and each field name ends with a number.

I need to have all field values into one text.

Example:

in field "Bem_Descr_"+count_item I have a value of "this is my text from bem_descr_1".

in field "Bem_Posicao_Anterior_"+count_item I have a value of "this is my text from bem_posicao_anterior_1".

I need the result to be a single text joining all values in each for field. In the above example, it would be "this is my text from bem_descr_1"+"this is my text from bem_posicao_anterior_1".

This repeats for the other form fields indicated and increases until I find an empty "Bem_Descr_"+count_item field.

Since there are several fields, each one ending in a number (e.g. "Bem_Descr_2", "Bem_Descr_3" etc), I am struggling to find a solution.

Could you help?

Thank you,

Inspiring
July 20, 2018

Have you actually test the code that adds new fields based on a template so you know what the resulting field names are? If you're adding new pages by spawning a template and choosing to rename the fields when you do, yiur code will have to account for the resulting field names.