有没有办法知道 For each 何时在 genexus X v3 上进行第一次和最后一次迭代?

Is there a way to know when a For each is on his first and last Iteration on genexus X v3?

我正在使用 for each 来调用生成报告的命令,但我需要第一个和最后一个报告的数据与其他报告有所不同,有没有办法在 genexus X v3 上知道这一点?

如果您只需要将第一次迭代与其余迭代区分开来,您可以只使用布尔变量。当在最后一次迭代中,你需要在之后做一些你在其他迭代中所做的事情时,也可以使用它:

&first = true
for each
  if &first
    &first = false
    // Do whatever you need in the first iteration
  else
    // Do whatever you need in the remaining iterations
  endif
endfor

// Do whatever you need to do after the last iteration 

如果你需要在最后一次迭代中做一些不同的事情而不是你在每一次迭代中做的你需要延迟你的动作一次迭代并使用缓冲区变量来保存以前的值。

例如,假设您需要使用两个属性CustomerCodeCustomerName并且您需要为第一次迭代调用Procedure1,为剩余的less调用Procedure2最后一次迭代和 Procedure3 最后一次迭代:

&first = true
&rest = false
for each
  if &first
    &first = false
    // Do whatever you need in the first iteration
      Procedure1(CustomerCode, CustomerName)
  else
    if &rest
    // Do whatever you need in the remaining iterations, using buffer variables             
       Procedure2(&CustomerCode, &CustomerName)
    else
       &rest = true
    endif
    // Load buffer variables
    &CustomerCode = CustomerCode
    &CustomerName = CustomerName
  endif
endfor

// Do whatever you need in the last iteration, using buffer variables
if &rest
 Procedure3(&CustomerCode, &CustomerName)
endif