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.
.png)
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:
- Se você usa IPM/ZPM:
zpm:USER>install iris4word
- Se você usa Docker:
- git clone https://github.com/yurimarx/iris4word.git
- docker-compose up -d --build
- Abra o Postman (para executar o exemplo da API REST)
- Importe a coleção de exemplos de (https://raw.githubusercontent.com/yurimarx/iris4word/refs/heads/master/iris4word.postman_collection.json):
.png)
- 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:
.png)
- O processo de upload enviará o template para o servidor para ser usado pelo iris4word.
- 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"
}
}
- No botão Send, selecione a opção "Send and Download":
.png)
- Veja os resultados:
.png)
- 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.