Artigo
· Ago. 2 3min de leitura

Criando documentos avançados do Word com IRIS

Documentos Word são amplamente utilizados no mercado. Os usuários frequentemente criam contratos, memorandos, currículos, relatórios, análises e outros documentos que podem exigir dados de ou capturados pelo InterSystems IRIS. No entanto, o IRIS não possui uma API, SDK, biblioteca ou adaptador para isso. Essa limitação não existe mais. 

A nova biblioteca Open Exchange iris4wordd (https://openexchange.intersystems.com/package/iris4word)oferece um SDK ObjectScript onde o desenvolvedor passa qualquer %DynamicObject como parâmetro, um arquivo de template Word e, em seguida, recebe um documento pronto, com a estrutura e formatação definidas em seu template.


Para usar o iris4word

Este artigo usará uma API REST para obter o conteúdo, mas também é possível consultar o banco de dados. Para instalar o iris4word e o exemplo que o utiliza, siga estas etapas:

  1. Se você usa IPM/ZPM: zpm:USER>install iris4word
  2. Se você usa Docker: 
    1. git clone https://github.com/yurimarx/iris4word.git
    2. docker-compose up -d --build
  3. Abra o Postman (para executar o exemplo da API REST)
  4. Importe a coleção de exemplos de (https://raw.githubusercontent.com/yurimarx/iris4word/refs/heads/master/iris4word.postman_collection.json): 
  5. Faça o upload do arquivo de template template.docx (no caminho sample/template.docx deste repositório ou de https://raw.githubusercontent.com/yurimarx/iris4word/refs/heads/master/sample/template.docx). Para fazer o upload, preencha o campo file na aba Body:
  6. O processo de upload enviará o template para o servidor para ser usado pelo iris4word.
  7. Abra o "2. Download Word Document" e copie e cole no corpo este conteúdo JSON:
    {
      "company": {
        "name": "ACM Ltda.",
        "address": "Main Street, 123",
        "city": "New York",
        "state": "NY"
      },
      "projects": [
        {
          "name": "System Development X",
          "beginDate": "2024-01-01",
          "endDate": "2024-06-06",
          "team": [
            {"name": "John Star", "role": "Senior Developer"},
            {"name": "Marie Loo", "role": "BDM"}
          ],
          "tasks": [
            {"description": "Requirements", "status": "Done"},
            {"description": "Development", "status": "Doing"}
          ]
        },
        {
          "name": "ERP Development Y",
          "beginDate": "2024-03-03",
          "endDate": "2025-12-12",
          "team": [
            {"name": "Peter Rogers", "role": "Project Manager"},
            {"name": "Robert Plant", "role": "ERP Specialist"}
          ],
          "tasks": [
            {"description": "ERP configuration", "status": "Done"},
            {"description": "User training", "status": "Doing"}
          ]
        }
      ],
      "principalContact": {
        "name": "Carlos Olivera",
        "email": "carlos.olivera@company.com",
        "phone": "+1 555 555-555"
      }
    }
     
  8. No botão Send, selecione a opção "Send and Download":
  9. Veja os resultados:
  10. Compare o conteúdo JSON com o template.docx e veja as marcas e tags usadas.

Nos bastidores

É muito fácil, com o arquivo de template salvo em /tmp/template.docx, basta chamá-lo:

ClassMethod DownloadDoc(template As %String) As %Status
{
    Set tUUID = $System.Util.CreateGUID() 
    Set filePath = "/tmp/"_tUUID_".docx"
    Set jsonContentString = {}.%FromJSON(%request.Content)
    Set sc = ##class(dc.iris4word.WordUtil).GenerateWordFileFromJSON(jsonContentString.%ToJSON(), "/tmp/"_template_".docx", filePath)

    Set %response.NoCharSetConvert=1
    Set %response.Headers("Access-Control-Allow-Origin")="*"
    Do %response.SetHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    Do %response.SetHeader("Content-Disposition","attachment;filename="""_tUUID_".docx"_"""")
    
    Set stream=##class(%Stream.FileBinary).%New()
    Set sc=stream.LinkToFile(filePath)
    Do stream.OutputToDevice()
    
    Return sc
}

O ClassMethod ##class(dc.iris4word.WordUtil).GenerateWordFileFromJSON recebe os dados na forma de um %DynamicObject, o caminho do template do Word e o caminho do arquivo onde o documento Word final deve ser criado. Agora você tem um arquivo Word para enviar ao usuário como resposta. Muito fácil!!

No próximo artigo, explicarei as tecnologias usadas para criar o iris4word e como criar templates complexos para gerar qualquer tipo de documento Word. Até breve.

Discussão (0)1
Entre ou crie uma conta para continuar