Just a quick article if you get the above error and what to look for.
Why?
I was writing a function with perhaps too many for each loops within a for loop.
How?
The following is 1 fix for the error:
Execution FailedI cannot guarantee that this error doesn't appear for other reasons but I will add to this article if I encounter any. This is simply how I fixed this error on this occasion.
UnPredictable exception, Invalid statement found Line:(20)
Consider the following code which loops through some Creator records, then loops through one of the subforms in each record:
copyraw
// select a bunch of creator records (ok all of them) l_AllRecords = myForm[ ID != 0 ]; // // loop through these for each r_Record in l_AllRecords { // set an if condition if(r_Record.Type == "Subform1") { // loop through the first subform of this record for each r_SubformRow in r_Record.mySubform1 { v_StartTime = r_SubformRow.Start_Time; } } // set an else if condition else if(r_Record.Type == "Subform2") { // loop through the first subform of this record for each r_SubformRow in r_Record.mySubform2 { v_StartTime = r_SubformRow.Start_Time; } } } // yields // UnPredictable exception, Invalid statement found Line:(20)
- // select a bunch of creator records (ok all of them)
- l_AllRecords = myForm[ ID != 0 ];
- //
- // loop through these
- for each r_Record in l_AllRecords
- {
- // set an if condition
- if(r_Record.Type == "Subform1")
- {
- // loop through the first subform of this record
- for each r_SubformRow in r_Record.mySubform1
- {
- v_StartTime = r_SubformRow.Start_Time;
- }
- }
- // set an else if condition
- else if(r_Record.Type == "Subform2")
- {
- // loop through the first subform of this record
- for each r_SubformRow in r_Record.mySubform2
- {
- v_StartTime = r_SubformRow.Start_Time;
- }
- }
- }
- // yields
- // UnPredictable exception, Invalid statement found Line:(20)
However, I'm not bad at producing errors so here's another snippet that will also cause the error:
copyraw
// select a bunch of creator records (ok all of them) l_AllRecords = myForm[ ID != 0 ]; // // loop through these for each r_Record in l_AllRecords { // set an if condition if(r_Record.Type == "Subform1") { // store the first subform into a collection c_SubformRows = r_Record.mySubform1; } // set an else if condition else if(r_Record.Type == "Subform2") { // store the second subform into a collection c_SubformRows = r_Record.mySubform2; } // loop through the selected subform rows of this record for each r_SubformRow in c_SubformRows { v_StartTime = r_SubformRow.Start_Time; } } // yields // UnPredictable exception, Invalid statement found Line:(20)
- // select a bunch of creator records (ok all of them)
- l_AllRecords = myForm[ ID != 0 ];
- //
- // loop through these
- for each r_Record in l_AllRecords
- {
- // set an if condition
- if(r_Record.Type == "Subform1")
- {
- // store the first subform into a collection
- c_SubformRows = r_Record.mySubform1;
- }
- // set an else if condition
- else if(r_Record.Type == "Subform2")
- {
- // store the second subform into a collection
- c_SubformRows = r_Record.mySubform2;
- }
- // loop through the selected subform rows of this record
- for each r_SubformRow in c_SubformRows
- {
- v_StartTime = r_SubformRow.Start_Time;
- }
- }
- // yields
- // UnPredictable exception, Invalid statement found Line:(20)
The Solution/Cause
So quite simply, I'm using 2 for each loops and this is one of those scenarios where you need to store the loops into different variable names:
copyraw
// select a bunch of creator records (ok all of them) l_AllRecords = myForm[ ID != 0 ]; // // loop through these for each r_Record in l_AllRecords { // set an if condition if(r_Record.Type == "Subform1") { // loop through the first subform of this record for each r_SubformRow1 in r_Record.mySubform1 { v_StartTime = r_SubformRow1.Start_Time; } } // set an else if condition else if(r_Record.Type == "Subform2") { // loop through the second subform of this record for each r_SubformRow2 in r_Record.mySubform2 { v_StartTime = r_SubformRow2.Start_Time; } } }
- // select a bunch of creator records (ok all of them)
- l_AllRecords = myForm[ ID != 0 ];
- //
- // loop through these
- for each r_Record in l_AllRecords
- {
- // set an if condition
- if(r_Record.Type == "Subform1")
- {
- // loop through the first subform of this record
- for each r_SubformRow1 in r_Record.mySubform1
- {
- v_StartTime = r_SubformRow1.Start_Time;
- }
- }
- // set an else if condition
- else if(r_Record.Type == "Subform2")
- {
- // loop through the second subform of this record
- for each r_SubformRow2 in r_Record.mySubform2
- {
- v_StartTime = r_SubformRow2.Start_Time;
- }
- }
- }
Also known as "UnPredicable exception, Invalid statement"
Category: Zoho :: Article: 787
Add comment