Você está na página 1de 82

Boas Vindas

Apresentação
Conteúdo
Programático
► ENVIO DE EMAIL

► DOWNLOAD E UPLOAD FTP

► WORKFLOW (CONFIGURAÇÃO, ENVIO E RETORNO)

► WORKFLOW DE RELATÓRIOS

►WORKFLOW DE ROTINAS

► WEB SERVICE (CONFIGURAÇÃO)

► ADVPL ASP (CONCEITOS)

► ADVPL ASP COM BASE DE DADOS


ADVPL III
Rotinas da Web
Envio de Email
Parâmetros que contem configuração de conexão

Private cSrv := GetMV("MV_RELSERV")) // smtp.ig.com.br


Private cMail := GetMV("MV_RELACNT")) // meuemail@ig.com.br
Private cPass := GetMV("MV_RELPSW")) // 123abc
Private lAuth := GetMv("MV_RELAUTH") //Requer Autenticação?
Private cPswA := GetMV("MV_RELAPSW")) // 123abc

Ou

Private cSrv := GetMV("MV_WFSMTP") // smtp.ig.com.br


Private cMail:= GetMV("MV_WFACC") // meuemail@ig.com.br
Private cPass:= GetMV("MV_WFPASSW") // 123abc
Private lAuth := GetMv("MV_RELAUTH") //Requer Autenticação?
Private cPswA := GetMV("MV_RELAPSW")) // 123abc
//Conecta ao Servidor SMTP
CONNECT SMTP SERVER cSrv; //Nome do servidor SMTP
ACCOUNT cMail; //Conta de Email
PASSWORD cPass; //Senha de conexão
RESULT lResul //Resultado da Conexão

//Retorna se conseguiu fazer autenticação


lOk := MailAuth(cEmail,cPass)
// Abre janela perguntando o usuario e senha para fazer autenticacao
lOk := QAGetMail()

//Atribui retorno de envio de email na variável cError


GET MAIL ERROR cError
//Envio de email
SEND MAIL FROM cDe ;
TO cPara;
SUBJECT cAssunto;
BODY cMsg;
CC cCC;
CCO cCCO;
ATTACHMENT cAnexo;
RESULT lSend

//Desconecta do servidor
DISCONNECT SMTP SERVER

Veja programa E_MAIL.PRW


Exercícios
Fazer um programa que envie para o email de cada cliente
(A1_EMAIL) as seguintes informações:

Codigo: 999999 (A1_COD)


Nome: XXXXXXXXXXXXXXXX (A1_NOME)
Endereço: XXXXXXXXXXXXXXXX (A1_END)
Telefone: 99 9999 9999 (A1_DDD E A1_TEL)
CPF/CNPJ: 99.999/9999-99 (Tratar mascara PF/PJ)
(A1_CGC)

Assunto : “Cadastro “ + Nome reduzido do cliente (A1_NREDUZ)


Ex. HTML <strong> Negrito </strong> <em> Italico </em>
Exercícios
Fazer um programa que envie para você mesmo um email
com todos os fornecedores com as seguintes informações:
Codigo Loja Nome Endereço
999999 99 XXXXXXXXXX XXXXXXXXXXXXXX
999999 99 XXXXXXXXXX XXXXXXXXXXXXXX

No Assunto coloque “Fornecedores “ + cSeuNome


Ex. HTML
<table>
<tr><td>Coluna1 </td><td>Coluna2 </td><td>Coluna3 </td><td>Coluna4 </td></tr>
<tr> <td>lin1col1</td><td>lin1col2</td><td>lin1col3 </td><td>lin1col4</td></tr>
<tr> <td>lin2col1</td><td>lin2col2</td><td>lin2col3 </td><td>lin2col4</td></tr>
</Table>
FTP
File Transfer Protocol
//Conecta a um FTP

FTPConnect ( cServer, nPorta, cUser, cPass )

Argumento Obrigat. Tipo Descrição


cServer Sim C Servidor de FTP
nPorta Sim N Porta de FTP, Default 21
cUser Sim C Nome de usuário de FTP
cPass Sim C Senha de FTP

Retorno: .T. ou .F.

Ex. FTPConnect("ftp.advpl.com.br", 21, "aluno", "123456")


//Retorna conteudo do diretorio corrente do FTP

FTPDirectory ( cMascara , cAttr)

Tip
Argumento Obrigat. Descrição
o
cMascara Sim C Máscara dos arquivos a retornar, ex. “*.*”
cAttr Não C Atributo dos arquivos a retornar
Retorno: array com arquivos que obedecem os argumentos.

Ex: FTPDirectory("*.*", "R")


FTPDirectory("*.*", “D") // Para listar os diretórios
//Sobe arquivos para o FTP

FTPUpLoad( cFileLocal, cFileFTP )

Tip
Argumento Obrigat. Descrição
o
Caminho completo no server, o caminho
cFileLocal Sim C
deve estar dentro do rootpath.
cFileFTP Sim C Nome do arquivo no FTP
Retorno: .T. ou .F.

Ex: FTPUpLoad("\system\error.log", "error.log" )


//Baixa arquivos do FTP

FTPDownLoad ( cFileLocal, cFileFTP )

Tip
Argumento Obrigat. Descrição
o
Caminho completo no server, o caminho
cFileLocal Sim C
deve estar dentro do rootpath.
cFileFTP Sim C Nome do arquivo no FTP
Retorno: .T. ou .F.

Ex: FTPDownLoad("\system\error.log", "error.log" )


//Apaga arquivo no FTP no diretório corrente

FTPErase( cFileFTP )

Tip
Argumento Obrigat. Descrição
o
Nome do arquivo no FTP que se quer
cFileFTP Sim C
apagar

Retorno: .T. ou .F.

Ex: FTPErase("error.log")
//Renomeia arquivo no FTP

FTPRenameFile(cFileOri, cFileNew)

Tip
Argumento Obrigat. Descrição
o
cFileOri Sim C Nome do Arquivo original
cFileNew Sim C Nome novo para o arquivo

Retorno: .T. ou .F.

Ex: FTPRenameFile("sigafin.xnu", "sigafin.old")


//Muda diretório no FTP

FTPDirChange( cDirFTP )

Tip
Argumento Obrigat. Descrição
o
cDirFTP Sim C Caminho escolhido

Retorno: .T. ou .F.

Ex: FTPDirChange("\tmp")
//Retorna o nome do diretorio corrente do FTP

FTPGetCurDir( )

Retorno: Nome do diretório.

//Disconecta o FTP

FTPDisconnect( )

Retorno: .T. ou .F.

Veja programa sendftp.prw


//Executa funções em Linux

FTPQUOTE( cComando )

Tip
Argumento Obrigat. Descrição
o
cComando Sim C Comando em linux

Ex: FTPQUOTE(“MKD DIRETORIO”)


Workflow
Usuário Atualiza
Inclui Cliente Cliente Executa a função
de retorno

Job WFRET
Caixa de WFReturn()
Saída

E-Mail Captura a resposta

Resposta Caixa de
(Aprovado ou Reprovado) Entrada

Aprovador
Quando não existir o ambiente environment, É não possível entrar no Wizard
sem o Atalho.
Configuração Wizard

Inserir um job pelo Wizard, escolher Processos Comuns e Clicar


no icone "Novo Processo"
Configuração Wizard

Dar um nome ao Job, escolher o ambiente e colocar a função


WFONSTART para ser executada e clique em finalizar.
A Lista de tarefas utilizada por esse servico é no SXM
Configuração Wizard
Configuração Wizard

Reinicie o Server para que as alterações tenham efeito.


Configuração

Configurador - Ambiente - Workflow – Contas de Email – Incluir


Senha: escola1010
Configuração

Configurador - Ambiente - Workflow – Contas de Email - Incluir


Configuração

Configurador - Ambiente - Workflow – Contas de Email - Incluir


Configuração

Configurador - Ambiente - Workflow – Contas de Email - Incluir


Parâmetros

Configurador - Ambiente - Workflow - Parâmetros WF


Parâmetros
Configurador - Ambiente - Workflow - Parâmetros WF
Parâmetros
Configurador - Ambiente - Workflow - Parâmetros WF
Parâmetros
Configurador - Ambiente - Workflow - Parâmetros WF
Agendamento

Configurador - Ambiente - Workflow - Schedule


Agendamento

Configurador - Ambiente - Workflow – Schedule


Incluir o Envio – Colocar intervalo de 1 em 1 minutos
Agendamento

Configurador - Ambiente - Workflow – Schedule


Incluir o Retorno – Colocar intervalo de 1 em 1 minutos
Criar um processo

Abrir em my projects esses programas e compilar:


100_CAD.PRW
SZ1 ( Criar tabela se não existir)
Campo Inform.
Campo Tipo Tam. Dec. Formato Contexto Propr. Título
Z1_NOME Car 20 @! Real Alt. Nome
Z1_EMAIL Car 40 Real Alt. EMail
Z1_EMAIL1 Car 40 Real Alt. EMail1
Z1_SALDO Num 12 2 @E 999,999,999.99 Real Visual Saldo

Indice: Z1_FILIAL + Z1_NOME -> NICKNAME = NOME

Incluir dados no cadastro do SZ1 utilizando


U_cad()
Criar um processo

110_TRANM1.PRW
SZ1 E SZ2 (Criar SZ2 se não existir)
Campo Inform.
Campo Tipo Tam. Dec. Formato Contexto Propr. Título
Z2_NOME Car 20 @! Real Alt. Nome
Z2_NUMERO Car 4 Real Visual Numero
Z2_ITEM Car 2 99 Real Alt. Item
Z2_DATA Data 8 Real Alt. Data
Z2_TIPO Car 1 Real Alt. Tipo
Z2_HIST Car 20 Real Alt. Historico
Z2_VALOR Num 12 2 @E 999,999,999.99 Real Alt. Valor
Z2_SLDATU Num 12 2 @E 999,999,999.99 Virtual Visual Saldo
Z2_APROV Car 3 Real Visual Aprovado

Indice: 1–Z2_FILIAL + Z2_NUMERO + Z2_ITEM -> NICKNAME = NR_IT


2– Z2_FILIAL + Z2_NOME + Z2_NUMERO + Z2_ITEM -> NICKNAME = NOME_NR_IT

Incluir Dados em Sz2 utilizando U_tranm1()


Criar um processo

Colocar o programa 195_WFSalNeg.prw no projeto e compilar para enviar o


email.

Insira dados de forma que o saldo fique negativo, para enviar um workflow.
Note no console o processo iniciando.
Criar um processo

Linha 47 de 110_tranm1

If SZ1->Z1_Saldo < 0
If ExistBlock("WFSalNeg") // Ponto de Entrada. (Vê se está no RPO)
// O saldo ficou negativo. Envia um WorkFlow para o aprovador.
// A resposta do aprovador (SIM/NAO) sera gravada no campo Z2_Aprov.
u_WFSalNeg(SZ1->Z1_Nome, SZ1->Z1_EMail, SZ2->Z2_Numero, ;
SZ2->Z2_Item, SZ2->Z2_Data, SZ2->Z2_Hist,;
SZ2->Z2_Valor, SZ1->Z1_Saldo)
EndIf
EndIf
Criar um processo

Classe TWFProcess()

//Cria o Objeto
oWF := TWFProcess():New( "APROVA", "Aprovação do Lançamento" )

// Cria uma tarefa escolhendo o HTML


oWF:NewTask( "Aprovacao", "\workflow\190_WFSalNeg.htm" )

// Preenche as variaveis no html.


oWF:oHtml:ValByName("NOME" , cNome )
Criar um processo

// Destinatário do WorkFlow.
oWF:cTo := "cris@advpl.com.br"
oWF:cCC := "cris@advpl.com.br"
oWF:cCCO := "cris@advpl.com.br"

// Assunto da mensagem.
oWF:cSubject := "Aprovação do Lançamento"

// Função a ser executada no retorno da resposta.


oWF:bReturn := "U_WFRetorno"

//Função a ser executada quando expirar o tempo do TimeOut.


oWF:bTimeOut := {{"U_WFTmOut",0,0,10}}

// Inicia o processo e envia a mensagem.


oWF:Start()
Criar um processo

//Usado no retorno da resposta


cNumero := oWF:oHtml:RetByName("NUMERO")

Os campos Entre "!" são variáveis e são acesssados pelos atributos:


ValByname -> no envio
RetByName -> Retorno
Criar um processo

Veja o retorno no console.

Note a resposta do workflow, pela coluna aprovado.


Exercícios
Criar um workflow de clientes:
1.Criar um campo: A1_AU_REVI C 1 COMBO 1=SIM;2=NÃO sem
inicializador padrão somente visual
2.Alterar o campo A1_MSBLQL para visual e colocar inicializador = 1
3.Usar o ponto de entrada M030INC para enviar um workflow para o
cliente(A1_EMAIL) com suas informações cadastrais.
4. Tratar o retorno da seguinte forma:
• Resposta = sim,
 alterar A1_AU_REVI = 1 (sim) e A1_MSBLQL= 2 (não)
•Resposta = não,
 alterar A1_AU_REVI = 1 (sim) e A1_MSBLQL = 1 (sim)
 
Montar email da seguinte forma: 
Relatórios

Configurador - Ambiente - Workflow – Schedule - Schedule


Relatórios

Configurador - Ambiente - Workflow – Schedule - Schedule


Relatórios

Configurador - Ambiente - Workflow – Schedule - Schedule


Relatórios

Configurador - Ambiente - Workflow – Schedule - Schedule

Webspool, tem q estar configurado no ini e ter permissoes.


Relatórios

Configurador - Ambiente - Workflow – Schedule - Monitor


Relatórios
Advpl ASP
Configuração com Wizard

Tanto WebService quanto ADVPL ASP devem obrigatóriamente ser configurados


pelo Wizard, pois são descompactados pacotes necessários para o perfeito
funcionamento da rotina.
Configuração com Wizard
Configuração com Wizard
Configuração com Wizard
Configuração HTTP com Wizard

Se a porta do http
for diferente de 80,
voce deve colocar
na configuração do
WS da seguinte
forma:

Ex. porta 8080 -


localhost:8080/ws
Configuração HTTP com Wizard
Configuração – MP8SRV.INI
[HTTP]
ENABLE=1
PORT=80
ENVIRONMENT=ENVIRONMENT
RESPONSEJOB=JOB_WS_9901
Acesso ao WebService:
http://localhost/ws/9901/... [localhost/ws/9901]
[localhost/ws1/9901]
ENABLE=1
ENABLE=1
http://localhost/ws1/9901/...
PATH=C:\ERP811\MP_Data\web\ws
PATH=C:\ERP811\MP_Data\web\ws1
ENVIRONMENT=ENVIRONMENT
ENVIRONMENT=ENVIRONMENT1
INSTANCENAME=ws
INSTANCENAME=ws1
RESPONSEJOB=JOB_WS_9901
RESPONSEJOB=JOB_WS1_9901
DEFAULTPAGE=wsindex.apw
DEFAULTPAGE=wsindex.apw

[JOB_WS_9901]
[JOB_WS1_9901]
TYPE=WEBEX
TYPE=WEBEX [EVIRONMENT]
ENVIRONMENT=ENVIRONMENT
ENVIRONMENT=ENVIRONMENT1 [EVIRONMENT]
SourcePath=C:\ERP811\APO
INSTANCES=1,3
INSTANCES=1,3 SourcePath=C:\ERP811\APO
RootPath=C:\ERP811\MP_Data
SIGAWEB=WS
SIGAWEB=WS RootPath=C:\ERP811\MP_Data
StartPath=\system\
INSTANCENAME=ws
INSTANCENAME=ws1 StartPath=\system\
...
ONSTART=__WSSTART
ONSTART=__WSSTART ...
[EVIRONMENT1]
Emp. 99, Filial 01
ONCONNECT=__WSCONNECT
ONCONNECT=__WSCONNECT [EVIRONMENT1]
SourcePath=C:\ERP811\APO1
PREPAREIN=99,01
PREPAREIN=99,01 SourcePath=C:\ERP811\APO1
RootPath=C:\ERP811\MP_Data
RootPath=C:\ERP811\MP_Data
StartPath=\system\
[ONSTART]
[ONSTART] StartPath=\system\
...
JOBS=JOB_WS_9901
JOBS=JOB_WS_9901,JOB_WS1_9901 ...
Acesso pelo Browser

• Reinicializar o server
• No Internet Explorer: http://localhost/ws/wsindex.apw
• Outra porta -> http://localhost:8080/ws/wsindex.apw
Configuração com Wizard

Para o desenvolvimento de páginas Internet, via AdvPL ASP, é necessário


configurar o módulo web Portal Protheus: (utilize o Wizard)
Configuração com Wizard
Configuração com Wizard
Configuração com Wizard
Configuração com Wizard
Como programar

Reinicie o Server para habilitar o serviço de Portal.

Adicione ao projeto os seguintes programas e compile:


230_ASP1.PRW
235_ASP1.APH
240_ASP2.PRW
245_ASP2.APH
250_ASP3.PRW
255_ASP3.APH
260_ASP4.PRW
265_ASP4.APH
270_ASP5.PRW
275_ASP5.APH
Classes e Métodos - PRW

//Extensões

PRW – Programa escrito em ADVPL

APH – Programa escrito em HTML

APW– Página já compilada, para ser acessada


no Browser
Classes e Métodos - PRW

//Cria uma nova página e define a variável que será inicializada


WEB EXTENDED INIT cHtml START “U_VLDASP5”

Prepare Environment Empresa "99" ;


Filial "01“;
Modulo "ESP" ;
Tables "SZ1", "SZ2“

//Executa a página (HTML Function deve estar no RPO)


cHtml += ExecInPage("275_ASP5")

//Finaliza a página
WEB EXTENDED END
Classes e Métodos - APH

//Página em HTML que será exibida

<html>
<head>
<title>AdvPL/ASP</title>
<body>
Exemplo de pagina em AdvPL/ASP.
</body>
</html>

Entre no Browser e digite:


http://localhost:8080/pp/u_asp1.apw
Comunicação entre APH e PRW

//PRW - Posta uma informação na página HTML com método POST


HttpPost->Campo1

//APH - Página em HTML que será exibida


<html> <head>
<title>AdvPL/ASP</title>
<body> Exemplo AdvPL/ASP - metodo POST
<form name="form1" action="u_ASP2.apw" method="post">
Campo 1: <input type="text" name="Campo1"><br>
<input type="submit" value="Enviar">
</form> </body> </html>

Entre no Browser e digite:


http://localhost:8080/pp/u_asp2.apw
Comunicação entre APH e PRW

//PRW – Busca informação na página HTML com metodo GET


HttpGet->Campo1

//APH - Página em HTML que será exibida


<html> <head>
<title>AdvPL/ASP</title>
<body>
<p>Exemplo AdvPL/ASP - metodo GET</p>
<p><a href="u_ASP3.apw?Campo1=Teste">Teste </a></p>
</body> </html>

Entre no Browser e digite:


http://localhost:8080/pp/u_asp3.apw
Comunicação entre APH e PRW

//PRW – Cria e Altera conteudos de váriáveis que serão


visíveis tanto no APH quanto no PRW
HttpSession->dData := Date()
HttpSession->cHora := Time()

HttpSession->aSemana := {"Domingo", "Segunda", "Terça",;


"Quarta", "Quinta", "Sexta", "Sábado"}
Comunicação entre APH e PRW

//APH – Utiliza as váriáveis que serão visíveis tanto no APH


quanto no PRW
<html> <head>
<title>AdvPL/ASP</title>
<body>

<p>Data: <%=HttpSession->dData%></p>
<p>Hora: <%=HttpSession->cHora%></p>
<p></p>
</body> </html>

Entre no Browser e digite:


http://localhost:8080/pp/u_asp4.apw
Comunicação entre APH e PRW

//Inicia e finaliza programação em ADVPL no APH


<%=HttpSession->dData%>

//Inicia e finaliza comentário em ADVPL no APH


<!--Comentário -->
EXERCÍCIO

Altere o programa 265_ASP4.APH para tratar ontem, hoje e amanha nos dias da
semana, conforme mostra a figura abaixo:
Classes e Métodos

Veja em 270_asp5.prw e 275_asp5.aph

Programação com leitura da Base de Dados na


montagem do HTML e com atualização da Base de
Dados.

Entre no Browser e digite:


http://localhost:8080/pp/u_asp5.apw
Classes e Métodos

Incluia dados no site e


confirme.

Após gravado aparecerá a


seguinte tela:
Classes e Métodos

Veja no sistema o registro inserido pelo browser.


Exercícios
Criar uma página da Web em ADVPL ASP conforme
exemplo ASP5.
Com os seguintes campos para digitação do usuário:

Nome, Email, Endereco, Telefone, Municipio, Cidade, Cep


Estado (trazer a combo de acordo com o dicionário)
CPF/CNPJ, Tipo (trazer a combo de acordo com o dicionário)
• Tratar campos em azul como obrigatórios
• Ao confirmar devera se incluído o cliente utilizando
MSexecauto da função MATA030.
•  Utilize getsxenum para o código do cliente e retorne no
browse
“Cliente Cadastrado com código “ + CODIGO GERADO

Você também pode gostar