segunda-feira, 6 de junho de 2016

GO GO! Congresso de TI

Pessoal, hoje é o primeiro dia do evento da 4ª Edição do Congresso de TI.
Segue abaixo a lista das transmissões de hoje:

GO GO! Congresso de TI

Todas as palestras de hoje ficarão liberadas das 07hrs da manhã até 23:59hrs - horário de Brasília.
Allan Romanato
 
André de Almeida

Carlos Ferreira

Christyano Malta

David Arty

Fillipe Cordeiro

Luis Felipe Fernandes

Marco Enes

Plínio Ventura


Palestras bastante diversificadas para todos os gostos rs
Importante que você avalie a transmissão das palestras. Dessa forma os idealizadores poderão estar sempre melhorando a qualidade do evento.

--------------------------------------------------------------------------
PS: Receba também o Link das Palestras do Congresso de TI no seu Smartphone:

1 - Instale o aplicativo TELEGRAM no seu celular caso ainda não tenha. 

2 - Após instalar, digite no seu Telegram por @congressodeti ou acesse o link: http://telegram.me/congressodeti

3 - Clique no ícone "Canal Congresso de TI" e depois em ENTRAR. Pronto, agora você já estará incluído no nosso canal do Telegram para receber todos os links de transmissões das palestras durante o evento.
--------------------------------------------------------------------------

Até a próxima!

sexta-feira, 3 de junho de 2016

GO GO! Técnicas de Invasão

Mais um evento super bacana online e totalmente grátis que você não pode perder ," Técnicas de Invasão em Cenários Reais".

O evento acontecerá dos dias 06 à 13 de Junho, e nesse treinamento você vai aprender técnicas que quebram os principais pilares de Segurança da Informação, como criminosos (crackers) comprometem Redes, Sistemas, Aplicações WEB Infraestruturas físicas.


Para se inscrever basta clicar nele link aqui, clicar no botão "Realizar inscrição", informar seu email e pronto! Você um email de confirmação e só esperar o dia do treinamento.

Bruno Fraga que é o idealizador do projeto, deixou esse vídeo com uma ferramenta muito legal pra já ter uma ideia do que o curso esta preparando.




Pessoal não perca essa oportunidades, muito se fala sobre segurança da informação, hacker e dificilmente se encontra um treinamento grátis para mostrar como as coisas funcionam.

Até a próxima!

quinta-feira, 2 de junho de 2016

Web Scraping com Jsoup

Fala galera!

Em nosso post sobre web scraping, falamos um pouco do que é e como é utilizado esta técnica muito útil. Então resolvi compartilhar com vocês um implementação simples de web scraping em java utilizando a biblioteca Jsoup.



A biblioteca Jsoup foi desenvolvida para trabalhar com HTML para realizar a extração e manipulação de dados, usando métodos do DOM, CSS e métodos jQuery. É um projeto open source e está disponível no GitHub.

Let's get started!

Antes de começar, é preciso acessar a página de download do Jsoup e baixar os jars disponíveis. Se você utiliza maven, poderá copiar a dependência e inserir em seu pom.xml:

<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupid>org.jsoup</groupid>
  <artifactid>jsoup</artifactid>
  <version>1.9.2</version>
</dependency>

Assim que estiver tudo certo em seu projeto, criaremos uma classe de teste.
Esta classe ficará da seguinte forma:

package com.deviscoming;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class ExemploJSoup {

 public static void main(String[] args) {

  try {
   Document doc = Jsoup.connect("http://www.google.com").get();
   String titulo = doc.title();
   System.out.println("Título do site: " + titulo );
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

No console de sua IDE será possível visualizar a mensagem com o título do site:

Título do site: Google

Para obter toda a página Html, é preciso utilizar o método estático Jsoup.connect() e utilizar o método get(), pois, desta forma, você obterá um objeto Document. Este objeto possui um documento HTML armazenado internamente. Então para obter informações da página, basta utilizar os métodos disponíveis a partir deste objeto.

Caso queira obter elementos específicos, você pode utilizar o método select(). Ele retorna um objeto Elements, sendo este objeto um conjunto de objetos Element.

package com.deviscoming;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class ExemploJSoup {

 public static void main(String[] args) {

  try {
   Document doc = Jsoup.connect("http://www.google.com").get();
   String titulo = doc.title();  
   //System.out.println("Título do site: " + titulo );
   
   //exibe todas as tags a existentes na página html   
   System.out.println("Links do site (tags a): " + doc.select("a"));

   //exibe o texto da tag a      
   System.out.println("href: "+doc.select("a").text());
    
   //exibe todas as tags que possuem o atributo href   
   Elements elements = doc.select("a[href]");
   for(int i = 0; i < elements.size();i++){
    System.out.println("href: "+elements.get(i).text());
   }     
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

Para ter mais informações sobre essa biblioteca, aconselho a acessarem o site do Jsoup, lá tem várias dicas, downloads e a documentação completa para consulta. Acessem também o site Raspando web com Jsoup, de onde foi tirado o conteúdo deste post e lá tem mais dicas e informações essenciais para o desenvolvimento do seu projeto. E também acessem o GitHub, analisem, estudem e quem sabe você não acaba se tornando parte da equipe de desenvolvimento? rsrsr

Até mais!

;) 

Você sabe o que é Web Scraping?

Web Scraping (raspagem) é uma técnica de engenharia de software muito utilizada por empresas para extrair dados/conteúdos existentes em websites. Uma forma mais simples de explicar, é um programa que faz leitura de códigos HTML (HyperText Markup Language) de páginas web e faz análises dos dados obtidos.


Você sabe o que é Web Scraping?



É uma ferramenta muito útil para repórteres, pois facilita a busca de informações pela web e facilita a análise dos dados, sendo que é possível, além de extraí-los, visualiza-los e manipulá-los em um arquivo comum, planilhas e/ou banco de dados. E a maior vantagem são para aqueles que sabem codificar.



Como tudo tem um limite, existem regras que delimitam o uso e acesso dessa técnica. É preciso estar ciente que, se você fazer o uso de scraping em sites que não permitem o mesmo, isso pode ser considerado hacking e não será legal se descobrirem. Por isso o ideal é saber se o que pretende fazer na web é permitido e legal por ambas as partes.



Bom, mas existem websites que fornecem informações ao público e que permitam o uso dessa técnica, basta saber onde e para que usar e deixar a imaginação fluir.


Até mais!

;)

sexta-feira, 27 de maio de 2016

SyntaxHighlighter #3 - Identidade visual

E ai pessoal, esse é o terceiro post sobre SyntaxHighlighter (SHL), e nesse post vamos aprender a alterar a cor da nossa ferramenta, vamos personalizar a identidade visual.

SyntaxHighlighter #3 - Identidade visual

Bom é muito simples! No post anterior eu expliquei cada um dos arquivos necessários para o SHL funcionar corretamente, e um desses arquivos era referente a cor da nossa ferramenta, que por default e no exemplo anterior usamos esse arquivo css aqui: shThemeDefault.css


<!-- configuracao do tema, css usado, default, branco, inicio -->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>

Para o blog DevIsComing eu achei que essa identidade era a adequada e a que mais combinava com o restante do site, mas nos temos vários opções:

NomeArquivo
DefaultshThemeDefault.css
DjangoshThemeDjango.css
EclipseshThemeEclipse.css
EmacsshThemeEmacs.css
Fade To GreyshThemeFadeToGrey.css
MidnightshThemeMidnight.css
RDarkshThemeRDark.css

Clicando em um dos itens na coluna "Nome" será possível ver o resultado da sua ferramenta quando aplicado o css localizado na coluna "Arquivo".

E para facilitar, caso tenha optado por hospedar o SHL no seu servidor, clicando em um dos itens da coluna "Arquivo", você será redirecionado para a CDN onde estão localizados os arquivos .css, dessa forma basta clicar com botão direito na página, selecionar "Salvar como" e com um cliente FTP enviar o arquivo .css para o seu servidor e realizar as alterações no seu fonte. 

<!-- configuracao do tema, css usado, midnight, azul escuro, inicio -->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeMidnight.css' rel='stylesheet' type='text/css'/>

A vantagem de ter nesse momento os arquivos no seu servidor e não estar usando a CDN do SHL, é que caso deseje alterar alguma coisa, basta editar o arquivo css e será possível customizar ainda a identidade da sua ferramenta.

Sobre a identidade visual é isso!
No próximo post eu vou estar explicando sobre o atributo class, os parâmetros que podemos estar passando para nossa ferramenta e algumas configurações no script de inicialização do SHL.

Até a próxima!

quinta-feira, 26 de maio de 2016

Ferramentas #5 - SlimDrivers

Se você já formatou um computador e não tinha o CD com os drivers necessários, sabe o sofrimento que é ficar procurando esses arquivos na internet.
Existem alguns fabricantes que ainda disponibilizam uma lista com os drivers necessáros de cada modelo do seu produto, o que facilita bastante o trabalho. Mas, não todos!

Ferramentas #5 - SlimDrivers


Atualmente existem centenas se softwares que listam o nome dos drive que a sua máquina utiliza, mas poucos são os software decentes que listam os drivers para download.
Drive é a peça física da sua máquina, enquanto que Driver é o software necessário para que seu drive funcione. Para facilitar o entendimento, driver em uma tradução ao pé da letra significa motorista, e é exatamente essa a sua função "digirir", controlar o drive.
Atualmente eu tenho utilizado o SlimDrivers, que é um software muito bom, para localizar e fazer download dos seus drivers não instalados ou de atualizações dos drivers já instalados.
O software tem uma interface bastante simples, o que facilita o trabalho, não possui aquelas propagandas pra todo lado, ou links que direcional pra sites de parceiros, não tem limite de download tanto de tamanho do arquivo quanto quantidade de drivers atualizados, não faz download de arquivo nenhum para a sua máquina, ele localiza o driver necessário e instala e o mais importante é FREE... enfim o melhor software que encontrei para esse fim.

Anteriormente eu usava o DriverMax, no entanto, é necessário cadastro, agora possui limite de atualização de drivers, propaganda... 

Caso precisem pra baixar ou atualizar algum driver da sua máquina, fica a dica de utiliza o SlimDriver.

Até a próxima!

quarta-feira, 25 de maio de 2016

GO GO! Semana intensiva de Games

Mais um evento sobre games e dessa vez é um INTENSIVO DE GAMES.
Serão 07 palestras totalmente online e gratuitas que acontecerá dos dias 30/05 á 07/06 ás 08:00 horas da noite. Se prepara ai pra não perder nenhuma palestra.

GO GO! Semana intensiva de Games

Para participar basta acessar esse link aqui, clicar no botão "Eu quero assistir as palestras" preencher um formulário com seu nome e email e pronto! Só aguardar...

O evento vai ser bastante interessante, os palestrantes vão abordar temas como design, animação, modelagem 2D e 3D, Unity, Unreal entre outros.

Caso sua semana seja corrida ou tenha tenha interesse em um tema mais que em outro poderá acompanhar a agenda que eles preparam com informações do palestrante e o tema abordado. Confira!

GO GO! Semana intensiva de Games


É isso ai pessoal!
Até a próxima..

terça-feira, 24 de maio de 2016

SyntaxHighlighter #2 - Instalação

Pessoal...

No post anterior eu expliquei o que era o SHL - SyntaxHighlighter, você pode conferir aqui. Apresentação feita, agora vamos iniciar a configuração da nossa ferramenta. Mas, para isso precisamos decidir se teremos o nosso código salvo em um servidor próprio ou se usaremos uma CDN para acessar os arquivos necessários para seu funcionamento.


SyntaxHighlighter #2 - Instalação

Caso tenha optado por ter o código em um servidor próprio, acesse o site oficial SyntaxHighlighter, localize no menu o link para download. Atualmente a "current version" é a 3.0.83, mas você pode optar por escolher versões anteriores.
Nesse post vamos trabalhar com a versão atualizada.

Aguarde o download do arquivo finalizar, acesse seu servidor usando FileZilla ou outro cliente FTP que preferir, e faça o upload do SLH compactado para seu servidor, extraia os arquivos e mantenha-os em um diretório que preferir.

A partir de agora, independente da forma escolhida (CDN ou servidor próprio) os passos deverão ser realizados.
Primeiro vamos adicionar em nosso código fonte o caminhos onde nossos arquivos se encontram. Se você acompanha o blog deve ter visto o post onde relato o problema que tivemos ao usar a CDN do Google, e como solução adotamos a CDN do próprio criados da ferramenta SHL.

Exatamente antes da tag "</body>" vamos adicionar esse código aqui:

<!-- inicio configuracao do Syntax Highlighting -->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>

<!-- configuracao do tema, css usado, default, branco, inicio -->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
 
<!-- adicionando Script para SyntaxHighlighter -->
<script type='text/javascript'>
  SyntaxHighlighter.config.bloggerMode = true;
  SyntaxHighlighter.all();
</script>
 
<!-- configuracao de linguagens usadas, inicio -->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<!-- configuracao de linguagens usadas, fim -->
 
<!-- fim configuracao do Syntax Highlighting -->


Caso você tenha optado por salvar os arquivos no seu servidor, será necessário alterar esses caminhos para o local onde você hospedou a ferramenta.

Para facilitar a explicação e entender o que é cada um desses arquivos que adicionamos, fiz marcações no código (que também irei ensinar):
Linha 2 e 7 são arquivos relacionados ao core do SHL, são arquivos necessários para renderizar a ferramenta (css default) e para o funcionamento da ferramenta;
Linha 5 é o arquivo .css onde você da identidade visual para sua ferramenta SHL. Existem algumas identidades prontas e vou mostrar quais são e como configura-las; 
O trecho referente a linha 9 é o script para inicializar a ferramenta;
A partir da linha 15 são arquivos que permitem você utilizar o SHL para formatar código fonte das respectivas linguagens. Caso você tenha um código Java, pretende formata-lo usando o SHL é necessário que esse arquivo "shBrushJava.js' esteja adicionado no seu código.
As configurações necessárias estão prontas, nesse ponto já podemos utilizar o SHL e formatar nossos códigos em posts diversos. Mas para isso a ferramenta precisa de um marcador, e o marcador utilizado é a tag "<pre>".
No entanto essa tag por si só não será suficiente para formatar seu código, sendo necessário adicionar o atributo class="brush: java, xhtml, xml, sql", que é o minimo necessário para que nosso código fique formatado.

Para um exemplo simples, clique em criar um novo post, normalmente o editor esta no modo "Escrever", altere para o modo "HTML" e escreve o trecho de código abaixo:

<pre class="brush: java">
public class Devic {

    public static void main(String[] args) {

        System.out.println("Olá pessoas!");
    }
}
</pre>


O resultado do código acima é este:
public class Devic {

    public static void main(String[] args) {

        System.out.println("Olá pessoas!");
    }
}

Faça o teste no seu blog e veja o resultado.

No próximo post eu vou explicar sobre os atributos que você inserir na ferramenta e como alterar a identidade visual.
É isso, e até a próxima!

Ferramentas #4 - JSONLint

É comum hoje em dia falarmos em JSON como alternativa de uso do XML, e isso está agradando a muitos, se não todos os profissionais da área, pois é mais simples fácil e intuitivo seu uso. Em meio a alta usabilidade e facilidade do JSON, muitas ferramentas foram desenvolvidas com o objetivo de facilitar o desenvolvimento e uso desse subconjunto de linguagem de programação, por exemplo o Jackson.


Em alguns casos, em meio ao desenvolvimento, precisamos verificar se nosso JSON está correto para uso. Após efetuar algumas pesquisas achei este site muito interessante que auxilia de forma rápida e simples a verificação da integridade de nosso JSON.

O site chamado JSONLint, permite que você cole o conteúdo JSON gerado ou recebido e valida se está corretamente formatado. Seu uso é muito simples, basta colar o conteúdo dentro do único campo texto e clique em Validate JSON em poucos segundos você receberá o retorno da validação.

Exemplo



Vou inserir o conteúdo abaixo com uma vírgula faltando:


{
 "carro": [

  {
   "id": 1,
   "Modelo": "Celta",
   "Placa": "RRR1303"
  }

  {
   "id": 2,
   "Modelo": "Palio",
   "Placa": "RRR0903"
  }

 ]
}

 Veja a seguir o retorno do site com relação a este erro:



Espero tenham gostado dessa dica, é um site leve, simples e fácil de usar e que nos ajuda a encontrar um erro que as vezes é coisa boba e que não percebemos.

Até mais!

;)

Integração Advpl x Word #2

Fala galera!

Continuando o post sobre integração Advpl x Word, hoje vamos detalhar sobre a codificação da rotina. Vamos criar um novo programa no Developer Studio e nomeá-lo. Darei o nome de AdvplDoc.prw, mas você pode definir o nome que preferir.

Integração Advpl x Word #2


Primeiramente vamos dar uma olhada no código fonte e posteriormente passaremos ponto a ponto com uma breve explicação.

#include "protheus.ch"
#include "rwmake.ch"                 
#include "tbiconn.ch"
#include "msole.ch"
/**
_________________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+---------------------------------------------------------------------------+¦¦
¦¦¦Programa  ¦ ADVPLDOC  ¦ Autor ¦ Renan Ramos              ¦ Data ¦ 19.05.16 ¦¦¦
¦¦¦----------+----------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Realiza integração do Protheus com documentos Word.            ¦¦¦
¦¦+---------------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
*/
user function advplDoc  

local hWord 
local cTitulo1  := "Arquivo Word"
local cExtensao := "Modelo Word | *.dot | *.dotx"
local cFileOpen := ""

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01"
 
cFileOpen := cGetFile(cExtensao, cTitulo1,,,.T.)          
 
hWord := OLE_CreateLink()

OLE_SetProperty(hWord, oleWdVisible,   .T.)
OLE_SetProperty(hWord, oleWdPrintBack, .F.) 

OLE_NewFile(hWord, cFileOpen)

dbSelectArea("SA1")
dbSetOrder(1)                                                                                        
dbGoTop()
                                              
OLE_SetDocumentVar(hWord, "A1_COD"   ,SA1->A1_COD)
OLE_SetDocumentVar(hWord, "A1_NOME"  ,SA1->A1_NOME)
OLE_SetDocumentVar(hWord, "A1_END"   ,SA1->A1_END)
OLE_SetDocumentVar(hWord, "A1_BAIRRO",SA1->A1_BAIRRO)
OLE_SetDocumentVar(hWord, "A1_MUN"  ,SA1->A1_MUN)
OLE_SetDocumentVar(hWord, "A1_EST"   ,SA1->A1_EST) 

OLE_UpdateFields(hWord) 
OLE_saveFile(hWord)                                
OLE_PrintFile(hWord,"ALL",,,1)

cFileSave := subStr(cFileOpen,1,At(".",trim(cFileOpen))-1)
OLE_saveAsField(hWord, cFileSave+".doc")

OLE_closeLink(hWord)

return

Como podem perceber, é um fonte pequeno sem muitas linhas. Um ponto fundamental para conseguir realizar a comunicação é lembrar de incluir a biblioteca msole.ch, pois esta biblioteca permite que você possa utilizar as funções para efetuar a comunicação com o Word.

A biblioteca tbiconn.ch permite que você utilize o comando PREPARE ENVIRONMET EMPRESA, isto é muito útil, pois permite que você faça o teste da rotina sem ter a necessidade de acessar o Protheus e fazer todo o processo desde o login até a execução do programa. Para utilizá-lo, basta adicionar a empresa (no meu caso 99, pois é base teste) e a filial. Seu objetivo é inicializar o ambiente no qual será testada a rotina.

A método OLE_CreateLink() faz a conexão entre o Protheus e o MS-Office. Para verificar se a conexão foi realizada com sucesso, é indicado utilizar uma variável do tipo numérico (handle) para que receba o retorno desta função. Se o retorno da função for 0, a conexão ocorreu com sucesso, mas caso seja -1, houve problema na conexão.

Assim que a conexão estiver estabelecida, utilizaremos o método OLE_NewFile(nHandle, cPath) que possui dois parâmetros:

  • nHandle: é o valor retornado da método OLE_CreateLink();
  • cPath: é o diretório onde se encontra o arquivo que receberá os valores do Protheus.
Na parte seguinte do código, temos a conexão com banco (SA1), onde ordenamos e posicionamos nos registros satisfatórios.

Como em minha base tenho somente um cliente registrado, não foi necessário fazer um filtro e posicionar em um registro específico. Então, após posicionar ou filtrar no registro relacionado ao cliente desejado, vamos setar as variáveis com os valores correspondentes aos campos da tabela.

A método OLE_SetDocumentVar() define o conteúdo que será passado à variável que inserimos no documento no post anterior. Lembre-se que o nome da variável nesta função deve ser a mesma que foi inserida no documento Word, mas não necessariamente na mesma sequência.

Na sequencia temos três importantes métodos que são descritos a seguir:
  • OLE_UpdateFields: atualiza todas as variáveis do documento word criado;
  • OLE_saveFile: salva o documento atualizado;
  • OLE_PrintFile: executa a impressão do arquivo word. O parâmetro definido como "ALL" define que seja impresso todo documento.
Ao final do fonte, é chamado o método OLE_CloseLink() que é responsável por encerrar a conexão entre Protheus e Word.

Bom galera, espero que este post ajude vocês a desenvolverem uma rotina que facilite a vida do usuário. Acessem nosso GitHub, todos os códigos - inclusive o desse post - estão disponíveis para consultas e uso.

Até mais!

;)