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