Como criar um Gerador de PDF: mudanças entre as edições
Sem resumo de edição |
|||
| Linha 27: | Linha 27: | ||
==Passo 3 - Criar documentos== |
==Passo 3 - Criar documentos== |
||
Deve-se criar um '''document''' do tipo '''single''' para cada PDF gerado. <br> |
Deve-se criar um '''document''' do tipo '''single''' para cada PDF gerado. <br> |
||
'''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 |
'''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 adicionada à lista. |
||
[[Arquivo:Pdf5.png|commoldura|centro|Figura 5]] |
[[Arquivo:Pdf5.png|commoldura|centro|Figura 5]] |
||
<br> |
<br> |
||
Por convenção, o documento múltiplo para email será explicitado adicionando a palavra '''email''' ao final do nome, como realizado na 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== |
==Passo 4 - Criar uma variável para as chaves== |
||
Já no projeto a ser inserido o gerador de PDF: |
Já no projeto a ser inserido o gerador de PDF: |
||
Edição atual tal como às 13h13min de 21 de junho de 2021
Passo 1 - Criar um Template[editar]
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;
- 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;
- 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;
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[editar]
- 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=
Na Figura 4 pode-se observar as duas etapas realizadas,
Passo 3 - Criar documentos[editar]
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 adicionada à lista.
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[editar]
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[editar]
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.
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.





