user function aeval3()
Local -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Exemplo 3Local aArray := { "Teste" , 123 }
Local bBlock := { | x, y | conout( x ), conout( valtype( x ) ) , conout( y ) } aEval(aArray,bBlock)//
Local nI := 0, nTotal := 0
AEval( aArray, bBlock )
// No exemplo acima , criamos um array com 2 elementos : O primeiro é um Caracter , e o segundo é um número;
; // e criamos um code - block que receberá em x (primeiro parametro fornecido pela função aEvalAEval)
// cada elemento do array , e y ( segundo parametro fornecido pela aEval AEval) o número do elemento do array
// que está sendo processado nesta execução.
//
// O resultado de tela no console do ProtheusApplication Server deverá ser :
Teste // Teste --> Conteudo do primeiro elemento
C // C --> Tipo do conteudo1conteudo
// 1 --> Numero do elemento processado123processado
// Conteudo123 do segundo elementoN // Tipo do Segundo Elemento2--> Conteudo do segundo elemento
// NumeroN do elemento processado//Caso o array--> passadoTipo comodo parâmetroSegundo sejaElemento
um array multi-Dimensional , serão passados como parâmetros os arrays de primeiro nivel para o code-BLock. //// 2 --> Numero do elemento processado
//
// Vejamos uma aplicação mais complexa: :Em Umum array multi-dimensional temos 2colunas2 colunas,
// uma de código (string) e uma de valor ( numérica ) , e seja necessário realizar um cálculo
// de totalização da coluna numérica:
ASize( aArray, 0 aItens)
:= {}aadd(aItens,{AAdd( aArray, { "Branco", 10 } ) aadd(aItens,{
AAdd( aArray, { "Preto", 15 } ) aadd(aItens,{
AAdd( aArray, { "Cinza", 12 } )
// Podemos realizar a totalização pelo metodo tradicional :
nTotal := 0
For nI := 1 to len( aItens) aArray )
nTotal := nTotal + aItensaArray[nI][2] Nextconout(nTotal
Next
conout( nTotal ) // Vai exibir "37"
// 37// Ou utilizando a Funcãofunção aEvalAEval :
nTotal := 0
0aevalAEval( aItens aArray, { | x | nTotal += x[2] } )
conout( nTotal ) Exemplo da função AEVal Image Removed // Vai exibir os mesmos "37"
return
|