4D v16 R5 trouxe uma melhoria significativa ao comando DIALOG. Uma melhoria que reside na possibilidade de passar um novo parâmetro “formData ” de tipo objeto. Foi ótimo saber que esta nova adição foi bem recebida pelos programadores 4D.
Com 4D v20, dois outros comandos foram atualizados, Print form e FORM LOAD! O benefício será igualmente grande. O conteúdo do objeto passado no parâmetro será diretamente explorável nos formulários impressos ou nos formulários carregados na memória.
código AMOSTRA
Imprima o formulário
O comando Print form é amplamente utilizado pelos programadores 4D graças às suas melhorias recentes.
O comando PRINT FORM pode agora passar um parâmetro opcional do tipo objeto acessível através da função Form no formulário invocado. Seja diretamente utilizando a função Form como através de expressões para os objetos do formulário (Form.firstname / Form.lastname / etc.), mas também quando o evento on printing detail for executado.
$formData:=New object()
$formData.lastname:="Smith"
$formData.firstname:="john"
$formData.request:="I need more COFFEE"
$h:=Print form("Print_obj"; $formData; Form detail)
Onde o formulário “Print_obj” tem este aspecto:
FORMULÁRIO CARREGADO
Seguindo o mesmo princípio, o comando FORM LOAD pode agora receber um objeto como parâmetro. Se for passado (opcional), então o conteúdo deste objeto pode ser explorado de diferentes maneiras e modificado durante a execução do evento on load (apenas evento gerido e apenas dentro de uma sequência OPEN PRINTING JOB / CLOSE PRINTING JOB).
OPEN PRINTING JOB
$formData.LBcollection:=New collection()
$formData.LBcollection.push(New object("reference"; "alpha"; "quantity"; 3; "total"; 120.99))
$formData.LBcollection.push(New object("reference"; "bravo"; "quantity"; 2; "total"; 599.99))
FORM LOAD("GlobalForm"; $formData) // $formData NEW !!!
$over:=False
Repeat
$full:=Print object(*; "LB") // o datasource de listbox "LB" é Form.LBcollection
LISTBOX GET PRINT INFORMATION(*; "LB"; lk printing is over; $over)
If (Not($over))
PAGE BREAK
End if
Until ($over)
CLOSE PRINTING JOB
…onde o “GlobalForm” contém uma caixa de listagem “LB” utilizando Form.LBcollection como fonte de dados.
Conclusão
Esta nova possibilidade de programação irá poupar-lhe tempo e tornar o seu código “mais leve”.
Como habitualmente, sinta-se à vontade para partilhar o seu feedback sobre os fóruns 4D. Aguardo com expectativa a sua resposta!