Академический Документы
Профессиональный Документы
Культура Документы
Workflow
Fluxo operacional
Parmetros
O Workflow faz uso de uma srie de parmetros que determinam a maneira como
ele se comportar perante alguns pontos estratgicos na execuo dos fluxos de
processo. O acesso janela de parmetros est disponvel na opo do menu do
configurador Ambiente | Workflow | Parmetros WF
Opo
Item
Correio
Parmetro
Conta
Caixa de
correio
Composio da
mensagem
MV_WFMLBOX
Envia figura do
html como anexo
da mensagem
Envia html no
corpo da
mensagem
Descrio
Caixa de correio a ser
utilizada pelo workflow para o
envio e recebimento de
mensagens.
Recurso ainda no disponvel.
MV_WFIMAGE
MV_WFHTML
Envio automtico
MV_WFSNDAU
Usa Java Script
MV_WFJAVAS
Opo
Item
Execuo(es) de
retorno(s)
simultneos de
processos.
Execuo de
retornos
Processos
Parmetro
MV_WFMAXJB
Reativar
processos
automaticamente
MV_WFREACT
Tratamento de
erros
Usar TRANSAAO
na execuo de
funes de
RETORNO e
TIMEOUTs
Descrio
Define a quantidade de
processos de retorno que
podero ser executados por
vez.
MV_WFTRANS
Esteja atento ao
nmero de licenas
disponveis e
capacidade de
processamento da
mquina. A
quantidade
influenciar na
performance do
servidor.
Caso esta opo seja
selecionada, ocorrer erro na
execuo de retornos. O
Workflow reativar o
processo imediatamente para
ser executado de novo. Caso
contrrio, ser reativado
somente quando o
Scheduler for reiniciado.
Habilita o recurso de
transao com a finalidade de
conservar a integridade dos
dados em caso de falha de
execuo.
Opo
Item
Endereo
E-mail do
administrador
Enviar
notificao
Notificao
Parmetro
MV_WFADMIN
Quando ocorrer
erro ao executar
funes
Retorno e
Timeout.
Ao reativar
processos
pendentes.
Ao receber
mensagens no
reconhecidas.
MV_WFNF001
MV_WFNF002
MV_WFNF003
Descrio
Endereo eletrnico do
administrador (es) do
sistema. Separe entre ;
(ponto-e-vrgula) caso deseje
informar mais do que um
endereo. Exemplo:
Adm1@prov.com.br;
adm2@prov.com.br
Notificar por e-mail a lista de
endereos dos
administradores sobre o erro
ocorrido.
Notificar por e-mail a lista de
endereos dos
administradores no momento
em que forem reativados os
processos que ocorreram
erro.
Notificar por e-mail a lista de
endereos dos
administradores sobre as
mensagens no reconhecidas
pelo Workflow.
Opo
Item
Caminho
Messenger
Parmetro
MV_WFBROWS
Browser
Internet
Servidor
MV_WFBRWSR
Caminho
Diretrio HTTP
Habilitar
MV_WFDHTTP
Habilitar Messenger
automaticamente.
(prximo logon)
MV_WFMESSE
Descrio
Arquivo executvel do
browser Internet que dever
estar no path da estao.
IP ou Nomed PIPE do
servidor Protheus para uso
do servio http. Adicione :
+ a porta, caso seja diferente
do padro.
Diretrio de trabalho do
servio http. Verifique o
identificador Path= na
seo [HTTP] do arquivo
mp8Srv.ini para obter o
diretrio de trabalho.
O messenger ser executado
automaticamente no prximo
login de qualquer ambiente
Protheus.
Configurao
1. Requisitos
Software: o Workflow, que uma ferramenta embutida dentro do Server
do Protheus, no necessita de instalao prpria, apenas configuraes.
Toda configurao se d atravs do ambiente Configurador do Protheus.
Servidor de e-mail (quando necessrio para os processos): o
Workflow necessita obter acesso a algum servidor de e-mail, caso se deseje
utilizar e-mails como forma de comunicao. Esse servidor pode estar em
um provedor remoto, acessado atravs de um proxy server ou atravs de
uma linha discada (totalmente no recomendvel), caso se queira enviar emails para fora da sua empresa. Se a troca de e-mails for interna, poder
ser utilizado um Exchange Server, Lotus Domino Server ou outro servidor de
e-mail interno. O nico requisito imprescindvel que esses servidores
trabalhem com protocolos SMTP e POP3 ou IMAPI.
Conta de e-mail: caso utilize-se a opo de e-mail, o Workflow necessita
que seja criada uma conta de e-mail especificamente para ele. Isto , no
poder ser utilizada para mais nenhum fim. Para cada empresa do sistema,
dever ser criada uma conta especfica. Pea para o seu provedor criar esta
nova conta. Sugerimos com o nome da conta Workflow.
Exemplo: workflow@suaempresa.com.br
Clientes de e-mail: para recebimento dos e-mails gerados a partir do
Workflow, so utilizados os clientes de e-mails que devem ser aptos a
responder os e-mails gerados pelo Workflow, gerando arquivos de retorno
chamados octetos.
Para saber se o cliente de e-mail compatvel com o Workflow, ele dever
automaticamente gerar um e-mail de sada enviado para a conta do
Workflow com um arquivo do tipo postdata atachado, quando houver a
resposta do e-mail pelo usurio.
Os seguintes clientes de e-mail funcionam com o Workflow: OutLook Express
4.01, OutLook Express 5.5x, OutLook Express 6.0 e OutLook 2000 e XP,
Lotus Notes 5.x. Outros clientes de e-mail podem no funcionar,
principalmente os webmails. Portanto, garanta que as pessoas que iro
receber e responder os e-mails tenham os clientes acima instalados em suas
estaes. Quando no houver a certeza de que todos conseguiro responder
os e-mails e possuir os clientes de e-mail homologados, use a opo de
Workflow sem uso de e-mails, conforme ser descrito nesta apostila. As
opes de execuo de Java Script e Cookies devero estar liberadas.
Servidor do Protheus: necessrio que o Workflow execute em um Server
do Protheus exclusivo para ele, ou seja, deve haver um binrio somente
para o Workflow.
Memria do servidor: o servidor no qual ser executado o Workflow deve
possuir memria suficiente para que se processem vrios retornos ao
mesmo tempo. O mnimo recomendado de 512 MB de memria RAM para
processar cinco retornos por vez. Um nmero maior do que isso,
provavelmente necessitar de mais memria.
2. Correio Eletrnico
2.1. Protocolo
O Workflow faz uso do recurso de envio e recebimento de mensagens
eletrnicas (e-mails). Para que esse procedimento seja possvel,
devemos configurar que tipo de protocolo de recebimento o Protheus
dever usar.
Se omitido, o padro assumido ser POP3. Caso necessite mudar,
localize a seo [Mail] no arquivo mp8srv.ini e altere para o protocolo
utilizado.
Protocolos atualmente homologados:
POP3
IMAP
Exemplo:
[Mail]
Protocol=IMAP
Folder=inbox
10
11
Caixa de Correio
Opo
Item
Nome
Descrio
Nome da caixa de correio. Esse
nome ser usado para criar a pasta,
em que sero identificadas as
mensagens pertinentes a cada conta.
Tempo mximo (em segundos) de
espera para conexo com o servidor
de e-mails, tanto no envio como
recebimento
de
mensagens.
O
tempo padro 60 segundos.
Nome do remetente da mensagem.
Endereo
Endereo eletrnico.
Correio
Correio
Remetente
Habilitar
Tempo Espera
12
Receber mensagens
Opo
Item
Nome
Servidor (POP3
ou IMAP)
Login
Descrio
IP ou Named Pipe do servidor. Ser
exibido conforme o tipo utilizado na
seo [Mail] no arquivo
mp8srv.ini
Porta
Conta
Nome da conta.
Senha
13
Enviar mensagens
Opo
Item
Nome
Servidor SMTP
Porta
Usurio
Autenticao
Senha
Descrio
IP ou Named Pipe do servidor SMTP.
Porta de acesso. Valor padro: 25.
Nome do usurio para autenticao.
Alguns servidores exigem esta
informao para envio de e-mails.
Senha de acesso para autenticao.
14
Conexo
Opo
Tipo
Item
Descrio
LAN
DIAL-Up
*Conexes
Conta
Senha
Telefone
Discagem
15
Estrutura de diretrios
Pastas
Descrio
Pasta principal da estrutura de diretrios do
Workflow. Esta pasta til para armazenar os html
e arquivos comuns entre as empresas.
Pasta individual de trabalho para cada empresa.
Process
Tasks
16
Temp
17
3. Scheduler
3.1. Ativao
Para que os jobs sejam executados nos horrios pr-determinados,
importante que aps a carga do servidor do Protheus, o Scheduler seja
executado. Dessa forma, ele poder verificar a cada minuto se h jobs a
serem executados.
Essa ativao ocorre a partir do recurso disponvel na seo [OnStart]
contido no arquivo mp8srv.ini. Exemplo a ser adicionado ao arquivo
MP8SRV.INI:
[ONSTART]
Jobs=Scheduler
[Scheduler]
Main=WFONSTART
Environment=EnvTOP
A funo WFOnStart responsvel pela carga inicial do Scheduler e
requer
informaes
contidas
no
arquivo
auxiliar
chamado
Scheduler.wf, localizado no diretrio system do Protheus. O contedo
desse arquivo servir para obter a lista de parmetros necessria para
executar o Scheduler.
Caso o arquivo no exista, ser criado automaticamente com o seguinte
contedo padro: 99,01,ENVTOP,T,MOD.
1.
2.
3.
4.
99 cdigo da empresa.
01 cdigo da filial.
ENVTOP ambiente no qual ser executado o Scheduler.
T Valor lgico (True ou False). True, Indicar que realizar
reativao dos processos nas tabelas do Workflow.
5. MOD Nome do ambiente do qual o Workflow obter licenas.
A partir da verso 8.11 do Protheus, passou-se a aceitar os parmetros
passados atravs da prpria seo sem a necessidade de utilizar o
arquivo auxiliar Scheduler.wf, apenas acrescentando as seguintes
linhas:
18
Exemplo:
[Scheduler]
Main=WFOnStart
Environment=ENVTOP
nParams=5
Parm1=99
Parm2=01
Parm3=ENVTOP
Parm4=T
Parm5=TMK
3.2. Agendando
Atravs do configurador, possvel acessar a janela de cadastro de jobs
a serem executados pelo Scheduler. Basta que se selecione a opo de
menu correspondente figura abaixo:
19
20
Campos
Cdigo
Descrio
Identificao
Nome
Nome simplificado.
Descrio
Descrio do job.
Diria
Semanal
Freqncia
Mensal
Perodo Inicial
Perodo Final
Perodo
Data Incio
Hora Incio
Data final
Hora final
Intervalo
Ao
Job
Environment
Ambiente
Exemplo:
WFReturn( 99, 01 )
21
Exemplo:
WFSendMail( 99, 01 )
22
em linguagem ADVPL,
em
objetos
nvel
e
avanado, com
classes;
Cadastros
Alm dos cadastros de parmetros do Workflow e de e-mails, j mostrados
anteriormente, existem outros cadastros que auxiliam no processo do Workflow que
sero aqui descritos.
1. Processos Workflow
O cadastro de processos do Workflow, apesar de no ser obrigatrio, tem a
importncia de amarrar a seqncia de passos de um fluxo de processo para
ser visualizado a partir da janela de consulta da rastreabilidade.
Exemplo de processos a serem cadastrados:
Cotao de preos.
Liberao de crdito.
23
24
Cadastro de Processos
Agrupamento
Codificao
Informativo
Pesquisa
genrica
Visio
Campos
Cdigo
Descrio
Nome
Nome do processo.
Tabelas
Pesquisa
Padro
Arquivo .vsd
2. Status Workflow
O cadastro de Status o complemento do cadastro de processo. Atravs dele,
determina-se cada etapa que se realizar em um fluxo de processo, sendo
muito til para determinar pontos de rastreabilidade dentro de um grande
processo.
25
26
Cadastro de Status
Agrupamento
Campos
Cd
Processo
Cd Status
Codificao
Informativo
Descrio
Tempo
mdio
Descrio
Cdigo do processo.
Cdigo do status de processo. Esse cdigo deve
ser um valor numrico acima de 999. A faixa de
valores entre 0 e 999 est reservada ao
Workflow.
Descrio do Status do processo.
Tempo mdio de execuo deste status. Este
tempo calculado pelo sistema.
27
3. E-mails substitutos
O cadastro de e-mails substitutos um recurso disponvel no Workflow que tem
por finalidade delegar para um outro endereo eletrnico todas as mensagens
dirigidas a um determinado participante por um perodo de tempo estipulado.
Esse recurso importante quando se tratar de eventuais problemas em que um
dos participantes do fluxo do processo permanea ausente por motivos diversos
(frias, afastamento etc.).
28
Perodo
Campos
Do e-mail
Para o email
Data incio
Data final
Dias
Descrio
Endereo
eletrnico
do
participante
que
permanecer ausente por um perodo de tempo.
Endereo eletrnico do participante que ficar
responsvel por receber as mensagens.
Data inicial em que passar a vigorar a
substituio dos e-mails.
Data final do perodo.
Clculo de dias entre a data inicial e final.
29
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Aprovao de Pedido de Compra</title>
</head>
<body bgcolor="#FFFFFF">
<form action="mailto:%WFMailTo%" method="POST" name ="FormPedComp">
...
</form>
</body>
</html>
30
2. Macro substituio
Esta rotina consiste na substituio de todas as palavras encontradas nos
formulrios html que estiverem entre % ou !. Essa palavra-chave ter seu
contedo modificado por outra informao durante a execuo do processo.
Observe um formulrio modelo de aprovao de pedido de compras com suas
respectivas palavras-chaves (macros):
type=hidden
type=hidden
type=hidden
type=hidden
type=hidden
name="EMISSAO" value="01/04/05">
name="FORNECEDOR" value="100100">
name="LB_NOME" value="RM SUPRIMENTOS INFO LTDA">
name="LB_COND" value="30D">
name="PEDIDO" value="000003">
importante saber que o uso desse smbolo necessrio somente para campos
editveis que esperam modificaes de seus contedos e que sero tratados no
retorno das mensagens. Use este smbolo nos controles do tipo TextField,
TextArea, Radio Button, Combo Box e Check Box.
TextField:
<input type="text" size="13" name="T7" value=%quantidade%>
TextArea:
31
size="1"><option
selected>%itens%</option>
Check Box:
<input type="checkbox" name="checkbox" value="%item1%">Item 1
!macro! Toda palavra encontrada entre este sinal (!) ter somente seu
contedo substitudo. No ser includo <input hidden...> no html para essas
palavras-chaves. Utilize-o em texto fixo.
Exemplo: ttulos, mensagens, cabealhos e rodaps.
3. Tabelas
As tabelas so identificadas pelo Workflow atravs do nome que precede o
ponto (.) nas palavras-chaves. Contudo, essas palavras-chaves devem
realmente pertencer a uma tabela (tag <table>...</table>) do formulrio html.
Veja em itens do html da aprovao do pedido de compras que h algumas
palavras-chaves com o nome precedido da palavra produto.. Neste caso, o
Workflow ir referir-se a essa tabela pelo nome de produto (sem o ponto).
Poder conter vrias tabelas em um html que o Workflow saber identificar
atravs do nome.
32
Classe TWFProcess
A classe TWFProcess responsvel pela criao e gerenciamento do processo.
Como toda classe, a TWFProcess dividida em mtodos e propriedades. Veremos
alguns dos principais mtodos e propriedades que iremos usar para criao de um
processo.
Mtodos
:New(<cCodProc>,<cDescr>,<cProcID>)
O mtodo New() responsvel pela criao e inicializao da classe WFProcess.
Parmetros:
1. cCodProc: este parmetro recebe o cdigo do processo usado em Cadastro
de Processos.
2. cDescr: este parmetro recebe a descrio do processo que est sendo
criado no momento. Se no for informado, ser usada a descrio contida no
cadastro de processo, localizada atravs do parmetro anterior cCodProc.
3. cProcID: este parmetro recebe o ID do processo criado anteriormente.
Normalmente, utilizado para reconstruir um processo anterior, dando
seqncia a ele.
Exemplo:
oP := TWFProcess():New("PEDCOM","Aprovacao do Pedido de Compras")
33
:NewTask(<cDescr>,<cArqHtml>,<lCopiar>)
Este mtodo responsvel por criar a seqncia de tarefas a serem executadas
e identificar qual html ser utilizado pelo processo.
Parmetros:
1. cDescr: este parmetro recebe a descrio da tarefa.
2. cArqHtml:
processo.
:AttachFile(<cArquivo>)
Este mtodo responsvel pela incluso de arquivos anexos mensagem.
Esses arquivos devero estar abaixo do root path do Protheus.
Parmetros:
1. cArquivo: caminho e nome do arquivo a ser anexo mensagem.
Exemplo:
oP:AttachFile(\Workflow\teste.txt)
:Start(<cHtmlCopiarPara>) -> cProcessKey
Este mtodo responsvel por construir todo o processo, gravar os registros
nas tabelas do Workflow e enviar a mensagem para os destinatrios. O valor de
retorno uma chave composta pela codificao ProcessID + TaskID e nmeros
aleatrios, no total de 17 algarismos em hexadecimal.
Parmetros:
1. cHtmlCopiarPara: Caminho em que o Workflow dever realizar uma cpia
do html final.
Exemplo:
cID := oP:Start(\Workflow\copia)
if file( \Workflow\copia\ + cID)
conout(Arquivo copiado com sucesso.)
endif
:Finish()
Este mtodo responsvel por finalizar o processo. Aps a finalizao, ele no
estar mais disponvel para execues do tipo retorno e timeout.
Exemplo:
oP:Finish()
:Track(<cCodStatus>,<cDescr>,<cUsuario>)
Este mtodo responsvel por incluir as descries dos passos seguidos pelo
fluxo do processo e apresent-los na consulta da rastreabilidade.
34
Parmetros:
1. cCodStatus: cdigo do status do processo.
2. cDescr: descrio do passo ocorrido.
3. cUsuario: nome do usurio a que se destinou a tarefa.
Exemplo:
oP:Track(100200, Enviando o pedido para aprovacao, AprovadorA)
Propriedades
:cTo, :cCC e :cBCC
Estas propriedades definem o endereo dos destinatrios. Poder ser informado
mais que um destinatrio ao mesmo tempo. Basta incluir um ponto-e-vrgula ;
entre eles. Se for informada uma palavra qualquer que no seja um endereo
de e-mail vlido, o Workflow ir considerar que se trata de um diretrio em que
o html gerado dever ser gravado. Pode-se mesclar os tipos.
Exemplo:
oP:cTo := aluno1@microsiga.com.br;aluno2@microsiga.com.br
oP:cCC := aluno3@microsiga.com.br;Aluno
oP:cBCC := aluno4@microsiga.com.br
:cSubject
Esta propriedade define o assunto da mensagem.
Exemplo:
oP:cSubject := Aprovado do pedido de compras no. 1028
:cBody
Esta propriedade armazenar um texto que permanecer no corpo da
mensagem. Caso seja utilizado, o html ir como anexo da mensagem.
Exemplo:
oP:cBody := Testando...
:bReturn
Esta propriedade contm o nome da funo que ser executada no momento
em que o Workflow receber a mensagem de resposta de um dos destinatrios
via e-mail ou servio http.
Exemplo:
oP:bReturn := U_Retorno
:bTimeOut
Esta propriedade recebe um array de timeouts contendo nomes das funes e
tempo de espera. Caso o tempo seja alcanado, sero executadas as funes
mencionadas no 1 item do array. Podero ser especificados mais do que um
array de timeouts.
{ { <cFuncao>, <nDias>, <nHoras>, <nMinutos> }, { ... } }
35
Exemplo:
oP:bTimeOut := { { TimeOut1, 0, 5, 30 } }
ou
oP:bTimeOut := { { TimeOut1, 0, 5, 30 }, { TimeOut2, 1, 10, 0 } }
:fProcessID
Esta propriedade fornece o nmero ID do processo.
Exemplo:
cProcID := oP:fProcessID
:fTaskID
Esta propriedade fornece o nmero ID da tarefa criada para um determinado
processo, atravs do mtodo :NewTask().
Exemplo:
oP:NewTask( "100100", "\Workflow\WFW120p.htm" )
cTaskID := oP:fTaskID
:oHTML
Esta propriedade responsvel pelo tratamento das palavras-chaves no html
mencionado no mtodo :NewTask(). Esse objeto uma referncia da classe
TWFHtml() e disponibiliza dois dos mtodos mais importantes :RetByName() e
ValByName().
:oHTML:RetByName( <cNome da macro> )
Esta propriedade tem como objetivo obter o contedo da macro quando as
respostas retornarem para o Workflow. O mtodo somente dever ser usado na
funo de retorno.
Exemplo:
cNome := oP:oHtml:RetByName( Nome )
Em uma tabela:
aCodigo := oP:oHtml:RetByName( produto.Codigo )
:oHTML:ValByName(<cMacro>,<uConteudo>)
Este mtodo tem como objetivo atribuir ou obter um valor a uma macro
existente no html. Dever ser usado somente no momento em que estiver
assinalando valores ao html ou na funo de timeouts, em que o uso
necessrio por motivo de no haver recebido resposta.
Parmetros:
1. cMacro: nome da macro (palavra-chave) encontrada no html e identificada
entre os smbolos % e !.
36
37
Descrio
ATUALIZACAO DO PRECO DE VENDA
Pesq Padro
WFSB1 - Produto
Cd Status
100100
100200
100300
100400
100500
100600
100700
100800
100900
Descrio
INICIANDO
GERANDO PROCESSO PARA ENVIO
ENVIANDO MENSAGEM
AGUARDANDO RETORNO
ATUALIZANDO PRECO DE VENDA
TIMEOUT
REENVIANDO A MENSAGEM
FINALIZANDO
ERRO DE EXECUO
38
Cdigo fonte:
<html><head><title>Atualizao preco de venda</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body><form action="mailto:%WFMailTo%" method="post"
name="form1">
<table width="100%" height="130" border="1" bordercolor="#66CCFF" >
<tr bordercolor="#DFEFFF">
<td height="71" colspan="4" bgcolor="#DFEFFF">
<p align="center"><strong><font color="#3333FF" size="4" face="Verdana,
Arial, Helvetica, sans-serif">Atualização do Preço de
Venda</font></strong></p>
</td></tr><tr bordercolor="#66CCFF">
<td height="20" bgcolor="#DFEFFF">
<font size="1">Código:</font></td>
<td bgcolor="#DFEFFF"><font size="1">Descrição:</font></td>
<td bgcolor="#DFEFFF"><font size="1">Preço de venda R$:</font>
</td>
</tr>
<tr bordercolor="#66CCFF">
<td width="17%" height="28"><strong>!B1_COD!</strong></td>
<td width="53%">!B1_DESC!</td>
39
<td width="30%"><em><strong>
<input name="pvenda" type="math" id="pvenda"
value="%B1_PRV1%"></strong></em></td>
</tr>
</table><p>
<input type="submit" name="Submit" value="Enviar"></p>
</form>
</body>
</html>
PASSO 6 Criar processo de Workflow a partir do ponto de entrada
No IDE, geraremos um arquivo de programa chamado ATUAPV.PRW onde ser
criada a funo representativa do ponto de entrada MT010INC, em que
descreveremos o fluxo do processo com o uso das classes e funes do Workflow.
Essa funo (ponto de entrada) ser executada a partir do momento em que for
pressionado o boto OK, na confirmao da incluso dos dados do produto na
tabela SB1.
ATUAPV.PRW
#INCLUDE PROTHEUS.CH
/*
// MT010INC - Corresponde ao ponto de entrada do sistema que somente
//
ser executado na incluso de novos produtos.
*/
User Function MT010INC(nOpcao,oProcess)
// Inicialmente, os parmetros nOpcao e oProcess estaro com valores iguais a NIL.
// se nOpcao for NIL, ter o seu valor inicial igual a 0 (zero).
default nOpcao := 0
do case
case nOpcao == 0
U_APVInicio()
case nOpcao == 1
U_APVRetorno(oProcess)
case nOpcao == 2
U_APVTimeOut(oProcess)
endcase
Return
/*
// APVInicio - Esta funo responsvel por iniciar a criao do processo e por
//
enviar a mensagem para o destinatrio.
*/
User Function APVInicio(oProcess)
Local nDias := 0, nHoras := 0, nMinutos := 10
Local cCodProcesso, cCodStatus, cHtmlModelo
Local cUsuarioProtheus, cCodProduto, cTexto, cAssunto
cCodProduto := SB1->B1_COD
// Cdigo extrado do cadastro de processos.
cCodProcesso := "ATUAPV"
40
41
42
43
44
45
46
Se o usurio atual for administrador, ele poder ver as pendncias geradas para
qualquer outro usurio cadastrado no sistema. Caso contrrio, somente visualizar
as pendncias relacionadas a ele prprio.
47
48
49
50
Aps pressionar o boto Visio template, o Microsoft Visio abrir o arquivo .vsd
relacionado ao processo e bastar pressionar duas vezes o boto do mouse (doubl
click) sobre cada shape para que a janela de cadastro de propriedades seja exibida.
Nome
Shape
Descr
Shape
Descrio
Cdigo interno
de controle do
Microsoft Visio.
Somente
leitura.
O prprio Visio
sugere um
nome para
este shape.
Porm, poder
ser modificado
para melhor
identific-lo no
programa.
Descrio do
passo a que
este shape
est associado
ao fluxo do
processo.
51
Ao
Descrio
Causa uma
dependncia
de execuo
desse shape
em relao ao
selecionado.
Neste caso, s
poder ser
executado se o
selecionado
estiver sido
executado
anteriormente.
Funo de
usurio a ser
executado,
caso seja
pressionado
duas vezes o
boto do
mouse (doubl
ckick).
Cada shape contido no stencil Workflow responsvel por um tipo de evento (ao)
a ser executado no Protheus. Alguns shapes possuem janelas padres de dilogo
aps serem selecionados com o duplo clique do mouse durante a apresentao do
fluxo de processo. Essas janelas s aparecero nos casos em que no for informada
a funo de usurio ao shape selecionado.
Observe os tipos de janelas padres existentes:
Propriedades
Shape
Janela de dilogo
Descrio
Realiza uma
nova pesquisa
de processo.
52
Apresenta a
data e a hora
em que foi
enviada a
mensagem ao
destinatrio e
a data e a hora
em que o
Workflow
recebeu a
resposta.
Apresenta
todos os
timeouts
relacionados
ao processo e
informa a
situao atual
de cada um
deles,
permitindo
alterar o
tempo de
execuo, bem
como remover
da lista de
execuo.
Possibilita a
finalizao do
processo atual.
53
54
55
Verificando o destinatrio...
56
57
Nome Shape
INICIO
INCLUSAO
ENVIAR
APROVADOR_A
TIMEOUT
58
TIMEOUTS
REENVIO
APROVADOR_B
RECEBE
APROVADO?
APROVA
NOTIFICACAO
SOLICITANTE
TERMINO
Passo 5 Cadastro de processos
A partir do configurador, selecione a opo de menu Ambiente | Workflow |
Processos Workflow e crie um novo processo, conforme o contedo dos campos
apresentados na tabela abaixo:
Campo
Cdigo
Descrio
Pesq Padro
Arquivo .vsd
Conteudo
PEDCOM
APROVACAO DE PEDIDO DE COMPRAS
WFSC7 - PEDIDO DE COMPRAS
C:\MP8\AP_DATA\WORKFLOW\PEDCOMPRAS.VSD
59
Cd Status
100100
100200
100300
100400
100500
100600
100700
100800
100900
101000
Descrio
INICIO
GERANDO A SOLICITACAO
ENVIANDO MENSAGEM
RECEBENDO APROVACAO
PEDIDO APROVADO
PEDIDO REPROVADO
ENVIANDO NOTIFICACAO
EXECUTANDO TIMEOUT
REENVIANDO SOLICITACAO
FINALIZANDO PROCESSO
60
Cdigo fonte:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Aprovao de Pedido de Compra</title>
</head>
<body bgcolor="#FFFFFF">
<script language="JavaScript">
function ValidaObs(AForm)
{
if ((AForm.RBAPROVA[1].checked) && (AForm.LBMOTIVO.value == "Aa"))
{
alert("Campo Observao obrigatrio, favor informar o motivo da reprovao.");
}
else
{
AForm.submit();
alert("Sua mensagem foi enviada.");
}
}
</script><noscript>
<pre><font color="#FF0000" size="2"
face="Verdana"><b>%WFAvisoJS%</b></font></pre>
</noscript>
<form action="mailto:%WFMailTo%" method="POST"
name="FrontPage_Form1">
<h2><font color="#FF0000" face="Verdana"><b>Aprovao de
Pedido de Compra</b></font></h2>
<p><font color="#0000FF" face="Verdana"><b>Cabealho do
Pedido</b></font></p>
<table border="1" width="845">
<tr>
<td width="100" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Emisso</b></font></td>
<td width="460" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Fornecedor</b></font></td>
<td width="253" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Nome</b></font></td>
<td width="110" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Cond.Pagto</b></font></td>
<td width="110" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Nmero</b></font></td>
</tr>
<tr>
<td width="100"><font size="2" face="Arial">!emissao!</font></td>
<td width="460"><font size="2" face="Arial">!fornecedor!</font></td>
<td width="253"><font size="2" face="Arial">!lb_nome!</font></td>
<td width="110"><font size="2" face="Arial">!lb_cond!</font></td>
<td width="110"><font size="2" face="Arial">!pedido!</font></td>
</tr>
61
</table><p><font color="#0000FF"
face="Verdana"><b>Itens</b></font></p>
<table border="1" width="846">
<tr>
<td width="65" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Item</b></font></td>
<td width="222" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Descrio</b></font></td>
<td width="99" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Quantidade</b></font></td>
<td width="32" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Unid</b></font></td>
<td width="99" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Preo</b></font></td>
<td width="43" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>total</b></font></td>
<td width="48" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Entrega</b></font></td>
<td bgcolor="#01C5FE"><strong>Condio de Pag.</strong></td>
</tr>
<tr>
<td width="50"><font size="2" face="Arial">!produto.item!</font></td>
<td width="222"><font size="2" face="Arial">!produto.codigo! !produto.descricao!</font></td>
<td width="99"><font size="2" face="Arial"><input
type="text" size="13" name="T7"
value=%produto.quant%></font></td>
<td width="32"><font size="2" face="Arial">!produto.unid!</font></td>
<td width="99"><font size="2" face="Arial"><input
type="text" size="13" name="T9"
value=%produto.preco%></font></td>
<td width="43"><font size="2" face="Arial"><input
type="text" size="5" name="T10"
value=%produto.total%></font></td>
<td width="48"><font size="2" face="Arial"><input
type="text" size="5" name="T11"
value=%produto.entrega%></font></td>
<td><select name="D1" size="1">
<option selected>%produto.condpag%</option>
</select></td>
</tr>
</table>
<table border="1" width="275">
<tr>
<td width="155" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Valor Total</b></font></td>
<td width="121"><input type="text" size="13"
name="T15" value=%lbvalor%></td>
</tr>
<tr>
<td width="155" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Valor Frete</b></font></td>
<td width="121"><input type="text" size="13"
name="T16" value=%lbfrete%></td>
</tr>
<tr>
62
63
Cdigo fonte:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Aprovao de Pedido de Compra</title>
</head>
<body bgcolor="#FFFFFF">
<form action="mailto:%WFMailTo%" method="POST"
name="FrontPage_Form1">
<h2><font color="#FF0000" face="Verdana"><b>!Titulo!</b></font></h2>
<p><font color="#0000FF" face="Verdana"><b>Cabealho do
Pedido</b></font></p>
<table border="1" width="845">
<tr>
<td width="100" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Emisso</b></font></td>
<td width="460" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Fornecedor</b></font></td>
<td width="253" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Nome</b></font></td>
<td width="110" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Cond.Pagto</b></font></td>
<td width="110" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Nmero</b></font></td>
</tr>
<tr>
<td width="100"><font size="2" face="Arial">%emissao%</font></td>
<td width="460"><font size="2"
face="Arial">%fornecedor%</font></td>
<td width="253"><font size="2" face="Arial">%lb_nome%</font></td>
<td width="110"><font size="2" face="Arial">%lb_cond%</font></td>
<td width="110"><font size="2" face="Arial">%pedido%</font></td>
</tr>
</table>
<p><font color="#0000FF" face="Verdana"><b>Itens</b></font></p>
<table border="1" width="846">
<tr>
<td width="65" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Item</b></font></td>
<td width="222" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Descrio</b></font></td>
<td width="99" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Quantidade</b></font></td>
<td width="32" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Unid</b></font></td>
<td width="99" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Preo</b></font></td>
<td width="43" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>total</b></font></td>
<td width="48" bgcolor="#99CCFF"><font size="2"
face="Verdana"><b>Entrega</b></font></td>
64
65
66
67
68
/*
// APCRetorno Esta funo responsvel por atualizar o pedido de compras
//
com as respostas vindas do aprovador.
*/
User Function APCRetorno(oProcess)
Local cFindKey, cAssunto, cNumPed, cShape, cCodigoStatus, cDescricao
// Obtenha o nmero do pedido:
cNumPed := oProcess:oHtml:RetByName(Pedido)
// Monte a lista de argumentos para ser passada para o mtodo track():
// Pode ser informado mais do que um nome de shape para uma mesma
// ao do fluxo. Basta inform-los utilizando o ; para identificar cada um deles.
cAssunto := Pedido de compras no: + cNumPed
cShape := RECEBE;REMETENTE;APROVADO?
cCodigoStatus := 100400
cDescricao := "Recebendo resultado aprovao..."
oProcess:Track( cCodigoStatus, cDescricao,,cShape )
// Verifique se a resposta diferente de SIM, ou seja, reprovado.
if Upper(oProcess:oHtml:RetByName(RBAPROVA)) <> SIM
dbSelectarea("SCR") // Posicione a liberao
dbSetorder(2)
If dbSeek( xFilial("SCR") + "PC" + cNumPed )
RecLock("SCR",.f.)
CR_DATALIB := dDataBase
CR_OBS := ""
CR_STATUS := "04" // Bloqueado
CR_OBS := oProcess:oHtml:RetByName('lbmotivo')
MsUnLock()
End
// Gere novas informaes a serem passadas para a rastreabilidade:
cCodigoStatus := 100600
cDescricao := cAssunto + REPROVADO
// Dessa vez, no informe nenhum shape associado reprovao por no
// haver nenhum shape relacionado reprovao.
oProcess:Track( cCodigoStatus, cDescricao )
// Execute a funo responsvel pela notificao ao usurio solicitante.
U_APCNotificar( oProcess, cDescricao )
return .t.
end
// Libere o pedido:
dbSelectArea("SCR")
dbSetOrder(2)
cFindKey := xFilial("SCR") + "PC" + cNumPed
If dbSeek( cFindKey )
RecLock("SCR",.f.)
SCR->CR_DATALIB := dDataBase
SCR->CR_OBS := ""
69
SCR->CR_STATUS := "03"
MsUnLock()
end
dbselectarea("SC7")
dbSetOrder(1)
cFindKey := xFilial("SC7") + cNumPed
dbSeek( cFindKey )
// Posiciona o Pedido
while !Eof() .and. ( C7_FILIAL + C7_NUM == cFindKey )
RecLock("SC7",.f.)
C7_CONAPRO := "L"
MsUnLock()
dbSkip()
end
cShape := APROVA
cCodigoStatus := 100500
cDescricao := cAssunto + APROVADO
oProcess:Track( cCodigoStatus, cDescricao,,cShape )
// Execute a funo responsvel pela notificao ao usurio solicitante.
U_APCNotificar( oProcess, cDescricao)
Return
/*
// APCNotificar Essa funo responsvel por notificar ao solicitante o
//
resultado da aprovao do pedido.
*/
User Function APCNotificar( oProcess, cDescricao )
Local oHtml
Local aValues := Array(17)
Local cNumPed, cShape, cCodigoStatus, cArqHtml
// Informe o 2 html para notificao que diferente do wfw120p1.htm
cArqHtml := "\Workflow\wfw120p2.htm"
// Gere informaes para a rastreabilidade:
cShape := NOTIFICACAO;SOLICITANTE
cCodigoStatus := 100700
oProcess:Track( cCodigoStatus, cDescricao,, cShape )
// Devido os htmls serem diferentes, no ser possvel usar o terceiro parmetro
// com o valor .T. no mtodo NewTask() da classe TWFProcess(). Neste caso,
// deve-se obter todas as informaes necessrias para montar o novo html
// para notificao ao solicitante.
oHtml := oProcess:oHtml
aValues[01]
aValues[02]
aValues[03]
aValues[04]
aValues[05]
aValues[06]
aValues[07]
aValues[08]
aValues[09]
:=
:=
:=
:=
:=
:=
:=
:=
:=
oHtml:ValByName("EMISSAO")
oHtml:ValByName("FORNECEDOR")
oHtml:ValByName("lb_nome")
oHtml:ValByName("lb_cond")
oHtml:ValByName("PEDIDO")
oHtml:ValByName("Produto.item")
oHtml:ValByName("Produto.codigo")
oHtml:ValByName("Produto.descricao")
oHtml:ValByName("Produto.quant")
70
aValues[10]
aValues[11]
aValues[12]
aValues[13]
aValues[14]
aValues[15]
aValues[16]
aValues[17]
:=
:=
:=
:=
:=
:=
:=
:=
oHtml:ValByName("Produto.preco")
oHtml:ValByName("Produto.total")
oHtml:ValByName("Produto.unid")
oHtml:ValByName("Produto.entrega")
oHtml:ValByName("Produto.condPag")
oHtml:ValByName("lbValor")
oHtml:ValByName("lbFrete")
oHtml:ValByName("lbTotal")
71
72
73
processo gerado para o produto escolhido. Observe que todos os textos que
inclumos atravs do mtodo oprocess:track(...) sero vistos nesta janela.
74
Se o usurio atual for administrador, ele poder ver as pendncias geradas para
qualquer outro usurio cadastrado no sistema. Caso contrrio, somente poder ver
as pendncias relacionadas a ele mesmo.
75
76
Glossrio
77
78