Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Button
TextoVoltar
Linkhttps://tdn.totvs.com/pages/releaseview.action?pageId=857586913



API de Integração entre Progress e Microsoft Word (001)


Nome Físico: utp/utapi027.p

Nome do Include com Parâmetros: utp/utapi027.i

Versão de Integração: 001

Objetivo: 

Criação de documentos, baseados em formulários para o Microsoft Word, sendo que a decisão de gravar ou não o documento caberá ao usuário final.

Pré-requisitos: 

É necessário ter o MS-WORD com uma versão compatível com o produto. Para mais detalhes consulte a documentação localizada em: https://tdn.totvs.com/pages/releaseview.action?pageId=195301010




Considerações Gerais


  • A API recebe como parâmetros valores, que serão utilizados para o preenchimento de campos de formulário existentes no documento;
  • A include {utp/utapi027.i} contém as definições das Temp-Tables que devem ser passadas como parâmetros à API utp/utapi027.p. Sendo que a chamada desta include, como a inclusão de valores, deve ser feita antes da chamada da API utp/utapi027.p;
  • A API pode ser executada de forma direta ou persistente. Ela deve ser executada persistente apenas quando for necessário salvar o documento que foi gerado, caso contrário a sua simples execução irá gerar o relatório no word e caberá ao usuário informar se deseja ou não salvar o documento gerado;
  • O procedimento interno pi-salvar recebe como parâmetros o nome do arquivo que se deseja salvar. Caso não seja possível salvar o arquivo, o erro será retornado na temp-table tt-erros (OBS.: Para obter os erros quando o utilitário for executado de forma persistente é necessário utilizar o procedimento interno pi-getErrors que está documento abaxio);
  • O procedimento interno pi-getErrors possui um parâmetro de OUTPUT que é a temp-table de erros(tt-erros). Esse procedimento só deve ser executado para obter os erros quando o utilitário for executado de forma persistente;
  • O procedimento interno pi-finalizar recebe como parâmetros um valor lógico (TRUE/FALSE) que determina se o arquivo do word que foi gerado deve ser fechado ou deve continuar aberto. A execução desse procedimento faz com que todas as referências ao word sejam eliminadas da memória e por isso a sua execução é necessária apenas quando o utilitário for executado de forma persistente.
  • A funcionalidade de inserir documentos só permite que sejam informados arquivos com as seguintes extensões: DOC, XML, HTML, HTM, DOT, RTF e TXT.


Parâmetros de Entrada 



Temp-table tt-configuracao2configuracao: possui as definições, gerais, do arquivo a ser criado.

TEMP-TABLE tt-

configuracao2

configuracao

Atributo

Tipo

Formato

Valor Inicial

versao-integracao

integer

>>9

arquivo

character

x(255)

c:\tmp\utapi012.doc


modelo

character

x(255)


senha-modelo

character



exibir-construcao

logical


No

abrir-word-termino

logical

No

imprimir

Logical


No

* ver Principais Validações da Temp-Table tt-configuracao2configuracao

Atributo

Descrição

versao-integracao

Versão de Integração da APIarquivo

Nome do arquivo a ser criado

modelo

Nome do modelo a ser utilizado para criação do arquivo

senha-modelo

Senha para desproteger o modelo a ser utilizado

exibir-construcao

Exibir construção do arquivo durante o processo

abrir-word-termino

Abrir Microsoft Word após término do processo

imprimir

Imprime o documento



Temp-Table tt-dados: possui as definições, gerais, sobre cada um dos campos a serem preenchidos no documento.

TEMP-TABLE tt-dados

Atributo

Tipo

Formato

Valor Inicial

campo-nome

character



campo-tipo

integer

9


campo-valor

character



* ver Principais Validações da Temp-Table tt-dados

* ver Referência sobre Tipo Campo

Atributo

Descrição

campo-nome

Nome do campo de formulário

campo-tipo

Tipo do campo

campo-valor

Valor a ser inserido no campo





Execução


O programa utp/utapi012utapi027.p  irá executar 2 validações básicas:




1º Validação:

Versão de Integração

O programa irá verificar se o programa chamador está íntegro com a API, e isto ocorre através da ao realizar a verificação da versão de integração passada como parâmetro. Caso a versão esteja seja incompatível, a API abortará finalizará a execução retornando o código de erro 3941.



2ª Validação:

Inconsistência ou Insuficiência dos Dados

O programa irá verificar a inconsistência e/ou insuficiência dos dados, e isto ocorre através da ao realizar a verificação dos dados passados como parâmetros. Caso os dados sejam inconsistentes ou insuficientes, a APIabortará finalizará a execução retornando o código de erro 8646.



Cabe ao programa de origem, verificar os registros que estão com errochamador verificar os possíveis erros ocorridos durante a execução da API.

* ver Principais Validações da Temp-Table tt-configuracao2configuracao
* ver Principais Validações da Temp-Table tt-dados




Parâmetros de Saída


No retorno da execução do utp/utapi012utapi027.p, será retornado um dos valores via RETURN-VALUE:


NOK: 

Criação do arquivo sem sucesso, pois os dados passados como parâmetros, através das pelas Temp-Tables, são inconsistentes ou foram insuficientes;

OK: 

Criação do arquivo com sucesso.







Outras Informações


Abaixo se encontram as principais validações a serem executadas em cada uma das Temp-Tables de entrada utilizadas pelo procedimento interno pi-executepela API utp/utapi027.p.

Principais Validações da Temp-Table tt-configuracao2configuracao:

  • Existência de dados na Temp-Table tt-configuracao2;
  • Se os parâmetros enviados para a API indicarem que o documento deve ser impresso e não existe nenhuma impressora cadastrada no Windows a Api retornará o erro 25001.
  • Inexistência do arquivo a ser criado, sendo passado como parâmetro no campo: tt-configuracao2.arquivo;
  • configuracao;
  • Existência do modelo a ser utilizado, sendo passado como parâmetro no pelo campo : tt-configuracao2configuracao.modelo;
  • Integridade dos dados.


Principais Validações da Temp-Table tt-dados :

  • Existência de dados na Temp-Table tt-dados;
  • Compatibilidade entre os valores dos campos e seus respectivos tipos de campos;
  • Integridade dos dados.


A seguir se encontram referências sobre os valores que alguns campos podem assumir:


Referência Tipo Campo

01 -  Check-Box

02 -  Drop-Down

03 -  Text-Input

Atributo imprimir

Quando o atributo imprimir for YES, o documento será impresso. O formulário será enviado para a impressora padrão do windows.

Pode-se usar a linha de comando SYSTEM-DIALOG PRINTER-SETUP para alterar a impressora que será utilizada na impressão (veja exemplo abaixo). É importante ressaltar que a única informação utilizada pela API, é o nome da impressora selecionada. Todos os demais parâmetros, da caixa de dialogo exibida, serão desconsiderados pela API.

Caso o nome da impressora retornada pelo Progress, utilizando o comando session:printer-name não seja uma impressora válida para o ms-word foram disponibilizadas as procedures:

04 - Imagem (pode ser apenas uma parte do propath ou deve ser o caminho completo)

05 - Arquivo (pode ser apenas uma parte do propath ou deve ser o caminho completo)

pi-getImpressora  .

Retorna uma String com a impressora atualmente configurada. Ex:

  • run pi-getImpressora in h-utapi012 (output cImpressora)

pi-setImpressora 

É possível atribuir um valor qualquer a impressora, este valor será repassado ao ms-word como destino da impressão. Ex:

run pi-setImpressora in h-utapi012 (input session:printer-name + “ on “ + session:printer-port).





Exemplo


Abaixo programa exemplo de utilização da API.

Instruções:

  • Crie um formulário no Word com três quatro campos texto, os campos precisam ter os nomes (nome, endereço, telefone, imagem, arquivo) e grave como um modelo do Word no diretório c:\tmp com o nome de  de a.dot.
  • O valor do campo imagem do exemplo abaixo deve ser substituído pelo caminho de uma imagem existente na máquina onde o programa será executado.
  • O valor do campo arquivo do exemplo abaixo deve ser substituído pelo caminho de um arquivo existente na máquina onde o programa será executado.
  • Execute o programa abaixo:
Expandir
titleClique aqui para visualizar...
Bloco de código
languageruby
{utp/utapi012utapi027.i}              
run utp/utapi012.p persistent set h-utapi012.                                                  
SYSTEM-DIALOG PRINTER-SETUP.  /*seleciona impressora*/
os-delete value("c:\tmp\a.doc").

create tt-configuracao2configuracao.       
assign tt-configuracao2configuracao.versao-integracao = 1
       tt-configuracao2.arquivo = "c:\tmp\a.doc" /*arquivo que será gerado*/
       tt-configuracao2configuracao.modelo  = "c:\tmp\a.dot"
 /*arquivo que contem o formulário*/
       tt-configuracao2configuracao.senha-modelo = ""
           tt-configuracao2configuracao.exibir-construcao = no.
       tt-configuracao2.abrir-word-termino = no
       tt-configuracao2configuracao.imprimir = yes. /*imprime o documento*/no.

create tt-dados.
assign tt-dados.campo-nome = "Nome"
           tt-dados.campo-tipo = 3
           tt-dados.campo-valor = "Datasul - Tecnologia".         

create tt-dados.
assign tt-dados.campo-nome = "Endereco"
           tt-dados.campo-tipo = 3
           tt-dados.campo-valor = "Santos Dummond, 831".         

create tt-dados.
assign tt-dados.campo-nome = "telefone"
           tt-dados.campo-tipo = 3
           tt-dados.campo-valor = "(47) 441-7000".         

/*-------------------------------------------------------------------*/
run pi-execute in h-utapi012create tt-dados.
assign tt-dados.campo-nome = "imagem"
           tt-dados.campo-tipo = 4
           tt-dados.campo-valor = "c:\tmp\amostra.jpg".
create tt-dados.
assign tt-dados.campo-nome = "arquivo"
           tt-dados.campo-tipo = 5
           tt-dados.campo-valor = "c:\tmp\arquivo.doc".

run utp/utapi027.p
                 (input-output table tt-configuracao2configuracao,
                  input-output table tt-dados,
                  input-output table tt-erros).
/* Este código em comentário é um exemplo de como utilizar a API para salvar o documento gerado. 
/*Quando for utilizada essa codificação é necessário comentar a execução da API que se encontra acima.

DEFINE VARIABLE hApi AS HANDLE     NO-UNDO.

run utp/utapi027.p PERSISTENT SET hApi
                 (input-output table tt-configuracao,
                  input-output table tt-dados,
                  input-output table tt-erros).

RUN pi-salvar IN hApi (INPUT "c:\tmp\teste.doc").

RUN pi-finalizar IN hApi (INPUT TRUE).

RUN pi----------------------------------------------------------*/
getErrors IN hApi (OUTPUT TABLE tt-erros).

DELETE OBJECT hApi.
*/

if return-value = "NOKnok" then do: 
    for each tt-erros: 
        disp tt-erros with 1 col width 500. 
    end.
end. 
/*-------------------------------------------------------------------*/                 
Delete procedure h-utapi012.    
/*-------------------------------------------------------------------*/             
    
              
     
    


Técnicas de Importação/Importação


Técnica de exportação de dados:

 

Incluída na release 12.1.23, esta técnica visa facilitar as simulações dos problemas sem a necessidade de efetuar parametrizações de negócio (ou dados de negócio).

            Para gerar os dados necessários para a simulação é necessário que a API tenha a técnica implementada e esteja com o extrato de versão ativo. Seguindo isto, serão gerados no diretório temporário da sessão, alguns arquivos com extensão .json e e nomeados de acordo com as as temp-tables recebidas recebidas como parâmetro para gerar o relatório.

Estando com estes arquivos gerados (ex..: “tt-temp-table.json”), para simular o problema, basta efetuar a execução da API lendo estes registros e os passando como parâmetro.



Técnica de importação dos dados:

 

Simulação com os arquivos .Json oriundos da técnica acima, abaixo . Abaixo um exemplo de código para a utapi012 utapi027 efetuando um input desses registros:



Bloco de código
languageruby
{utp/utapi012utapi027.i}             

run utp/utapi012.p persistent set h-utapi012.                                                 




os-delete value("c:\tmp\a.doc").




              


TEMP-TABLE tt-configuracao:READ-JSON("file", "C:\tmp\teste2\tt-configuracao.json", "empty").
TEMP-TABLE tt-configuracao2dados:READ-JSON("file", "C:\tmp\teste2\tt-configuracao2dados.json", "empty").

TEMP-TABLE tt-dadoserros:READ-JSON("file", "C:\tmp\teste2\tt-dadoserros.json", "empty").

/*
// Esta execucao somente preenche o formulario, sem salvar.
run utp/utapi027.p

run pi-execute in h-utapi012                 (input-output table tt-configuracao,
                  input-output table tt-dados,
                  input-output table tt-erros).
                  */

//Este codigo em comentario a um exemplo de como utilizar a API para salvar o documento gerado. Quando 
//for utilizada essa codificacao e necessario comentar a execução da API que se encontra acima.

DEFINE VARIABLE hApi AS HANDLE     NO-UNDO.

run utp/utapi027.p PERSISTENT SET hApi
                 (input-output table tt-configuracao2configuracao,

                                               input-output table tt-dados,

                              input                  input-output table tt-erros).

RUN pi-salvar IN hApi (INPUT "c:\tmp\teste.doc").
RUN pi-finalizar IN hApi (INPUT TRUE).
RUN pi-getErrors IN hApi (OUTPUT TABLE tt-erros).

DELETE OBJECT hApi.

if return-value = "NOK" then do: 

       for each tt-erros:

        
        disp tt-erros with 1 col width 500. 

       end.

end.                      

Delete procedure h-utapi012.