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