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