Gerador de documentos para o Salesforce Industries
Published: 2024-01-29 18:53:37

O Gerador de Documentos para Industries é uma aplicação que permite que o usuário crie documentos a partir de templates pré-definidos ou templates customizados. Dessa forma, os documentos são gerados de forma rápida, consistente e precisa.

Com esta aplicação, podemos mesclar arquivos de texto, como editor de textos ou de slides com outras fontes de dados, como registros de objetos Salesforce, para criar contratos, propostas, cotações e relatórios. Os documentos gerados podem ser exportados no formato .docx, .ppt e .pdf.

### Vantagens
- Gerar documentos de forma rápida e precisa;
- Controle de versões, onde podemos criar diversas versões de um único template, de acordo com as mudanças que atendam as necessidades de negócio;
- Contratos de venda com a capacidade de mesclar dados de mais de um objeto Salesforce;
- Documentos de proposta detalhados, que mesclam diversos segmentos de dados em um único documento;
- Cotações complexas e integradas;
- Criação de relatórios simples e/ou complexos.

## Document Template Designer
Esta ferramenta permite criar templates de documentos a partir de templates existentes ou completamente novos, de forma declarativa, ou seja, sem a necessidade de códigos. Podemos configurar parágrafos, colunas, mesclar textos e imagens, etc. Os templates ajudam a otimizar os processos de negócio.

Ela permite que os documentos sejam gerados em formato HTML, Microsoft Word (.docx) e Microsoft PowerPoint (.pptx). Para a criação de documentos complexos, que necessitam de cálculos, lógica e inserção de dados dinâmicos, podemos configurar tokens para os templates, que suportam diversos tipos e funções:
- Variáveis: podemos passar as informações necessárias, em formato JSON, para o preenchimento do documento. Essas informações são armazenadas em variáveis e permitem que os dados sejam preenchidos de forma dinâmica;
- Conteúdo de repetição: podemos inserir, por exemplo, listas de produtos em um único documento;
- Condicionais: podemos inserir determinada informação quando condições pré-definidas no template são atendidas;
- Imagens;
- Editor de textos: podemos configurar cor, fonte, parágrafos, etc;
- Hyperlink: podemos inserir URLs dinâmicas para a criação de documentos.

## Mapeamento de dados

Podemos mesclar dados de registros de objetos Salesforce para a criação de documentos. Os objetos que podem ser utilizados são: Contract, Opportunity, Order e Quote. Podemos criar diversas seções no mesmo documento, onde cada seção importa dados de um único objeto.

O mapeamento de dados baseado em objetos é tipicamente usado para criar documentos no formato HTML. Ele é de fácil construção, porém é menos flexível do que o mapeamento de dados JSON.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jy1ls59w85v2jg9rfvgb.png)

Também é possível mesclar dados de sistemas externos ao Salesforce. Esses dados devem ser integrados ao Salesforce no formato JSON. Podemos criar um componente DataRaptor ou classe Apex para extração e formatação dos dados que serão enviados para o gerador de documentos.

O mapeamento de dados baseado em dados JSON é usado para a criação de documentos HTML, Microsoft Word e Microsoft PowerPoint, e a fonte de dados pode ser interna ou externa ao Salesforce.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpua7ur3621ngftz59dy.png)

Para que possamos inserir as informações necessárias para a geração de documentos, utilizamos os chamados _tokens_. Esses _tokens_ podem ser de vários tipos:
- **Variável:** mostra o valor da variável que é passada para o template através de elemento no formato _JSON_;

```
{{token_name}}
```
- **Conteúdo de repetição:** repete o conteúdo de uma seção;

```
{{#token_name}} //o sinal # indica que o conteúdo se repete tantas vezes forem a quantidade de itens dos dados de entrada no formato JSON
{{/token_name}} //aqui é indicada a _tag_ de fechamento
AND
{{^token_name}} //o sinal ^ indica o que deve ser exibido caso o item não exista ou esteja vazio.
{{/token_name}} //aqui é indicada a _tag_ de fechamento
```
- **Condicionais:** se determinada condição é verdadeira, a seção é mostrada no documento;

```
{{#IF_token_name}} //aqui, a seção aparecerá somente se a condição for VERDADEIRA
{{/IF_token_name}} //tag de fechamento
AND
{{^IF_token_name}} //aqui, a seção aparecerá somente se a condição for FALSA
{{/IF_token_name}} //tag de fechamento
```
- **Imagem:** inserir imagem de forma dinâmica;

```
{{IMG_<imagetokenname>}}
```
- **_Rich text_:** mostra o conteúdo _rich text_ em seu formato original;

```
{{RTB_<richtexttokenname>}}
```
- **_Hyperlinks_:** inserir _URL_ dinâmica;

```
{{HYP_<hyperlinktokenname>}}
```
Os dados recebidos podem vir de uma classe Apex ou do componente DataRaptor.

## Client-side & server-side
Podemos criar processos para geração de documentos através de componentes Omniscript, Integration Procedure e classes Apex. O processo pode ser client-side ou server-side.
- Client-side: o processo é tipo síncrono, através de um componente Omniscript, onde o usuário precisa executar ações, como preenchimento de informações necessárias para a geração do documento. Este processo utiliza recursos do navegador web e, por estes motivos, funciona com arquivos menores.
- Server-side: o processo é tipo assíncrono, ou seja, ocorre através de um processo automático, sem a necessidade de interação do usuário. Este processo utiliza recursos do próprio Salesforce, o que permite a criação de arquivos maiores e criação de arquivos em lote.

### Client-side
Para preencher as informações necessárias na criação de documentos client-side, podemos:
- Criar um Omniscript: podemos criar um _Omniscript_ que capture os dados de entrada do usuário em um formulário e leve os dados para o _document template_;
- Customizar o Omniscript padrão na plataforma: para que o Omniscript seja capaz de gerar o documento, o _template_ configurado deve ter sempre dois _DataRaptors_ relacionados; o _DataRaptor Extract_ e o _DataRaptor Transform_;
- Uitilizar a entrada de dados do tipo JSON: podemos criar um classe Apex que extraia os dados do Salesforce e leve os dados no formato JSON para o document template. Este processo é ideal para documentos que possuam mais de 200 itens.

### Server-side
- Automatizar a geração de documentos com APIs;
- Utilizar diversas ferramentas, como classes Apex, Integration Procedures  e Omniscripts;
- Gerar documentos mais pesados e/ou múltiplos documentos através de processos batch, que utilizam os recursos do Salesforce, ao invés dos recursos do navegador. Documentos mais pesados normalmente possuem muitas linhas, tabulação complexa e muitos tokens;

Fonte:
[Deep Dive into Salesforce Document Generation](https://trailhead.salesforce.com/content/learn/modules/working-with-industries-document-generation)
[Industries Document Generation Foundation](https://trailhead.salesforce.com/content/learn/modules/industries-document-generation-foundations?trail_id=optimize-your-business-with-industries-contract-lifecycle-management)