Archive for the 'Scripts' Category

LiveCycle forms: Data Binding

Erba, como vão?

Aqui a coisa tá hard rock! Muito peixe, lula, caranguejo apimentado e forms na veia hehehehe

Hoje passei por uma situação e vou compartilhar aqui, pode ajudar muita gente.

Digamos que você está trabalhando num projeto que envolva formulários PDF. Você desenvolve esses formulários que serão utilizados em um sistema web de workflow qualquer (não LiveCycle). O papel do LiveCycle (Output nesse caso) vai ser somente receber via web service um XML desse sistema e fazer o merge com o seu template de formulário PDF.

Mas aí o time de desenvolvedores do sistema de worflow te pergunta: Como eu devo gerar esse XML? Claro, agora você tem que fazer um schema pra eles. Mas isso já estava previsto, não é?

Dentro do seu formulário você tem um dropdownlist que é pre-populado com os dados vindos do XML deles. Mas quando você clica em submit, o formulário envia novamente o XML com os dados preenchidos pelo usuário, mas manda também toda a lista que veio pre-populada do dropdownlist anteriormente. Mas o outro time não quer receber toda essa informação de novo, certo? Só querem receber o item que o usuário selecionou. Compreensível.

Então antes de submeter o formulário você precisa tirar no script na mão os outros itens. Seleciona o botão de submit e no evento mouseUp coloca a seguinte linha:

$record.nodes.remove($record.MeuDropDownList);

Beleza, vai funcionar. E o que isso faz? Remove a informação a mais. Mas no lugar do MeuDropDownList você claro coloca a identificação do nó no seu XML.

Mas de repente você vai testar seu formulário feito no LiveCycle Designer, e que tem mais de 1000 campos e vê que quando clica em Submit mesmo os campos em branco aparecem no XML de saída:

<\nome>
<\fax>

Então é por isso que no seu Schema você precisa definir em todos esses campos como minOccurs=”0″:


<xs:element minOccurs="0" maxOccurs="1" name="nome" type="xs:string" />

<xs:element minOccurs="0" maxOccurs="1" name="fax" type="xs:string" />

Assim se o campo estiver vazio, ele não aparece no XML final.

É isso.

Imprimir formulários em PDF?

Pois é, mesmo tendo essa tecnologia por trás do PDF em que é possível instruir o preenchimento de um formulário e até envia-lo por email, as vezes ainda se faz necessário a impressão desses documentos.

Imagine o seguinte, você fez um formulário bem bacana, dinâmico e com regras de validações. Mas se a pessoa que for preencher clicar no menu File->Print, pronto. Ela vai imprimir mesmo se tiver erros de preenchimento.

Para evitar isso você precisa usar o evento prePrint para validar o formulário, e só depois fazer a impressão. Caso o formulário não esteja preenchido corretamente, use a instrução cancelAction para cancelar a impressão.

Vamos lá?

Em todos os campos que são obrigatórios de preenchimento, deverá ser feito a seguinte ação: Selecione o campo e depois vá na aba Object->Value->Type. Deve estar como Required. Coloque também uma mensagem de aviso. Também é possível controlar os níveis de validação e das mensagens de aviso, quando um campo não for preenchido. Para isso clique logo abaixo, em Form Level Validation Settings.

Validar PDF antes da Impressão

Validar PDF antes da Impressão

Depois só seguir a imagem abaixo, sacou?

Validar PDF antes da Impressão

Validar PDF antes da Impressão

O que eu fiz:

Coloquei dois campos no meu formulário + um botão de impressão. Configurei o primeiro campo como sendo obrigatório e o segundo deixei opcional. No evento prePrint do botão eu coloquei a seguinte instrução:

if(!xfa.form.form1.execValidate()){

       xfa.event.cancelAction = 1;

}

Pronto. Quando clicar no botão, antes de tentar a impressão o Reader irá executar essa instrução, que dispara o evento validate do formulário e, caso retorne FALSO (existem campos a serem preenchidos), a impressão é cancelada.

Clique aqui para fazer download do PDF que fiz nesse post.

É isso.

Preenchimento automático

Você terminou um formulário de 10 páginas, inúmeros campos e 2D barcodes e agora precisa testar, o que faz? Clica na aba preview e sai preenchendo um campo de cada vez? Bom, você não foi o único! Eu já fiz isso também. Mas existe duas outras formas de se preencher um formulário automaticamente com dados aleatórios para teste.

A primeira é possível clicando no menu “File > Form properties” e depois na aba Preview. Depois clique em “Generate Preview data” para gerar um XML com dados de exemplo. A imagem abaixo dá uma dica.

Generate Preview data

Generate Preview data

A segunda é uma funçåo em javascript em um botão qualquer. Essa função percorre todo o formulário (xfa.form) encontrando cada campo (meuNo.nodes.item(0).className) e preenchendo seus respectivos “values”. Faça o download abaixo de um PDF exemplo.

Preenchimento Automatico

É isso!



%d blogueiros gostam disto: