Como criar um Gerador de PDF: mudanças entre as edições

De EAPn
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
Linha 17: Linha 17:


==Passo 2 - Criar parâmetro==
==Passo 2 - Criar parâmetro==
Crie um parâmetro clicando na pool do processo, seguindo em '''Data > Parameters > Add...''' com nome '''wsPDFurl''' do tipo '''Text'''.
*Crie um parâmetro clicando na pool do processo;
*Seguindo em '''Data > Parameters > Add...''';
Defina o valor do parâmetro em '''Configure > Parameters''', ao encontrar o '''wsPDFurl''' definido anteriormente, insira este valor: '''http://pdf.inf.ufsc.br/gera?odturl='''
*Insira nome '''wsPDFurl''' e tipo '''Text''';
*Defina o valor do parâmetro em '''Configure > Parameters''', ao encontrar o '''wsPDFurl''' definido anteriormente, insira este valor: '''http://pdf.inf.ufsc.br/gera?odturl='''
[[Arquivo:Pdf4.png|commoldura|centro|Figura 4]]
[[Arquivo:Pdf4.png|commoldura|centro|Figura 4]]
<br>
<br>
Linha 33: Linha 35:


*Insira uma tarefa do tipo '''Service''';
*Insira uma tarefa do tipo '''Service''';
**Vá em '''Data > Local Variables > Add...''';
*Vá em '''Data > Local Variables > Add...''';
*Adicione uma variável local a ela com nome '''chavesTemplate''' do tipo '''Java Object''', automaticamente o Bonita define a Classe como '''java.util.List''';
*Adicione uma variável local a ela com nome '''chavesTemplate''' do tipo '''Java Object''', automaticamente o Bonita define a Classe como '''java.util.List''';
*Adicionando um valor padrão, iremos colocar todas as chaves do template em uma lista de '''Strings''' e no final retornaremos ela, dessa forma:
*Adicionando um valor padrão, iremos colocar todas as chaves do template em uma lista de '''Strings''' e no final retornaremos ela, dessa forma:
Linha 78: Linha 80:


valores.addAll(
valores.addAll(
bdm.getNome(),
bdm.getNome(),
bdm.getCelular().toString(), //Como é um array de strings, deve se converter qualquer outro tipo de dado em string.
bdm.getCelular().toString(), //Como é um array de strings, deve se converter qualquer outro tipo de dado em string.
bdm.getEmail()
bdm.getEmail()
Linha 103: Linha 105:
apiAccessor.processAPI.attachDocument(processInstanceId, "documentoPDF", filename, "", content); //Modifique o nome do documento a ser anexado.
apiAccessor.processAPI.attachDocument(processInstanceId, "documentoPDF", filename, "", content); //Modifique o nome do documento a ser anexado.
</pre>
</pre>

[[Arquivo:Pdf6.png|commoldura|centro|Figura 6]]
<br><br>

Na Figura 6 temos a operação de adicionar documento à uma lista, se o processo necessitar que mais documentos sejam enviados por email, deve-se repetir <pre>l.add();</pre> para os restantes.

Edição das 16h47min de 12 de maio de 2021

Passo 1 - Criar um Template

Usaremos o LibreOffice Writer (Baixe clicando aqui) para gerar documento de template em formato .odt.
Devemos inserir as chaves que serão posteriormente usadas para inserir informações.

  • Vá em Inserir > Campo > Outros Campos, ou simplesmente Ctrl + F2;
FIgura 1
  • Na janela que será aberta, siga em Variáveis;
  • Selecione Tipo como Campo do Usuário e Formato como Texto;
  • Em nome e valor, por convenção, escreva o mesmo texto e colocando no formato CT_nomeDaVariavel, como foi feito na Figura 2;
Figura 2
  • Ao clicar em Inserir, você verá que a chave foi adicionada ao documento;
  • Na Figura 3, temos um exemplo com chaves: CT_Nome, CT_Celular e CT_Email;
Figura 3


Com isso concluído, você já tem um template funcional, e ele deve estar hospedado no servidor e ....(escrever mais sobre o WebService de PDF do inf http://pdf.inf.ufsc.br/gera?odturl=).

Passo 2 - Criar parâmetro

  • Crie um parâmetro clicando na pool do processo;
  • Seguindo em Data > Parameters > Add...;
  • Insira nome wsPDFurl e tipo Text;
  • Defina o valor do parâmetro em Configure > Parameters, ao encontrar o wsPDFurl definido anteriormente, insira este valor: http://pdf.inf.ufsc.br/gera?odturl=
Figura 4


Na Figura 4 pode-se observar as duas etapas realizadas,

Passo 3 - Criar documentos

Deve-se criar um document do tipo single para cada PDF gerado.
Atenção: Se for preciso enviar esse documento como anexo por e-mail, será necessário criar um document do tipo multiple, pois o Bonita só aceita documentos múltiplos como anexo. É preciso criar um Operation na tarefa para que seja adiciona à lista.

Figura 5


Por convenção, o documento múltiplo para email será explicitado adicionando a palavra email ao final do nome, como realizado na Figura 5.

Passo 4 - Criar uma variável para as chaves

Já no projeto a ser inserido o gerador de PDF:

  • Insira uma tarefa do tipo Service;
  • Vá em Data > Local Variables > Add...;
  • Adicione uma variável local a ela com nome chavesTemplate do tipo Java Object, automaticamente o Bonita define a Classe como java.util.List;
  • Adicionando um valor padrão, iremos colocar todas as chaves do template em uma lista de Strings e no final retornaremos ela, dessa forma:
List<String> lista =  new ArrayList<String>();

lista.addAll(
	"CT_Nome",
	"CT_Celular",
	"CT_Email"
);

return lista;
  • Após isso salve.

Passo 5 - Criar o conector

Com a tarefa de serviço selecionada, adicione um conector do tipo Groovy Script em Execution > Connectors in > Add.... Insira nomes apropriados para o nome do conector e script, como por exemplo: gerarPDF().

import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
import org.apache.http.NameValuePair
import org.apache.http.client.HttpClient
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.methods.HttpPost
import org.apache.http.auth.AuthScope
import org.apache.http.message.BasicNameValuePair
import org.bonitasoft.engine.bpm.document.DocumentValue
import org.apache.http.impl.client.HttpClients;

//Parte 1 - Requisitando template no servidor

Long case_id = processInstanceId;
HttpClient httpclient = HttpClients.createDefault();
String url = wsPDFurl + "http://documentacao.processos.ufsc.br/templates/p00/template_teste.odt"; //Isso é um exemplo, esta url depende muito do caminho escolhido para hospedagem do documento
HttpPost httppost = new HttpPost(url);

//Parte 2 - Preenchendo a lista com os valores que se deseja inserir no documento.
//Obs.: A ordem utilizada no Passo de criação das chaves de template, deve ser seguida exatamente da mesma forma nessa lista.

List<String> valores = new ArrayList<String>();

valores.addAll(
    bdm.getNome(),
    bdm.getCelular().toString(), //Como é um array de strings, deve se converter qualquer outro tipo de dado em string.
    bdm.getEmail()
);

// Parte 3 - Criando uma lista que relaciona cada chave com seu valor.

ArrayList<String> chaves = chavesTemplate; //Requisita a variável local já criada com as chaves

List<NameValuePair> params = new ArrayList<NameValuePair>();

params.addAll( // Pode-se imaginar essa lista em um laço "for", mas por um motivo desconhecido, a utilização dele acaba em erro.
	new BasicNameValuePair(chaves[0], valores[0]),
	new BasicNameValuePair(chaves[1], valores[1]),
	new BasicNameValuePair(chaves[2], valores[2])
    //Instancie novos objetos nessa lista com base no número de valores a serem relacionados.
);


httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = httpclient.execute(httppost);
byte[] content = response.getEntity().getContent().getBytes();
String filename = "P00_Exemplo-" + case_id.toString() + ".pdf"; //Modifique o nome
apiAccessor.processAPI.attachDocument(processInstanceId, "documentoPDF", filename, "", content); //Modifique o nome do documento a ser anexado.
Figura 6



Na Figura 6 temos a operação de adicionar documento à uma lista, se o processo necessitar que mais documentos sejam enviados por email, deve-se repetir

l.add();

para os restantes.