Vous êtes sur la page 1sur 82

Boas Vindas

Apresentao

Contedo
Programtico

ENVIO DE EMAIL
DOWNLOAD E UPLOAD FTP
WORKFLOW

(CONFIGURAO, ENVIO E RETORNO)

WORKFLOW DE RELATRIOS
WORKFLOW DE ROTINAS
WEB SERVICE (CONFIGURAO)
ADVPL ASP (CONCEITOS)
ADVPL ASP COM BASE DE DADOS

ADVPL III
Rotinas da Web

Envio de Email

Parmetros que contem configurao de conexo


Private
Private
Private
Private
Private

cSrv
cMail
cPass
lAuth
cPswA

:=
:=
:=
:=
:=

GetMV("MV_RELSERV"))
GetMV("MV_RELACNT"))
GetMV("MV_RELPSW"))
GetMv("MV_RELAUTH")
GetMV("MV_RELAPSW"))

// smtp.ig.com.br
// meuemail@ig.com.br
// 123abc
//Requer Autenticao?
// 123abc

Ou
Private
Private
Private
Private
Private

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


cMail:= GetMV("MV_WFACC")
// meuemail@ig.com.br
cPass:= GetMV("MV_WFPASSW") // 123abc
lAuth := GetMv("MV_RELAUTH") //Requer Autenticao?
cPswA := GetMV("MV_RELAPSW")) // 123abc

//Conecta ao Servidor SMTP


CONNECT SMTP SERVER cSrv;
ACCOUNT cMail;
PASSWORD cPass;
RESULT lResul

//Nome do servidor SMTP


//Conta de Email
//Senha de conexo
//Resultado da Conexo

//Retorna se conseguiu fazer autenticao


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

lOk := QAGetMail()
//Atribui retorno de envio de email na varivel 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

Exerccios
Fazer um programa que envie para o email de
cada cliente (A1_EMAIL) as seguintes
informaes:
Codigo: 999999 (A1_COD)
Nome: XXXXXXXXXXXXXXXX (A1_NOME)
Endereo: 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)

Exerccios
Fazer um programa que envie para voc
mesmo um email com todos os fornecedores
com as seguintes informaes:
Codigo Loja Nome
Endereo
999999 99
XXXXXXXXXX
XXXXXXXXXXXXXX
999999 99
XXXXXXXXXX
XXXXXXXXXXXXXX
No Assunto coloque Fornecedores +
cSeuNome
Ex. HTML
<table>

FTP
File Transfer Protocol

//Conecta a um FTP
FTPConnect ( cServer, nPorta, cUser, cPass )
Argumento

Obrigat.

Tipo

Descrio

cServer

Sim

Servidor de FTP

nPorta

Sim

Porta de FTP, Default 21

cUser

Sim

Nome de usurio de FTP

cPass

Sim

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)
Argumento Obrigat. Tipo Descrio
cMascara

Sim

Mscara dos arquivos a retornar, ex. *.*

cAttr

No

Atributo dos arquivos a retornar

Retorno: array com arquivos que obedecem os argumentos.


Ex: FTPDirectory("*.*", "R")
FTPDirectory("*.*", D") // Para listar os diretrios

//Sobe arquivos para o FTP


FTPUpLoad( cFileLocal, cFileFTP )
Argumento Obrigat. Tipo Descrio
cFileLocal

Sim

Caminho completo no server, o caminho


deve estar dentro do rootpath.

cFileFTP

Sim

Nome do arquivo no FTP

Retorno: .T. ou .F.


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

//Baixa arquivos do FTP


FTPDownLoad ( cFileLocal, cFileFTP )
Argumento Obrigat. Tipo Descrio
cFileLocal

Sim

Caminho completo no server, o caminho


deve estar dentro do rootpath.

cFileFTP

Sim

Nome do arquivo no FTP

Retorno: .T. ou .F.


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

//Apaga arquivo no FTP no diretrio corrente


FTPErase( cFileFTP )
Argumento Obrigat. Tipo Descrio
cFileFTP

Sim

Nome do arquivo no FTP que se quer


apagar

Retorno: .T. ou .F.


Ex: FTPErase("error.log")

//Renomeia arquivo no FTP


FTPRenameFile(cFileOri, cFileNew)
Argumento Obrigat. Tipo Descrio
cFileOri

Sim

Nome do Arquivo original

cFileNew

Sim

Nome novo para o arquivo

Retorno: .T. ou .F.


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

//Muda diretrio no FTP


FTPDirChange( cDirFTP )
Argumento Obrigat. Tipo Descrio
cDirFTP

Sim

Retorno: .T. ou .F.


Ex: FTPDirChange("\tmp")

Caminho escolhido

//Retorna o nome do diretorio corrente do FTP


FTPGetCurDir( )
Retorno: Nome do diretrio.
//Disconecta o FTP
FTPDisconnect( )
Retorno: .T. ou .F.
Veja programa sendftp.prw

//Executa funes em Linux


FTPQUOTE( cComando )
Argumento Obrigat. Tipo Descrio
cComando

Sim

Comando em linux

Ex: FTPQUOTE(MKD DIRETORIO)

Workflow

Usurio
Inclui Cliente

Atualiza
Cliente

Executa a funo
de retorno

Job WFRET

Caixa
Caixade
de
Sada
Sada

WFReturn()

E-Mail

Captura a resposta

Resposta
(Aprovado ou Reprovado)

Aprovador

Caixa
Caixade
de
Entrada
Entrada

Quando no existir o ambiente environment, no possvel entrar no Wizard


sem o Atalho.

Configurao Wizard
Inserir um job pelo Wizard, escolher Processos Comuns e Clicar
no icone "Novo Processo"

Configurao Wizard
Dar um nome ao Job, escolher o ambiente e colocar a funo
WFONSTART para ser executada e clique em finalizar.
A Lista de tarefas utilizada por esse servico no SXM

Configurao Wizard

Configurao Wizard
Reinicie o Server para que as alteraes tenham efeito.

Configurao
Configurador - Ambiente - Workflow Contas de Email Incluir
Senha: escola1010

Configurao
Configurador - Ambiente - Workflow Contas de Email - Incluir

Configurao
Configurador - Ambiente - Workflow Contas de Email - Incluir

Configurao
Configurador - Ambiente - Workflow Contas de Email - Incluir

Parmetros
Configurador - Ambiente - Workflow - Parmetros WF

Parmetros
Configurador - Ambiente - Workflow - Parmetros WF

Parmetros
Configurador - Ambiente - Workflow - Parmetros WF

Parmetros
Configurador - Ambiente - Workflow - Parmetros 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 no existir)
Campo
Campo

Tipo

Tam.

Z1_NOME

Car

20

Z1_EMAIL

Car

Z1_EMAIL1
Z1_SALDO

Dec.

Formato

Inform.
Contexto

Propr.

Real

Alt.

Nome

40

Real

Alt.

EMail

Car

40

Real

Alt.

EMail1

Num

12

Real

Visual

@!

@E 999,999,999.99

Indice: Z1_FILIAL + Z1_NOME -> NICKNAME = NOME


Incluir dados no cadastro do SZ1 utilizando
U_cad()

Ttulo

Saldo

Criar um processo
110_TRANM1.PRW
SZ1 E SZ2 (Criar SZ2 se no existir)
Campo
Campo

Tipo

Tam.

Z2_NOME

Car

20

Z2_NUMERO

Car

Z2_ITEM

Car

Z2_DATA

Data

Z2_TIPO

Dec.

Formato

Inform.
Contexto

Propr.

Real

Alt.

Real

Visual

Real

Alt.

Item

Real

Alt.

Data

Car

Real

Alt.

Tipo

Z2_HIST

Car

20

Real

Alt.

Historico

Z2_VALOR

Num

12

@E 999,999,999.99

Real

Alt.

Valor

Z2_SLDATU

Num

12

@E 999,999,999.99

Virtual

Visual

Saldo

Z2_APROV

Car

Real

Visual

Aprovado

@!

99

Ttulo
Nome
Numero

Indice: 1Z2_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", "Aprovao do Lanamento" )
// 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
// Destinatrio 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 := "Aprovao do Lanamento"
// Funo a ser executada no retorno da resposta.
oWF:bReturn := "U_WFRetorno"
//Funo 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 "!" so variveis e so acesssados pelos atributos:
ValByname -> no envio
RetByName -> Retorno

Criar um processo
Veja o retorno no console.

Note a resposta do workflow, pela coluna aprovado.

Exerccios
Criar um workflow de clientes:
1.Criar um campo: A1_AU_REVI C 1 COMBO
1=SIM;2=NO sem inicializador padro 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
informaes cadastrais.
4.Tratar o retorno da seguinte forma:
Resposta = sim,
alterar A1_AU_REVI = 1 (sim) e A1_MSBLQL= 2
(no)
Resposta = no,

Montar email da seguinte forma:

Relatrios
Configurador - Ambiente - Workflow Schedule - Schedule

Relatrios
Configurador - Ambiente - Workflow Schedule - Schedule

Relatrios
Configurador - Ambiente - Workflow Schedule - Schedule

Relatrios
Configurador - Ambiente - Workflow Schedule - Schedule

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

Relatrios
Configurador - Ambiente - Workflow Schedule - Monitor

Relatrios

Advpl ASP

Configurao com Wizard


Tanto WebService quanto ADVPL ASP devem obrigatriamente ser configurados
pelo Wizard, pois so descompactados pacotes necessrios para o perfeito
funcionamento da rotina.

Configurao com Wizard

Configurao com Wizard

Configurao com Wizard

Configurao HTTP com Wizard


Se a porta do http
for diferente de 80,
voce deve colocar
na configurao do
WS da seguinte
forma:

Ex. porta 8080 localhost:8080/ws

Configurao HTTP com Wizard

Configurao MP8SRV.INI
[HTTP]
ENABLE=1
PORT=80
ENVIRONMENT=ENVIRONMENT
RESPONSEJOB=JOB_WS_9901
Acesso ao WebService:
http://localhost/ws/9901/...

[localhost/ws1/9901]
[localhost/ws/9901]
ENABLE=1
ENABLE=1
http://localhost/ws1/9901/...
PATH=C:\ERP811\MP_Data\web\ws1
PATH=C:\ERP811\MP_Data\web\ws
ENVIRONMENT=ENVIRONMENT1
ENVIRONMENT=ENVIRONMENT
INSTANCENAME=ws1
INSTANCENAME=ws
RESPONSEJOB=JOB_WS1_9901
RESPONSEJOB=JOB_WS_9901
DEFAULTPAGE=wsindex.apw
DEFAULTPAGE=wsindex.apw
[JOB_WS1_9901]
[JOB_WS_9901]
TYPE=WEBEX
TYPE=WEBEX
ENVIRONMENT=ENVIRONMENT1
ENVIRONMENT=ENVIRONMENT
INSTANCES=1,3
INSTANCES=1,3
SIGAWEB=WS
SIGAWEB=WS
INSTANCENAME=ws1
INSTANCENAME=ws
ONSTART=__WSSTART
ONSTART=__WSSTART
Emp. 99, Filial 01
ONCONNECT=__WSCONNECT
ONCONNECT=__WSCONNECT
PREPAREIN=99,01
PREPAREIN=99,01
[ONSTART]
[ONSTART]
JOBS=JOB_WS_9901,JOB_WS1_9901
JOBS=JOB_WS_9901

[EVIRONMENT]
[EVIRONMENT]
SourcePath=C:\ERP811\APO
SourcePath=C:\ERP811\APO
RootPath=C:\ERP811\MP_Data
RootPath=C:\ERP811\MP_Data
StartPath=\system\
StartPath=\system\
...
...
[EVIRONMENT1]
[EVIRONMENT1]
SourcePath=C:\ERP811\APO1
SourcePath=C:\ERP811\APO1
RootPath=C:\ERP811\MP_Data
RootPath=C:\ERP811\MP_Data
StartPath=\system\
StartPath=\system\
...
...

Acesso pelo Browser


Reinicializar o server
No Internet Explorer: http://localhost/ws/wsindex.apw
Outra porta -> http://localhost:8080/ws/wsindex.apw

Configurao com Wizard

Para o desenvolvimento de pginas Internet, via AdvPL ASP, necessrio


configurar o mdulo web Portal Protheus: (utilize o Wizard)

Configurao com Wizard

Configurao com Wizard

Configurao com Wizard

Configurao com Wizard

Como programar

Reinicie o Server para habilitar o servio 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 Mtodos - PRW

//Extenses
PRW Programa escrito em ADVPL
APH Programa escrito em HTML
APW Pgina j compilada, para ser acessada
no Browser

Classes e Mtodos - PRW

//Cria uma nova pgina e define a varivel que ser inicializada

WEB EXTENDED INIT cHtml START U_VLDASP5


Prepare Environment Empresa "99" ;
Filial "01;
Modulo "ESP" ;
Tables "SZ1", "SZ2
//Executa a pgina (HTML Function deve estar no RPO)
cHtml += ExecInPage("275_ASP5")
//Finaliza a pgina
WEB EXTENDED END

Classes e Mtodos - APH

//Pgina 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

Comunicao entre APH e PRW

//PRW - Posta uma informao na pgina HTML com mtodo POST


HttpPost->Campo1

//APH - Pgina 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

Comunicao entre APH e PRW

//PRW Busca informao na pgina HTML com metodo GET


HttpGet->Campo1

//APH - Pgina 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

Comunicao entre APH e PRW

//PRW Cria e Altera conteudos de vriveis que sero


visveis tanto no APH quanto no PRW
HttpSession->dData := Date()
HttpSession->cHora := Time()
HttpSession->aSemana := {"Domingo", "Segunda", "Tera",;
"Quarta", "Quinta", "Sexta", "Sbado"}

Comunicao entre APH e PRW

//APH Utiliza as vriveis que sero visveis 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

Comunicao entre APH e PRW

//Inicia e finaliza programao em ADVPL no APH


<%=HttpSession->dData%>
//Inicia e finaliza comentrio em ADVPL no APH
<!--Comentrio -->

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

Classes e Mtodos

Veja em 270_asp5.prw e 275_asp5.aph


Programao com leitura da Base de Dados na
montagem do HTML e com atualizao da Base de
Dados.
Entre no Browser e digite:
http://localhost:8080/pp/u_asp5.apw

Classes e Mtodos

Incluia dados no site e


confirme.
Aps gravado aparecer a
seguinte tela:

Classes e Mtodos

Veja no sistema o registro inserido pelo browser.

Exerccios
Criar uma pgina da Web em ADVPL ASP
conforme exemplo ASP5.
Com os seguintes campos para digitao do
usurio:
Nome, Email, Endereco, Telefone, Municipio, Cidade,
Cep
Estado (trazer a combo de acordo com o dicionrio)
CPF/CNPJ, Tipo (trazer a combo de acordo com o dicionrio)
Tratar campos em azul como obrigatrios
Ao confirmar devera se includo o cliente
utilizando MSexecauto da funo MATA030.
Utilize getsxenum para o cdigo do cliente e