Print

Zoho Creator/Deluge: UnPredictable exception, Invalid statement found

What?
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 Failed
UnPredictable exception, Invalid statement found   Line:(20)
I 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.

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)
  1.  // select a bunch of creator records (ok all of them) 
  2.  l_AllRecords = myForm[ ID != 0 ]
  3.  // 
  4.  // loop through these 
  5.  for each  r_Record in l_AllRecords 
  6.  { 
  7.      // set an if condition 
  8.      if(r_Record.Type == "Subform1") 
  9.      { 
  10.          // loop through the first subform of this record 
  11.          for each  r_SubformRow in r_Record.mySubform1 
  12.          { 
  13.              v_StartTime = r_SubformRow.Start_Time; 
  14.          } 
  15.      } 
  16.      // set an else if condition 
  17.      else if(r_Record.Type == "Subform2") 
  18.      { 
  19.          // loop through the first subform of this record 
  20.          for each  r_SubformRow in r_Record.mySubform2 
  21.          { 
  22.              v_StartTime = r_SubformRow.Start_Time; 
  23.          } 
  24.      } 
  25.  } 
  26.  // yields 
  27.  // 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)
  1.  // select a bunch of creator records (ok all of them) 
  2.  l_AllRecords = myForm[ ID != 0 ]
  3.  // 
  4.  // loop through these 
  5.  for each  r_Record in l_AllRecords 
  6.  { 
  7.      // set an if condition 
  8.      if(r_Record.Type == "Subform1") 
  9.      { 
  10.          // store the first subform into a collection 
  11.          c_SubformRows = r_Record.mySubform1; 
  12.      } 
  13.      // set an else if condition 
  14.      else if(r_Record.Type == "Subform2") 
  15.      { 
  16.          // store the second subform into a collection 
  17.          c_SubformRows = r_Record.mySubform2; 
  18.      } 
  19.      // loop through the selected subform rows of this record 
  20.      for each  r_SubformRow in c_SubformRows 
  21.      { 
  22.          v_StartTime = r_SubformRow.Start_Time; 
  23.      } 
  24.  } 
  25.  // yields 
  26.  // 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;
        }
    }
}
  1.  // select a bunch of creator records (ok all of them) 
  2.  l_AllRecords = myForm[ ID != 0 ]
  3.  // 
  4.  // loop through these 
  5.  for each  r_Record in l_AllRecords 
  6.  { 
  7.      // set an if condition 
  8.      if(r_Record.Type == "Subform1") 
  9.      { 
  10.          // loop through the first subform of this record 
  11.          for each  r_SubformRow1 in r_Record.mySubform1 
  12.          { 
  13.              v_StartTime = r_SubformRow1.Start_Time; 
  14.          } 
  15.      } 
  16.      // set an else if condition 
  17.      else if(r_Record.Type == "Subform2") 
  18.      { 
  19.          // loop through the second subform of this record 
  20.          for each  r_SubformRow2 in r_Record.mySubform2 
  21.          { 
  22.              v_StartTime = r_SubformRow2.Start_Time; 
  23.          } 
  24.      } 
  25.  } 


Also known as "UnPredicable exception, Invalid statement"
Category: Zoho :: Article: 787