Você está na página 1de 142

WorkflowWORKFL OW

2 2 WorkFlow

WorkFlow - 3

Fluxo Ooperacional...........................................................................................................8 Parmetros ......................................................................................................................10 Configurao ..................................................................................................................17 Cadastrar a conta de e-mail do WorkflowWorkflow.......................................................22 Estrutura de diretrio de mensagens................................................................................27 3. Scheduler....................................................................................................................30 Requisitos para desenvolvimento....................................................................................38 Cadastros.........................................................................................................................40 Html MODELO WorkflowWORKFLOW...................................................................48 Ccriando um processo em advpl Aadvpl - funes.........................................................55 Integrao com o microsoft visio...................................................................................92 Exerccio Aprovao de Pedido de Compras.............................................................104 Glossrio .......................................................................................................................139

4 4 WorkFlow

WorkflowWorkflow

Texto de justificativa A Aautomao de processos de negcio corresponde, em partes ou totalmente, onde s informaes , documentos ou tarefas que so passadoas de uma pessoa para outra para a realizao de uma ao que , baseada em um conjunto de regras. Atravs da implantao de uma ferramenta de WorkflowWorkflow nos processos crticos de uma organizao, estes se tornam-se mais geis e seguros, evitando o travamento operacional do complexo fluxo existente entre os processos.
Principais benefcios:

Aumento da Eeficincia : Aautomao de processos eliminam vrios passos desnecessrios. Melhor cControle dos Pprocessos: Mmelhora do Ggerenciamento dos processos atravs da padronizao dos mtodos de trabalho. Melhora nos servios ao cliente: Cconsistncia nos processos levam a uma maior previsibilidade e rapidez nos nveis de resposta ao cliente. Flexibilidade : Ccontrole sobre os processos atravs de uma ferramenta permite uma rpida mudana nos fluxos de acordo com a necessidade.

A ferramenta de WorkflowWorkflow existente no Protheus 8 permite o rpido alcance dos benefcios acima citados, alm de :

Forte rRastreabilidade dos pProcessos : Ppode-se saber a atual situao de qualquer processo atravs da consulta da rastreabilidade do mesmo.

WorkFlow - 5

Transformao do sistema Protheus em aAtivo em vez de rReativo : Aa informao e a ao necessria a ser tomada levada ao usurio e no o contrrio. Controle de Ttime-Oout dos pProcessos : Oos processos nunca ficam parados por falta de resposta de uma pessoa. Qualquer Pprocesso existente pode ser automatizado atravs da construo de um WorkflowWorkflow.

6 6 WorkFlow

As aes a serem tomadas pelas pessoas em cobrana podem ser realizadas atravs de trsquatro meios, evitando que um processo tenha seu ciclo interrompido por falta de comunicao, so eles :

Ee-mail : Oos processos so respondidos atravs de um cliente de e-mail homologado. Bbrowser de Iinternet : Aatravs do Internet Explorer, podese tomar a ao pedida pelo processo. Protheus : Aatravs do recurso de Messenger do Protheus, pode-se tomar a ao pedida pelo processo. Pontos de entrada: atravs de pontos de entradas existentes no sistema, pode-se tomar a ao pedida pelo processo.

WorkFlow - 7

Fluxo Ooperacional

8 8 WorkFlow

WorkFlow - 9

Parmetros
O WorkflowWorkflow 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 Desta forma, foi criado uma janela de parmetros especfica para o Workflow Ambiente | WorkflowWorkflow | Parmetros WF, localizada na opo do menu do configurador, facilitando que facilitar a configurao dos mesmos., localizada na opo do menu do configurador, : Ambiente | Workflow | Parmetros WF

Correio Opo Item Parmetro Descrio Caixa de correio ema ser utilizadao uso pelo wWorkflow para o envio e recebimento de mensagens. Veja Contas de e-mails mais abaixo. 10 10 WorkFlow

Caixa de correio

Conta

MV_WFMLBOX

Envia figura do html como anexo da mensagem Envia html no corpo da mensagem Composio da mensagem

MV_WFIMAGE

Recurso ainda disponvel.

no

MV_WFHTML

Selecionando esta opo, o html passara a fazer parte do corpo da mensagem. O contrrio, ir como anexo. Aps a criao do processo, o wworkflow executar o eenviaro da mensagem imediatamente. No html, o workflowWorkflow adicionara rotinas semi-prontas em Java script.

Envio automtico

MV_WFSNDAU

Usa Java Script

MV_WFJAVAS

11

WorkFlow - 11

Processos Opo Item Parmetro Descrio Define a quantidade de processos de retorno que podero ser executados por vez. Execuo(es) de retorno(s) simultneos de processos. Esteja atento nmero licenas disponveis e capacidade processamento mquina. quantidade influenciar performance servidor. ao de a de da A na do

Execuo de retornos

MV_WFMAXJB

12 12 WorkFlow

Reativar processos automaticame nte Tratamento de erros

MV_WFREACT

Caso esta opo seja selecionada, e ocorrera erro na execuo de retornos., Oo WorkflowWorkflow reativar o processo imediatamente para ser executado novamentede 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.

Usar TRANSAAO na execuo de funes de RETORNO e TIMEOUTs

MV_WFTRANS

13

WorkFlow - 13

Notificao Opo Item Parmetro Descrio Endereo eletrnico do administrador (es) do sistema. Separe entre ; (ponto-e-virgula) caso desejae-se informar mais do que um1 endereo. Exemplo: Adm1@prov.com.br; adm2@prov.com.br Enviar notificao Quando ocorrer erro ao executar funes Retorno e Timeout. Ao reativar processos pendentes. 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. 14 14 WorkFlow

E-mail do administrad or

Endereo

MV_WFADMIN

MV_WFNF001

MV_WFNF002

Ao receber mensagens no reconhecidas.

MV_WFNF003

Notificar por e-mail a lista de endereos dos administradores sobre as mensagens no reconhecidas pelo WorkflowWorkflow.

Messenger Opo Browser Internet Item Parmetro MV_WFBRO WS MV_WFBRW SR Descrio Arquivo executvel do browser Internet que. Este dever estar no pPath da estao. IP ou Nomed PIPE do servidor Protheus para uso do servio http. Adicione : + a porta, 15

Caminho

Servidor

WorkFlow - 15

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 Mmessenger executado automaticamente prximo login qualquer moduloambiente Protheus. ser no de

Diretrio HTTP

Caminho

MV_WFDHTT P

Habilitar

Habilitar Messenger automaticament e. (prximo logon)

MV_WFMESS E

16 16 WorkFlow

Configurao
1. Requisitos

Software : Oo WWorkflow, que uma ferramenta embutida dentro do Server do Protheus, no necessita de nenhuma instalao prpria, apenas configuraes. Toda configurao se d atravs do ambiente Configurador do Protheus. Servidor de Ee-mail (qQuando necessrio para os processos) : oO WWorkflow necessita obter acesso a algum servidor de e-mail, caso se deseje utilizar e-mails como forma de comunicao. Esste 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 e-mails para fora da sua empresa. Se Caso a troca de e-mails seja simplesmentefor interna, poder ser utilizado um Exchange Server, Lotus Domino Server ou outro servidor de e-mail interno. O nico requisito imprescindvel que esstes servidores trabalhem com protocolos SMTP e POP3 ou IMAPI. Conta de Ee-mail : Ccaso se utilize-se a opo de e-mail, o WorkflowWorkflow necessita que seja criada uma conta de email especificamente para ele. Isto , no poder ser utilizada para mais nenhum fim. Para cada empresa do sistema, dever ser criadoa uma conta especfica. Pea para o seu provedor criar esta nova conta. Sugerimos com o nome da conta WorkflowWorkflow. Exemplo: workflowworkflow@suaempresa.com.br Clientes de Ee-mail : Ppara recebimento dos e-mails gerados a partir do WorkflowWorkflow, so utilizados os clientes de emails. Estses clientes de e-mail que devem ser aptos a responder os e-mails gerados pelo WorkflowWorkflow, gerando arquivos de retorno chamados octetos. 17

WorkFlow - 17

Para saber se o cliente de e-mail compatvel com o WorkflowWorkflow, o mesmoele dever automaticamente gerar um e-mail de sada enviado para a conta do WorkflowWorkflow 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 WorkflowWorkflow: 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 e necessitem respondlos ,, devero tertenham os clientes acima instalados nas em suas estaes. Quando no houver a certeza de que todos conseguiro responder os e-mails e possuirem os clientes de email homologados, use a opo de WorkflowWorkflow sem uUso de e-mails, conforme ser descrito nesta apostila. As opes de execuo de Java Script e Cookies devero estar liberadas. Servidor do Protheus : nNecessrio que o WorkflowWorkflow rodeexecute em um Server do Protheus exclusivo para ele, ou seja, deve haver um binrio somente para o WorkflowWorkflow. Memria do sServidor : Oo Sservidor, onde no qual ser executado o WorkflowWorkflow deve possuir memria suficiente para que o mesmose processem vrios retornos ao mesmo tempo. O mnimo recomendado de 512 MB de memria RAM para processar 5 cinco retornos por vez. Um nmero maior do que istso, provavelmente necessitar de mais memria.

2. Correio Eletrnico

Protocolo

18 18 WorkFlow

O WorkflowWorkflow faz uso do recurso de envio e recebimento de mensagens eletrnicas (e-mails). E Ppara que istsoesse procedimento seja possvel, devemos configurar qual 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

O protocolo MAPI no suportado pelo Protheus.


Ateno : O protocolo MAPI no suportado pelo Protheus.

Contas de e-mail

Atravs do cadastro de contas de e-mails, possvel realizar o envio e recebimentos de mensagens. Para acessar o cadastro de e-mails, selecione a seguinte opo de menu do configurador: 19

WorkFlow - 19

Aps a realizao do cadastro de uma conta de e-mail, possvel realizar algumas operaes extras como: Enviar: Eesta opo executar o envio de todas as mensagens contidas na pasta outbox (caixa de sada).; Enviar Todos: Eesta opo realizar a mesma operao do item anterior;, entretanto, . Contudo, realizarefetuar o envio de todoas as mensagens para todas as contas cadastradas. 20 20 WorkFlow

Receber: eEsta opo executar o recebimento de todas as mensagens contidas no servidor de e-mail especificado no cadastro para a pasta inbox (caixa de entrada). Receber todos: Eesta opo realizar a mesma operao do item anterior. Contudo, realizar para todas as contas cadastradas.

21

WorkFlow - 21

Cadastrar a conta WorkflowWorkflow

de

e-mail

do

Para cada empresa do Protheus, dever existir uma nica conta exclusiva para uso do WorkflowWorkflow. A seguir, veremos quais campos necessrios devero fazer parte do preenchimento do cadastro.

Caixa de Correio Opo Correio Correio Item Descrio Nome da caixa de correio. Esste nome ser usado para criar a pasta, na qual ondeem que sero identificadasor as mensagens pertinentes a cada conta. Tempo mximo (em segundos) de espera para conexo com o 22 22 WorkFlow

Tempo Espera

servidor de e- mails, tanto no envio como recebimento de mensagens. O tempo padro 60 segundos. Nome Endereo Habilitar Nome do mensagem. remetente da

Remetente

Endereo eletrnico.

Incluir esta conta ao Esta opo habilita o uso desta enviar e receber e- da conta para enviar e receber mails mensagem.

Receber mensagens
Opo Servidor (POP3 ou IMAP) Item Nome Descrio IP ou Named Pipe do servidor. Ser exibido conforme o tipo utilizado na seo [Mail] no arquivo mp8srv.ini

23

WorkFlow - 23

Porta Login Conta Senha

Porta de acesso dependendo do tipo. POP3 = 110 ; IMAP = 143 (defaults). Nome da conta. Senha de acesso a conta.

Enviar mensagens
Opo Servidor SMTP Porta Autenticao Usurio Porta de acesso. Valor padro: 25. Nome do usurio para autenticao. Alguns servidores exigem esta Item Nome Descrio IP ou Named Pipe do servidor SMTP.

24 24 WorkFlow

informao para envio de e-mails. Senha Senha de acesso para autenticao.

* Os campos para autenticao de envio somente devero ser preenchidos caso sejam obrigatrios, conforme a regra de segurana estabelecida pela empresa. Consulte o administrador do servidor de mensagens para obter as informaes necessrias para os preenchimentos dos campos Usurio e Senha.

* Os campos para autenticao de envio, somente devero ser preenchidos caso sejam obrigatrios, conforme a regra de segurana estabelecida pela empresa. Consulte o administrador do servidor de mensagens para obter as informaes necessrias para os preenchimentos dos campos Usurio e Senha.

Conexo 25

WorkFlow - 25

Opo

Item LAN

Descrio Utiliza a conexo j estabelecida pelo usurio numa em uma Iintranet. Utiliza o recurso de discagem atravs de uma linha telefnica ( no recomendvel ). Somente funciona em estaes e servidores Wwindows. Lista de conexes disponveis do tipo Dial-up, obtidas a partir do cadastro de conexes dial-up criadoas previamente pelono Microsoft Windows. Nome da conta (usurio) de acesso ao provedor Iinternet. Senha de provedor. acesso a conta no

Tipo DIAL-Up

*Conexes

Discagem

Conta Senha Telefone

Numero da linha de acesso ao provedor Iinternet.

* Os campos Conta, Senha e Telefone so obtidos automaticamente a partir da seleo da lista de conexes disponveis no campo Conexes:. Esses campos so meramente informativos, j que foram obtidos atravs da conexo criada previamente no Windows. Veja no manual do Microsoft Windows como criar conexes dial-up.
* Os campos (Conta, Senha e Telefone) so obtidos automaticamente a partir da seleo da lista de conexes disponveis no campo Conexes:. Estses campos so meramentesmeramente informativos, j que foram obtidos atravs da conexo criada previamente no Windows. Veja no manual do Microsoft Windows para saber como criar conexes dial-up.

26 26 WorkFlow

Estrutura de diretrio de mensagens


A partir da verso 8.11, a estrutura de diretrios de armazenamento de mensagens mudou. A pasta WorkflowWorkflow passou a ser o Root por questes de organizao de acesso aos respectivos arquivos de controle e mensagens a cada empresa.

Estrutura de diretrios
Pastas Descrio Pasta principal da estrutura de diretrios do WorkflowWorkflow. Esta pasta til para armazenar os html e arquivos comuns entre as empresas.

27

WorkFlow - 27

Pasta individual de trabalho para cada empresa. Esta pasta contm a estrutura de diretrios para uso exclusivo de armazenamento de mensagens enviadas e recebidas para cada caixa de correio existente. Contm arquivos de controle criados pelo WorkflowWorkflow para gerar e manipular processos. Contm temporariamente arquivos de agendamento de rotinas utilizados para serem inseridos dentro da tabela SXM (scheduler). Diretrio temporrio de trabalho.

Mail

Process

Tasks

Temp

A partir da pasta Mail, sersero criadaso todas as caixas de correio existentes no cadastro de contas de correio do WorkflowWorkflow. Esta pasta foi criada exclusivamente para uso da caixa de correio do WorkflowWorkflow. Todas as mensagens que no sejam relacionadas aos processos de WorkflowWorkflow, sero armazenadas nesta pasta. Ex: Spam. Esta pasta foi criada exclusivamente para uso da caixa de correio do WorkflowWorkflow. As mensagens recebidas e j identificadas anteriormente, sero armazenadas nessa pasta . (mensagens recebidas em duplicidade) Esta uma pasta comum entre as caixas de correio existentes. Esta pastaEla responsvel pelo armazenamento de mensagens recebidas. Esta uma pasta comum entre as caixas de correio existentes, sendo ela. Esta pasta responsvel pelo armazenamento de mensagens que

Archive

Ignored

Inbox

Outbox

28 28 WorkFlow

devero ser enviadas. Caso ocorra erro durante o envio da mensagensdas mensagens, estaselas sero armazenadas na sub-pasta Erro. Esta uma pasta comum entre as caixas de correio existentes, sendo ela. Esta pasta responsvel pelo armazenamento das mensagens enviadas.

Sent

29

WorkFlow - 29

3. Scheduler

O Scheduler (aAgenda) uma ferramenta responsvel pela execuo das funes de usurios ou funes padronizadas do sistema ( chamaremos de Jobs), em determinados horrios especficos entre um intervalo de tempo, sem que haja a interveno do usurio. Para que estsa ferramenta esteja habilitada a realizar execues dos jobs, necessrio que ela esteja ativada no servidor do Protheus.
Ativao

Para que os jobs sejam executados nos horrios prdeterminados, importante que aps a carga do servidor do Protheus, o Sscheduler seja executado. Dessta forma, ele poder verificar a cada minuto se h Jjobs a serem executados. Estsa ativao ocorre a partir do recurso disponvel na seo [OnStart] contido no arquivo mp8srv.ini. Exemplo a ser adicionado ao arquivo MP8SRV.INI : [ONSTART] 30 30 WorkFlow

Jobs=Scheduler [Scheduler] Main=WFONSTART Environment=EnvTOP A funo WFOnStart responsvel pela carga inicial do Sscheduler e requer informaes contidas no arquivo auxiliar chamado Scheduler.wf, localizado no diretrio system do Protheus. O contedo desste arquivo servir para obter a lista de parmetros necessria para executar o sScheduler. Caso o arquivo no existira, ser automaticamente com o seguinte contedo 99,01,ENVTOP,T,MOD. 1. 2. 3. 4. 5. criado padro:

99 cCdigo da empresa. 01 cCdigo da filial. ENVTOP aAmbiente no qual ser executado o Sscheduler. T Valor lgico (True ou False). True, Indicar que realizar reativao dos processos nas tabelas do WorkflowWorkflow. MOD Nome do Mduloambiente do quale o WorkflowWorkflow obterpegar 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: Exemplo: [Scheduler] Main=WFOnStart Environment=ENVTOP nParams=5 Parm1=99 31

WorkFlow - 31

Parm2=01 Parm3=ENVTOP Parm4=T Parm5=TMK


Agendando

Atravs do configurador, possvel acessar a janela de cadastro de jobs a serem executados pelo Sscheduler. Basta que se selecione a opo de menu correspondente a figura abaixo:

32 32 WorkFlow

Selecione: Processos Especiais.

Janela de cadastro de jobs

33

WorkFlow - 33

Scheduler Processos Especiais Agrupament o Campos Cdigo Identificao Nome Descrio Diria Descrio Cdigo nico identificador do Jjob. Nome simplificado. Descrio do Jjob. Executa diariamente entre os horrios inicial e final a cada intervalo de tempo. Executa nos dias selecionados da semana (domingo, segunda, tera, quarta, quinta, sexta e sbado), entre os horrios inicial e final a cada intervalo de tempo. Executa nos meses selecionados do ano (janeiro a dezembro), entre os horrios inicial e final a cada intervalo de tempo. Data inicial que passara a vigorar a execuo. Horrio inicial de execuo. Dia limite de execuo. Horrio limite de execuo. Intervalo de tempo a cada execuo entre o horrio inicial e final. Funo de usurio ou funo interna do Protheus a ser executado. OAs parmetros passados para esta funo devero ser sempre tratados como um 34 34 WorkFlow

Freqncia

Semanal

Mensal Data Inicio Hora Inicio Data final Hora final Intervalo Ao

Perodo Inicial

Perodo Final

Perodo Job

array na mesma. Environment Ambiente Ambiente em que o job ser executado.

35

WorkFlow - 35

Agendar recebimento de mensagens do WorkflowWorkflow

Para que o WorkflowWorkflow possa receber as mensagens e executar os retornos de processos, necessrio cadastrar no sScheduler a funo WFReturn(Cdigo_Empresa, Cdigo_Filial). A funo WFReturn responsvel por: Bbaixar (download) todas as mensagens contidas na caixa postal de mensagens do correio eletrnico do WorkflowWorkflow e gravar na pasta Inbox (veja acima estrutura de diretrios para melhor esclarecimento); sSeparar as mensagens reconhecidas (retornos de aprovao, etc.) pelo workflowWorkflow e mover para a pasta Process ; Sseparar as mensagens no reconhecidas (spam, etc.) pelo workflowWorkflow e mover para a pasta Archive. Em seguida, notificar lista de e-mails de administradores informados no cadastro de parmetros do WorkflowWorkflow; Eexecutar cada um dos retornos de processos.; Exemplo: WFReturn( 99, 01 )

Agendar envio de mensagens do WorkflowWorkflow

Apesar de ter a opo Enviar Automaticamente disponvel no cadastro de parmetros do WorkflowWorkflow, importante saber que nem sempre possvel enviar as mensagens em um determinado momento. Podero ocorrer alguns problemas que podemssam acarretar fila de espera e, com isso, ir crescercrescer o numero de processos parados. 36 36 WorkFlow

Entre eles podemos citar os problemas mais comunsm est a: Pperda da comunicao com o servidor de e-mail. Para evitar tais problemas, interessante agendar a funo WFSendMail (Cdigo_Empresa, Cdigo_Filial) da mesma forma que a funo WFReturn. Assim, haver a garantia deir que a qualquer outro momento enviar as mensagens que, eventualmente, tenham ficado na fila de espera sero enviadas. A funo WFSendMail responsvel por: eEnviar cada uma das mensagens contidas na pasta Outbox (caixa de sada);; Mmover para a pasta Sent (itens enviados) as mensagens que foram enviadaos com sucesso;. Mmover para a pasta Outbox\Error as mensagens que tiveram problemas durante o envio. Caso se queira reenvia-las, basta move-las para a pasta Outbox (caixa de sada). Exemplo:
WFSendMail( 99, 01 )

37

WorkFlow - 37

Requisitos para desenvolvimento

Para construir um processo de WorkflowWorkflow que automatize de forma correta, basicamente so necessrios quatro requisitos fundamentais: 38 38 WorkFlow

Cconhecer o sistema de ERP como um todo, inclusive tecnicamente. Istso corresponde a conhecer todos os recursos de configurao e programao do Protheus, bem como suas tabelas e respectivos relacionamentos; Ssaber programar em linguagem ADVPL, nvel avanado, com conhecimento em objetos e classes; Cconhecimento em linguagem HTML, para construo de pginas, alm de saber programar em Java Script, para refinamento e validao das pginas; Ssoftware e Hhardware necessrios.

39

WorkFlow - 39

Cadastros
Alm dos cadastros de pParmetros do WorkflowWorkflow e de eEmails, j mostrados anteriormente, existem outros cadastros que auxiliam no processo do WorkflowWorkflow que sero aqui descritos. Processos WorkflowWorkflow O cadastro de processos do WorkflowWorkflow, 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 pProcessos a serem cadastrados : Aprovao de Ssolicitao de Ccompras. Aprovao de Ppedido de Ccompras. Cotao de Ppreos. Liberao de Ccrdito. Estse cadastro se encontra- se no mdulo ambiente Configurador. , conforme figuras abaixoObserve as telas :

40 40 WorkFlow

41

WorkFlow - 41

Cadastro de Processos
Agrupamento Codificao Nome Informativo Pesquisa genrica Visio Tabelas Pesquisa Padro Arquivo .vsd Nome do processo. Especificaes das tabelas execuo do processo. utilizadas para para Campos Cdigo Descrio Cdigo nico identificador.

Cdigo da pesquisa padro utilizada localizar um determinado processo. Arquivo visio document (fluxo do desenhado a partir do Microsoft Visio).

processo

Status WorkflowWorkflow

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 ele. muito til para determinar pontos de rastreabilidade dentro de um grande processo.

42 42 WorkFlow

43

WorkFlow - 43

Cadastro de Status
Agrupamento Campos Cd Processo Codificao Descrio Cdigo do processo. Cdigo do status de processo. Esste cdigo deve ser um valor numrico acima de 999.. a A faixa de valores entre 0 e 999 esta reservadao ao WorkflowWorkflow. Descrio do Status do processo. Tempo mdio de execuo deste status. Este tempo calculado pelo Ssistema.

Cd Status

Descrio Informativo Tempo mdio

44 44 WorkFlow

E-mails substitutos

O cadastro de e-mails substitutos um recurso disponvel no WorkflowWorkflow que tem por finalidade delegar para um outro endereo eletrnico todas as mensagens dirigidas a um determinado participante por um perodo de tempo estipulado. Esste 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.). Desta maneira, o sistema ficar preparado para atender a estses eventuais problemas, decorrente no dia-a-dia de uma empresa.

45

WorkFlow - 45

46 46 WorkFlow

Cadastro de e-mails substitutos


Agrupamento Campos Do eE-mail Endereo eletrnico Para mail o EeDescrio Endereo eletrnico do participante que permanecera ausente por um perodo de tempo. Endereo eletrnico do participante que ficar responsvel por receber as mensagens. Data inicial em que passar substituio dos e-mails. Data final do perodo. Calculo de dias entre a data inicial e final. a vigorar a

Data inicio Perodo Data final Dias

47

WorkFlow - 47

Html MODELO WorkflowWORKFLOW


O WorkflowWorkflow faz uso de formulrios html para realizar interaes entre o(s) participante(s) e o sistema ERP. Alm de inform-los, possvel responder determinadas requisies atravs do recurso Post message oferecidos pelos navegadores internet. Os formulrios desenhados e utilizados para interagir com os participantes, so denominados modelos (templates) e devero estar disponveis em algum diretrio abaixo do rootpath do Protheus. Ao ser utilizado algum destses modelos nos processos de WorkflowWorkflow, apenas a cpia do modelo ser modificado. necessrio um amplobons conhecimentos de programao HTML e Java Script para a construo de pginas no WorkflowWorkflow.

Post message

O recurso Post message, nas pginas html a partir dos navegadores internet, permitem que as respostas sejam enviadas ao WorkflowWorkflow via correio eletrnico (e-mail) ou servio http. Para que isso seja possvel necessrio incluir o tag <form action=mailto:%WFMailTo% method=post> nos formulrios html.

48 48 WorkFlow

49

WorkFlow - 49

<html> <head> <meta http-equiv="Content-Type" charset=iso-8859-1"> content="text/html;

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

Macro substituio

Entende-se por macro substituioEsta rotina consiste na substituio de e compreendidos pelo Workflow, todas as palavras encontradas nos formulrios html que estiverem entre % ou !. Essta palavra- chave ter seu contedo modificado por outra informao durante a execuo do processo. Veja abaixoObserve um formulrio modelo de aprovao de pedido de compras com suas respectivas palavras- chaves (macros):.

50 50 WorkFlow

%macro% - Toda palavra encontrada entre este sinal (%), alm da substituio do contedo por outra informao, tambm haver a necessidade de incluir no formulrio (cpia do modelo) aas linhas de tags <input type=hidden...> para cada palavrachave (macro) encontrada. Exemplo: <input type=hidden name="EMISSAO" value="01/04/05"> <input type=hidden name="FORNECEDOR" value="100100"> <input type=hidden name="LB_NOME" value="RM SUPRIMENTOS INFO LTDA"> <input type=hidden name="LB_COND" value="30D"> <input type=hidden name="PEDIDO" value="000003"> importante saber que o uso desse smbolo necessrio somente para campos editveis que esperam modificaes de 51

WorkFlow - 51

seus contedos e que sero tratados no retorno das mensagens. Use este smbolo nos controles do tipo TextField, TextArea, Raadio Button, Combo Box e Check Box.

52 52 WorkFlow

TextField: <input type="text" size="13" name="T7" value=%quantidade%>

TextArea: <textarea name="S1" %</textarea> Radio Button: <input type="radio" value="Sim">Sim. <br> <input type="radio" name="%aprovacao%" value="Nao">No. Combo Box: <select name="list" size="1"><option %</option> </select> Check Box: <input type="checkbox" value="%item1%">Item 1 name="checkbox" selected>%itens checked name="%aprovacao%" rows="4" cols="74">%observacao

!macro! Toda palavra encontrada entre este sinal (!) ter somente seu contedo substitudo. No ser includo nenhum <input hidden...> no html para esstas palavras- chaves. Utilize-o em texto fixo. Exemplo: tTtulos, mensagens, cabealhos e rodaps.
Tabelas

53

WorkFlow - 53

As tabelas so identificadas pelo WorkflowWorkflow atravs do nome que precede o ponto (.) nas palavras- chaves. Contudo, estsas palavras- chaves devem realmente pertencer a uma tabela (tag <table>...</table>) do formulrio html. Veja em Iitens do html da aAprovao do pPedido de cCompras que h algumas palavras- chaves com o nome precedido da palavra produto.. Neste caso, o WorkflowWorkflow ir se referir-seenciar a essta tabela pelo nome de produto (sem o ponto). Poder conter vrias tabelas em um html que o WorkflowWorkflow saber identificar cada uma delas atravs do nome.

54 54 WorkFlow

Ccriando um processo em advpl Aadvpl funes


No existem processos de workflowWorkflow nativos dentro do Protheus, sendo necessriao a construo de acordo com a necessidade. Um processo de WorkflowWorkflow poder ser iniciado a partir de uma destas opes:

Pontos pontos de entrada; Item item de menu de qualquer mduloambiente ; jJob agendado atravs do sScheduler; manualmente atravs do remote.

A opo mais utilizada o ponto de entrada. Se for realizado um pedido de compras, por exemplo, automaticamente gerado uma aprovaogerada uma aprovao para os itens do pedido e enviado para um aprovador. Qualquer ponto de eEntrada do sistema pode ser utilizado. 55

WorkFlow - 55

Para ser iniciado o processo, Eem qualquer das opes escolhidas, , para ser iniciado o processo, ser necessrio fazer uso do cdigo fonte Aadvpl para determinar a forma como ir proceder a execuo do fluxo do processo. Na maior parte, o O WorkflowWorkflow se baseia- sena maior parte, pelo no uso de classes referenciadas aos objetos, que se tornam a ponte de acesso ao para uso de seus mtodos e propriedades. A principal classe do WorkflowWorkflow a TWFProcess, o. que vVeremos a seguir ( necessrio conhecimento de programao orientada a objetos ).

Classe TWFProcess

A classe TWFProcess responsvel pela criao e gerenciamento do processo. Como toda e qualquer classe, a TWFProcess dividida em mtodos e propriedades. Veremos alguns dos principais mtodos e propriedades que iremos usar para criao de um processo.

56 56 WorkFlow

Mtodos

:New(<cCodProc>,<cDescr>,<cProcID>) O mtodo New() responsavel pela criao e inicializao da classe WFProcess. Parmetros: 1. cCodProc: Eeste parmetro recebe o cdigo do processo usado em Cadastro de Processos. 2. cDescr: eEste parmetro recebe a descrio do processo que esta sendo criado no momento. Se no for informado, ser usadao a descrio contida no cadastro de processo, localizada atravs do parmetro anterior cCodProc. 3. cProcID: eEste parmetro recebe o ID do processo criado anteriormente. Normalmente, utilizado para reconstruir um processo anterior, para dandor seqncia a ele ao mesmo. Exemplo: oP := TWFProcess():New("PEDCOM","Aprovacao do Pedido de Compras") :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: Eeste parmetro recebe a descrio da tarefa. 2. cArqHtml: Eeste parmetro recebe o caminho e o nome do arquivo html que far uso no processo. 3. lCopiar: Eeste parmetro, do tipo lgico, responsvel por copiar todos os campos utilizados em uma tarefa anterior, ou seja, para a tarefaesta que esta sendo criadao no momento. 57

WorkFlow - 57

Exemplo: oP:NewTask("Criando "\workflowWorkflow\WFW120p.htm" ) :AttachFile(<cArquivo>) Este mtodo responsvel pela incluso de arquivos anexos mensagem. Esses arquivos que. Os arquivos anexos devero estar abaixo do root path do Protheus. Aprovacao",

58 58 WorkFlow

Parmetros: cArquivo: cCaminho e nome do arquivo a ser anexo a mensagem. Exemplo: oP:AttachFile(\WorkflowWorkflow\teste.txt) :Start(<cHtmlCopiarPara>) -> cProcessKey Este mtodo responsvel por construir todo o processo, gravar os registros nas tabelas do WorkflowWorkflow 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 onde em que o WorkflowWorkflow devera realizar uma copia do html final. Exemplo: cID := oP:Start(\workflowWorkflow\copia) if file( \workflowWorkflow\copia\ + cID) conout(Arquivo copiado com sucesso.) endif :Finish() Este mtodo responsvel por finalizar o pProcesso. Aps a finalizao, este ele no estar mais disponvel para execues do tipo retorno e timeout. Exemplo: oP:Finish()

59

WorkFlow - 59

: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. Parmetros: 1. cCodStatus: cCodigo do status do processo. 2. cDescr: Ddescrio do passo ocorrido. 3. cUsuario: Nnome 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 informadoinformada uma palavra qualquer que no seja um endereo de e-mail vlido, o WorkflowWorkflow ir considerar que se trata de um diretrio onde em que o html gerado, devera 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

60 60 WorkFlow

:cBody Esta propriedade armazenar um texto que permanecera 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 WorkflowWorkflow 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 os tempo sejam alcanados, sero executadaso as funo funes mencionadas no 1 item do array., sendo que. P Ppodero ser especificadosar mais do que 1 um array de timeouts. { { <cFuncao>, <nDias>, <nHoras>, <nMinutos> }, { ... } }

Exemplo: oP:bTimeOut := { { TimeOut1, 0, 5, 30 } } ou oP:bTimeOut := { { TimeOut1, 0, 5, 30 }, { TimeOut2, 1, 10, 0}} 61

WorkFlow - 61

: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( "\workflowWorkflow\WFW120p.htm" ) cTaskID := oP:fTaskID "100100",

:oHTML Esta propriedade responsvel pelo tratamento das palavraschaves no html mencionado no mtodo :NewTask(). Esste objeto uma referencia 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 WorkflowWorkflow. Este O mtodo somente dever ser usadao na funo de retorno. Exemplo: cNome := oP:oHtml:RetByName( Nome ) Em uma tabela: aCodigo := oP:oHtml:RetByName( produto.Codigo ) 62 62 WorkFlow

:oHTML:ValByName(<cMacro>,<uConteudo>) Este mtodo tem por como objetivo atribuir ou obter um valor a uma macro existente no html. Este Ddever ser usado somente no momento em que estiver assinalando valores ao html ou na funo de timeouts., Na funo de timeoutsem que, o uso necessrio por motivo de no ter haver recebido nenhuma resposta. Parmetros: cMacro: Nnome da macro (palavra- chave) encontrada no html e, identificada entre os smbolos % e !. uConteudo: vValor a ser atribuido macro.

63

WorkFlow - 63

Exemplo: Assinalando um valor: oP:oHtml:ValByName( Nome, Aluno1 ) Usando na funo de timeout: cNome := oP:oHtml:ValByName( Nome )
Atribuindo um valor a uma tabela:

AAdd( oP:oHtml:ValByName( produto.codigo ), SB1->SB1_COD )

64 64 WorkFlow

Exerccio Case Aatualizao do Ppreo de Vvenda de Pproduto

A partir do ponto de entrada (MT010INC), no cadastro de produtos, criaremos um processo de workflowWorkflow que enviar um html via e-mail para um destinatrio que dever atualizar o preo de venda deste do produto e, em seguida, enviar a resposta para ser atualizadao na base de dados do Protheus. Esste ponto de entrada ser executado aps a incluso de um novo produto. Conforme os passos descritos abaixo, realizaremos um cadastro de processos e de status para fins de futuras pesquisas com o uso da rastreabilidade de processos. Criaremos, tambm, um html e um arquivo de programa para descrevermos o fluxo do processo em cdigo Aadvpl, usando as classes e as funes de WorkflowWorkflow. PASSO 1 Criar novo campo no SB1

Crie um novo campo B1_WFID no SB1 para que possa ser gravado o ID do processo de WorkflowWorkflow e ser utilizado em consultas na janela de rastreabilidade. Definio do campo B1_WFID: tipo Caracter; tamanho 7; decimais 0 65

WorkFlow - 65

PASSO 2 Pesquisa padro SXB

Crie uma pesquisa SXB com o nome WFSB1 que faa referncia tabela SB1 e retorne o contedo do campo B1_WFID. PASSO 3 - Cadastro de Processos

A partir do configurador, selecione a opo de menu Ambiente | WorkflowWorkflow | Processos WorkflowWorkflow e crie um novo processo conforme o contedo dos campos apresentados na tabela abaixo:
Cdigo ATUAPV Descrio ATUALIZACAO DO PRECO DE VENDA Pesq Padro WFSB1 - Produto

66 66 WorkFlow

PASSO 4 Cadastro de Status

Ainda no configurador, selecione a opo de menu Ambiente | WorkflowWorkflow | Status WorkflowWorkflow e cadastre alguns status para o processo mencionado acima, conforme o contedo dos campos apresentados abaixo:
Cd Processo ATUAPV ATUAPV ATUAPV ATUAPV ATUAPV ATUAPV ATUAPV ATUAPV ATUAPV 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 EXECUCAOO

PASSO 5 Criar html modelo para o processo

Crie um html modelo, chamado ATUAPV.HTM, no diretrio \WORKFLOWWORKFLOW ( abaixo do rootpath). Este html que ser utilizado no e-mail para que o destinatrio altere o valor do preo de venda do produto e envie a resposta atravs do boto Enviar.

67

WorkFlow - 67

Cdigo fonte: <html><head><title>Atualizao preco de venda</title> <meta http-equiv="Content-Type" charset=iso-8859-1"> </head> <body><form action="mailto:%WFMailTo%" name="form1"> <table width="100%" 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, sansserif">Atualiza&ccedil;&atilde;o do Pre&ccedil;o de Venda</font></strong></p> </td></tr><tr bordercolor="#66CCFF"> <td height="20" bgcolor="#DFEFFF"> <font size="1">C&oacute;digo:</font></td> 68 68 WorkFlow height="130" method="post" border="1" content="text/html;

<td bgcolor="#DFEFFF"><font size="1">Descri&ccedil;&atilde;o:</font></td> <td bgcolor="#DFEFFF"><font size="1">Pre&ccedil;o de venda R$:</font> </td> </tr> <tr bordercolor="#66CCFF"> <td width="17%" </strong></td> height="28"><strong>!B1_COD!

<td width="53%">!B1_DESC!</td> <td width="30%"><em><strong> <input name="pvenda" type="math" 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 WorkflowWorkflow a partir do ponto de entrada No IDE, criaremos geraremos um arquivo de programa chamado ATUAPV.PRW. E neste mesmo arquivo criaremosonde ser criada a funo representativa do ponto de entrada MT010INC onde, na qualem que descreveremos o fluxo do processo com o uso das classes e funes do WorkflowWorkflow. Essta 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 id="pvenda"

69

WorkFlow - 69

/* // MT010INC - Corresponde ao ponto de entrada do sistema que somente // */ 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 // */ User Function APVInicio(oProcess) Local nDias := 0, nHoras := 0, nMinutos := 10 Local cCodProcesso, cCodStatus, cHtmlModelo Local cUsuarioProtheus, cCodProduto, cTexto, cAssunto cCodProduto := SB1->B1_COD enviar a mensagem para o destinatrio. ser executado na incluso de novos produtos.

70 70 WorkFlow

// Cdigo extrado do cadastro de processos. cCodProcesso := "ATUAPV" // Arquivo html template utilizado para montagem da aprovao cHtmlModelo := "\workflowWorkflow\atuapv.htm" // Assunto da mensagem cAssunto := "Atualizao do preo de venda" // Registre o nome do usurio corrente que esta criando o processo: cUsuarioProtheus:= SubStr(cUsuario,7,15) // Inicialize a classe TWFProcess e assinale a varivel objeto oProcess: oProcess := TWFProcess():New(cCodProcesso, cAssunto) // Crie uma tarefa. oProcess:NewTask(cTitulo, cHtmlModelo) // Crie um texto que identifique as etapas a etapa do processo que foi realizado // para futuras consultas na janela de rastreabilidade. cTexto := "Iniciando a solicitao de " + cAssunto + " do produto: " + cCodProduto // Informe o codigo de status correspondente a essa etapa. cCodStatus := "100100" // Cdigo do cadastro de status de processo. // Repasse as informaes para o mtodo responsavel pela rastreabilidade. oProcess:Track(cCodStatus, Rastreabilidade cTexto, cUsuarioProtheus) //

// Adicione informacesao a serem incluidas na rastreabilidade. 71

WorkFlow - 71

cTexto := "Gerando solicitao para envio..." cCodStatus := "100200" oProcess:Track(cCodStatus, cTexto, cUsuarioProtheus) // Assinale novos valores s macros existentes no html: oProcess:oHtml:ValByName("B1_COD", cCodProduto) oProcess:oHtml:ValByName("B1_DESC", SB1->B1_DESC) oProcess:oHtml:ValByName("B1_PRV1", SB1->B1_PRV1) // Repasse o texto do assunto criado para a propriedade especifica do processo. oProcess:cSubject := cAssunto // Informe o endereo eletrnico do destinatrio. oProcess:cTo := "bi@microsiga.com.br" // Utilize a funcao WFCodUser para obter o codigo do usuario Pprotheus. oProcess:UserSiga := WFCodUser("BI") // Antes de assinalar o ID do processo no campo, verificado se realmente o // campo existe na tabela SB1. If SB1->(FieldPos("B1_WFID")) > 0 If RecLock("SB1",.f.) SB1->B1_WFID := oProcess:fProcessID MsUnLock() EndIf EndIf // Informe o nome da funo de retorno a ser executada quando a mensagem de // respostas retornarem ao WorkflowWorkflow: oProcess:bReturn := "U_MT010INC(1)"

72 72 WorkFlow

// Informe o nome da funo do tipo timeout que ser executada se houver um timeout // ocorrido para esse processo. Neste exemplo, ela ser executada 5cinco minutos aps o envio // do e-mail para o destinatrio. Caso queira-se aumentar ou diminuir o tempo, altere // os valores das variveis: nDias, nHoras e nMinutos. oProcess:bTimeOut := {"U_MT010INC(2)", nDias, nHoras, nMinutos} // Adicione as informacesao a serem incluidas na rastreabilidade cTexto := "Enviando solicitao..." cCodStatus := "100300" oProcess:Track(cCodStatus, cTexto , cUsuarioProtheus) // Apos ter repassado todas as informacoes necessarias para o workflowWorkflow, solicite a // a ser executeado o mtodo Start() para se gerarado todo o processo e enviar a mensagem // ao destinatrio. oProcess:Start() // Adicione as informacesao a serem incluidas na rastreabilidade cTexto := "Aguarde retorno..." cCodStatus := "100400" oProcess:Track(cCodStatus, Rastreabilidade Return /* // APVRetorno - Esta funo executada no retorno da mensagem enviada // pelo destinatrio. O WorkflowWorkflow recria o processo em que // parou anteriormente na funcao APVInicio e repassa a 73 cTexto , cUsuarioProtheus) //

WorkFlow - 73

// */

varivel objeto oProcess por parmetro.

User Function APVRetorno(oProcess) Local nPrecoVenda Local cCodProduto, cCodStatus, cTexto // Obtenha o cdigo do produto a partir do html cCodProduto := oProcess:oHtml:RetByName("B1_COD") // Obtenha o novo preo de venda informado pelo destinatrio: nPrecoVenda := Val(oProcess:oHtml:RetByName("B1_PRV1")) dbSelectArea("SB1") SB1->(dbSetOrder(1)) // Localize o produto cadastrado na tabela SB1 If SB1->(dbSeek(xFilial("SB1") + cCodProduto)) // Adicione as informacesao a serem incluidas na rastreabilidade. cTexto := "Atualizando o preo de venda..." cCodStatus := "100500" // Atraves do atributo :cRetFrom da classe twfprocess, possivel obter o endereo // eletrnico de quem respondeu a mensagem. Obtenha-oa para adiciona-loa rastreabilidade. oProcess:Track(cCodStatus, cTexto, oProcess:cRetFrom) // Atualize o preo de venda: If RecLock( "SB1", .f. ) SB1->B1_PRV1 := nPrecoVenda MsUnLock() EndIf Else // Adicione as informacesao a serem incluidas na rastreabilidade. cTexto := "No foi possvel encontrar o produto: " + cCodProduto 74 74 WorkFlow

cCodStatus := "100900" oProcess:Track(cCodStatus, cTexto, oProcess:cRetFrom) EndIf // Adicione as informacesao a serem incluidas na rastreabilidade. cTexto := "Finalizando o processo..." cCodStatus := "100800" // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, Rastreabilidade Return cTexto, oProcess:cRetFrom) //

/* // APTimeOut - Esta funo ser executada a partir do Scheduler no tempo // TWFProcess. // essa // */ User Function APTimeOut(oProcess) Local nDias := 0, nHoras := 0, nMinutos := 10 Local cCodStatus, cHtmlModelo Local cCodProduto, cTexto, cTitulo cHtmlModelo := "\workflowWorkflow\atuapv.htm" cTitulo := "Atualizao do preo de venda" // Adicione as informacesao a serem incluidas na rastreabilidade. cTexto := "Executando TIMEOUT..." cCodStatus := "100600" 75 estipulado pela propriedade :bTimeout da classe Caso o processo tenha sido respondido em tempo hbil, execuo ser descartada automaticamente.

WorkFlow - 75

// A funcao APTimeOut executada, automaticamente, pelo sistema. // Devido nao haver usuario associado execuo, ser omitido o parmetro // correspondente. oProcess:Track(cCodStatus, cTexto) // Rastreabilidade

// Na execuo da funo de timeout, no se caracteriza retorno de mensagem. // Neste caso, deve usar o mtodo :ValByName() no lugar do mtodo :RetByName() // para obter os valores contidos no html. cCodProduto := oProcess:oHtml:ValByName("B1_COD") // Finalize a tarefa anterior para no ficar pendente. oProcess:Finish() dbSelectArea("SB1") SB1->(dbSetOrder(1)) // Localize o produto na tabela SB1: If SB1->(dbSeek(xFilial("SB1") + cCodProduto)) // Crie uma nova tarefa, aproveitando o contedo do html preenchido anteriormente // com o uso do 3.terceiro parmetro com o valor lgico igual a .T. (verdadeiro) oProcess:NewTask(cTitulo, cHtmlModelo, .T.) // Antes de assinalar o ID do processo no campo, verifique se realmente o campo // existe na tabela SB1: If SB1->(FieldPos("B1_WFID")) > 0 If RecLock("SB1",.f.) SB1->B1_WFID := oProcess:fProcessID 76 76 WorkFlow

MsUnLock() EndIf EndIf // Acrescente a palavra "(REENVIO)" no incio do assunto da mensagem para // reforar que houve um timeout executado. If (Left(oProcess:cSubject,9) != "(REENVIO)") oProcess:cSubject := "(REENVIO)" + oProcess:cSubject EndIf oProcess:cTo := "bi@microsiga.com.br" // Utilize a funcao WFCodUser para obter o codigo do usuario Pprotheus. oProcess:UserSiga := WFCodUser("BI") // Redefina a funo de retorno a ser executada. oProcess:bReturn := "U_MT010INC(1)" // Redefina a funcao de timeout a ser executada. oProcess:bTimeOut := {"U_MT010INC(2)", nDias, nHoras, nMinutos} // Adicione as informesacao a serem incluidas na rastreabilidade cTexto := "Reenviando a solicitao..." cCodStatus := "100700" oProcess:Track(cCodStatus, cTexto) // Inicie o processo oProcess:Start() Else // Adicione as informacesao a serem incluidas na rastreabilidade. 77

WorkFlow - 77

cTexto := "No foi possvel encontrar o produto: " + cCodProduto cCodStatus := "100900" // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, cTexto) // Rastreabilidade EndIf Return /* MT010INC Corresponde ao Pponto de entrada do sistema que. Este ponto de entrada somente ser executado na incluso de novos produtos. */ User Function MT010INC(nOpcao,oProcess) // iInicialmente, os parmetros nOpcao e oProcess estaro com valores iguaisl a NIL. default nOpcao := 0 // se nOpcao for NIL, ter o seu valor inicial com igual a 0 (zero). 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 poro enviaro d a mensagem para o destinatrio. /**/ 78 78 WorkFlow

User Function APVInicio(oProcess) Local nDias := 0, nHoras := 0, nMinutos := 10 Local cCodProcesso, cCodStatus, cHtmlModelo Local cUsuarioProtheus, cCodProduto, cTexto, cTitulo cCodProduto := SB1->B1_COD cCodProcesso := ATUAPV // Cdigo extrado do cadastro de processos. cHtmlModelo := "\workflow\atuapv.htm" cTitulo := Atualizao do preo de venda

// RRegistreegistrando o nome do usurio corrente que esta criando o processo:. cUsuarioProtheus:= SubStr(cUsuario,7,15) // InicializeInicializando a classe TWFProcess e assinaleando a varivel objeto oProcess:. oProcess := TWFProcess():New(cCodProcesso, cTitulo) oProcess:NewTask(cTitulo, cHtmlModelo) // Crieando uma tarefa... // AdicioneAdicionando o texto lista de etapas realizadas no fluxo do processo // para futuras consultas na janela de rastreabilidade. cTexto := Iniciando a solicitao de + cTitulo + do produto: + cCodProduto cCodStatus := 100100 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, Rastreabilidade cTexto, cUsuarioProtheus) //

cTexto := "Gerando solicitao para envio..." cCodStatus := 100200 // Cdigo do cadastro de status de processo. 79

WorkFlow - 79

oProcess:Track(cCodStatus, Rastreabilidade.

cTexto,

cUsuarioProtheus)

//

Assinale// Assinalando novos valores as macros existentes no html: oProcess:oHtml:ValByName("B1_COD", cCodProduto) oProcess:oHtml:ValByName("B1_DESC", SB1->B1_DESC) oProcess:oHtml:ValByName("B1_PRV1", SB1->B1_PRV1) oProcess:cSubject := cTitulo // Assunto da mensagem. oProcess:cTo := "bi@microsiga.com.br" // Endereo eletrnico do destinatrio.

/* A funo WFCodUser WFCodUser retorna o cdigo do usurio cadastrado no sistema a partir do nome informado. J E a propriedade : UserSiga, da classe TWFProcess, registra esta informao para o usurio responsvel pela tarefa. Estsa informao ser til para consultas de processos por usurio. */ oProcess:UserSiga := WFCodUser(BI)

// Antes de assinalar o ID do processo no campo, verificado se realmente // o campo existe na tabela SB1 If SB1->(FieldPos("B1_WFID")) > 0 If RecLock("SB1",.f.) SB1->B1_WFID := oProcess:fProcessID MsUnLock() EndIf EndIf // Nome da funo de retorno a ser executadao quando a mensagem com as // respostas retornarem ao Workflow:. 80 80 WorkFlow

oProcess:bReturn := "U_MT010INC(1)" /* Nome da funo que ser executadoa se houver um timeout. Neste exemplo, ser executadoa 5 minutos aps o envio do e-mail para o destinatrio. Caso queira-se aumentar ou diminuir o tempo, altere os valores das variaveis: nDias, nHoras e nMinutos. */ oProcess:bTimeOut := {"U_MT010INC(2)", nDias, nHoras, nMinutos} cTexto := "Enviando solicitao..." cCodStatus := 100300 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, Rastreabilidade oProcess:Start() destinatrio. cTexto , cUsuarioProtheus) //

// Gerae todo processo e enviea a mensagem ao

cTexto := "Aguardeando retorno..." cCodStatus := 100400 oProcess:Track(cCodStatus, Rastreabilidade Return /* APVRetorno Esta funo executada no retorno da mensagem enviada pelo destinatrio. O Workflow recria o processo onde em que parou anteriormente (APVInicio) e repassa a varivel objeto oProcess como parmetro. */ User Function APVRetorno(oProcess) Local nPrecoVenda Local cCodProduto, cCodStatus, cTexto cTexto , cUsuarioProtheus) //

81

WorkFlow - 81

// Obtenhaem o cdigo do produto: cCodProduto := oProcess:oHtml:RetByName("B1_COD") // ObtemObtenha destinatario: o novo preo de venda informado pelo

nPrecoVenda := Val(oProcess:oHtml:RetByName("B1_PRV1")) dbSelectArea("SB1") SB1->(dbSetOrder(1)) // Posicionae nsobre o produto cadastrado na tabela SB1: If SB1->(dbSeek(xFilial("SB1") + cCodProduto)) cTexto := "Atualizando o preo de venda..." cCodStatus := 100500 // Cdigo do cadastro de status de processo */ A funo de retorno executada automaticamente pelo sistema medida que a resposta chegar ate ao o workflow. Portanto, no h usurio associado execuo. De qualquer forma, posso informa o endereo eletrnico de quem respondeu a mensagem como fonte de informao para futuras consultas. */ oProcess:Track(cCodStatus, Rastreabilidade A cTexto, oProcess:cRetFrom) //

// Atualizeando o preo de venda: SB1->B1_PRV1 := nPrecoVenda MsUnLock()

If RecLock( "SB1", .f. )

EndIf Else cTexto := "No foi possvel encontrar o produto: " + cCodProduto cCodStatus := 100900 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, Rastreabilidade EndIf 82 82 WorkFlow cTexto, oProcess:cRetFrom) //

cTexto := "Finalizando o processo..." cCodStatus := 100800 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, Rastreabilidade cTexto, oProcess:cRetFrom) //

Return

//// // APTimeOut Esta funo ser executada a partir do Sscheduler no tempo // estipulado pela propriedade :bTimeout da classe TWFProcess. Caso o processo // tenha sido respondido em tempo hbil, estsa execuo ser descartada // automaticamente. //// User Function APTimeOut(oProcess) Local nDias := 0, nHoras := 0, nMinutos := 10 Local cCodStatus, cHtmlModelo Local cCodProduto, cTexto, cTitulo cHtmlModelo := "\workflow\atuapv.htm" cTitulo := Atualizao do preo de venda 83

WorkFlow - 83

cTexto := Executando TIMEOUT... cCodStatus := 100600 // Cdigo do cadastro de status de processo // Como a funo Ttimeout executada automaticamente pelo sistema, no h // usurio de sistema para associar a rastreabilidade. oProcess:Track(cCodStatus, cTexto) // Rastreabilidade

// Na execuo da funo de Ttimeout no se caracteriza retorno de mensagem. // Portanto, deve usar o mtodo :ValByName() no lugar do mtodo :RetByName() // para obter os valores contidos no html. cCodProduto := oProcess:oHtml:ValByName("B1_COD") oProcess:Finish() // Finalizo Finalize a tarefa anterior para no ficar pendente. dbSelectArea("SB1") SB1->(dbSetOrder(1)) // Localizoe o produto na tabela SB1: If SB1->(dbSeek(xFilial("SB1") + cCodProduto))

// Crioe uma nova tarefa aproveitando o contedo do html preenchido // anteriormente com o uso do 3. Pparmetro com o valor lgico igual a .T. // (verdadeiro) oProcess:NewTask(cTitulo, cHtmlModelo, .T.)

84 84 WorkFlow

// Antes de assinalar o ID do processo no campo, verificado verifique se realmente // o campo existe na tabela SB1: If SB1->(FieldPos("B1_WFID")) > 0 If RecLock("SB1",.f.) SB1->B1_WFID := oProcess:fProcessID MsUnLock() EndIf EndIf // Acrescenteando a palavarapalavra (REENVIO) no inicio do assunto da mensagem // para reforar que houve um Ttimeout executado. If (Left(oProcess:cSubject,9) != (REENVIO)) oProcess:cSubject := (REENVIO) + oProcess:cSubject EndIf

// Reforeo o mesmo destinatrio, conforme a funo U_APVInicio() oProcess:cTo := "bi@microsiga.com.br" oProcess:UserSiga := WFCodUser(BI) // Usurio responsvel pela tarefa. oProcess:bReturn := "U_MT010INC(1)" executada. // Funo de retorno a ser

oProcess:bTimeOut := {"U_MT010INC(2)", 0, 0, 5} // Funo de timeout cTexto := Reenviando a solicitao... cCodStatus := 100700 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, cTexto) // Rastreabilidade oProcess:Start() // GGerea todo o processo e enviae a mensagem ao destinatrio. 85

WorkFlow - 85

Else cTexto := "No foi possvel encontrar o produto: " + cCodProduto cCodStatus := 100900 // Cdigo do cadastro de status de processo oProcess:Track(cCodStatus, cTexto) // Rastreabilidade EndIf Return

PASSO 7 Compilar e executar o mdulo ambiente de comprasCOMPRAS. Aps compilar o programa ATUAPV.PRW, execute o mduloambiente de compras, e selecione a opo de menu Atualizaes | Cadastros | Produtos e Iinclua um novo produto. Ao confirmar a gravao, pressionando o boto Ok, ser enviado um email ao destinatrio contendo, no corpo o html, os dados do produto e o campo do valor do preo de venda a ser alterado.

86 86 WorkFlow

Ao receber o e-mail no cliente de e-mail, coloque o valor no campo Preo de Venda R$ e clique em Enviar. Garanta que o Scheduler esteja ativo e a funo de rRecebimento de mensagens do WorkflowWorkflow esteja agendada ( faa o agendamento de 1 em 1 minuto para que estaa resposta seja quase prontamente processada ). Passados alguns segundos, consulte o cadastro do produto recm- includo e veja que o preo de venda foi atualizado com o valor informado no e-mail.

87

WorkFlow - 87

PASSO 8 Consultas (Rastreabilidade de processo) A qualquer momento, podero ser realizardas consultas na janela de rastreabilidade para saber qual em que situao se encontraest um determinado processo. A partir da opo de menu Miscelnea | WorkflowWorkflow | Rastreabilidade no prprio mduloambiente de compras ( ou qualquer outro ), possvel realizar tais consultas.

No campo Pesq Padro:, selecione a pesquisa padro WFSB1 e, no campo Processo:, pressione F3 para realizar a pesquisa da tabela SB1 (produtos). Ao sSelecionare o produto, voc ter algumas informaes inerentes ao processo gerado para o produto escolhido. Veja Observe que todos os textos que inclumos atravs do mtodo oprocess:track(...) sero vistos nesta janela.

88 88 WorkFlow

89

WorkFlow - 89

PASSO 9 Consultas (Processo por usurios) A qualquer momento, o usurio do sistema poder realizar consultas sobre pendncias geradas pelo WorkflowWorkflow, simplesmente selecionando a opo de menu Miscelnea | WorkflowWorkflow | Processos Usuarios disponvel nos mduloambientes.

Se o usurio atual for aAdministrador, este ele poder ver as pendncias geradas para qualquer outro usurio cadastrado no sistema. Caso contrrio, somente ver visualizar as pendncias relacionadas a ele prprio.

90 90 WorkFlow

91

WorkFlow - 91

Integrao com o microsoft visio


Verso homologada: Microsoft Office Visio 2003

Atravs do Microsoft Visio, possvel desenhar fluxos de processos que possam interagir com o WorkflowWorkflow com o uso da rastreabilidade. Caso queira-se construir um novo fluxo de processo no Visio e que este venha interagir com o WorkflowWorkflow, basta usar o stencil WorkflowWorkflow fornecido pela Microsiga. Estse stencil estncil (veja lista de figuras no canto esquerdo do Vvisio), contm shapes (desenhos) que em suas propriedades foram configurados para interagir com o WorkflowWorkflow. Caso queira-se incluir qualquer um outro shape que no faa parte do stencil WorkflowWorkflow, no h problemas. S no ser possvel interagir com o evento duplo click do mouse para executar uma funo de usurio.

92 92 WorkFlow

Aps criar o arquivo .vsd (visio document) relacionado ao processo, especifique-o no cadastro de processo no campo Arquivo .vsd:.

93

WorkFlow - 93

Ao pressionar o boto Microsoft Visio, a partir do browser de cadastro de processos, ser aberto o .vsd automaticamente pelo aplicativo Microsoft Visio.

O boto Visio template, localizado no browser de cadastro de processos, responsvel por cadastrar as propriedades dos shapes na tabela WFCxxx (onde em que xxx refere-sencia ao cdigo da empresa) do banco de dados no Protheus. Estse cadastro se fazse necessrio para identificar e nomear cada um dos shapes contido no fluxo. Os nomes associados aos shapes, sero identificados nas linhas de programas atravs do mtodo :Track(...) pertencente a classe TWFProcess().

Exemplo: cCodigoStatus := 100400 cEmail := aprovador@dominio.com.br cDescricao := Aprovao enviado para: + cEmail cNomeUsuario := Subs(cUsuario,7,15) cVisioShape := ENVIAR_SOLICITACAO oProcess:Track( cVisioShape ) 94 WorkFlow cCodigoStatus, cDescricao, cNomeUsuario, 94

oProcess:cTo := cEmail oProcess:Start() Return nil

Aps pressionar o boto Visio template, o Microsoft Visio abrir o arquivo .vsd relacionado ao processo e. E bastar pressionar 95

WorkFlow - 95

2 duas vezes o boto do mouse (doubl click) sobre cada shape para que a janela de cadastro de propriedades seja exibidoexibida.

Templates Propriedades dos shapes


Campo Descrio

Shape Id

Cdigo interno controle Microsoft Visio. Somente leitura.

de do

Nome Shape

O prprio Vvisio sugere um nome para este shape. Porm, poder ser modificado para melhor identific-lo no programa.

96 96 WorkFlow

Descr Shape

Descrio do passo a que este shape esta associado ao fluxo do processo.

Templates - Propriedades dos Shapes Campo Descrio Causa uma dependncia de execuo destse shape com em relao ao selecionado. Neste caso, s poder ser executado secaso o selecionado estiver sido executado anteriormen te. Funo de usurio a ser executado, caso for seja pressionado 2 duas vezes o boto do mouse (doubl ckick). 97

Dependn cia

Ao

WorkFlow - 97

Cada shape contido no stencil WorkflowWorkflow responsvel por um tipo de evento (ao) a ser executado no Protheus. Alguns shapes possuem janelas padres de dialogo aps serem selecionados com o duplo click clique do mouse durante a apresentao do fluxo de processo. Estsas janelas s aparecero nos casos em que no for informadao a funo de usurio ao shape selecionado. Veja Observe os tipos de janelas padres existentes:

Propriedades
Shape Janela de dilogo Descrio

Realiza uma nova pesquisa de processo.

Apresenta a data e a hora em que foi enviadoa a mensagem ao destinatrio e a data e a hora em que o workflowWor kflow recebeu a resposta.

98 98 WorkFlow

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.

Se o aplicativo Microsoft Visio for localizado no sistema operacional do usurio, o boto Visio ser exibido na janela de rastreabilidade.

99

WorkFlow - 99

O Microsoft Visio exibir o fluxo do processo e colorir em verde o trajeto em que foi executado pelo processo e o vermelho a situao inversa.

100 100 WorkFlow

Realizando uma nova pesquisa ...

101

WorkFlow - 101

Verificando os timeouts associados ao processo...

102 102 WorkFlow

Verificando o destinatrio ...

Finalizando um processo a partir do Vvisio...

103

WorkFlow - 103

Exerccio Aprovao de Pedido de Compras


A partir do ponto de entrada (WFW120P), contido no cadastro de pedido de compras no mduloambiente de compras, criaremos um processo de WorkflowWorkflow e usaremos o mtodo Track() da classe TWFProcesso com o uso dos shapes.

Passo 1 Criar um novo campo na tabela SC7 (pedido de compras) Crie um novo campo C7_WFID do tipo caracter e tamanho igual a 7 na tabela SC7 para usarmos em futuras pesquisas que possam nos trazer o cdigo do processo relacionado ao pedido na janela de rastreabilidade. Passo 2 Criar uma nova pesquisa padro no SXB

104 104 WorkFlow

Crie uma nova pesquisa no SXB com o nome WFSC7 que faa referencia a tabela SC7 e retorne o contedo do campo C7_WFID. Passo 3 Microsoft Visio Document (.vsd) Crie um fluxo de processo de pedido de compras com o Microsoft Visio e grave na pasta do WorkflowWorkflow com o nome PEDCOMPRAS.VSD. Modelo exemplo:

Passo 4 Cadastro Visio Template

105

WorkFlow - 105

A partir do boto Visio Template no browser do cadastro de processos, cadastre todos os shapes relacionados ao fluxo de processo.

Use para cada um dos shapes apresentados no fluxo os seguintes nomes abaixo e, em seguida, confirme pressionando o boto OK: Shape Nome Shape INICIO

INCLUSAO

ENVIAR

APROVADOR_A

106 106 WorkFlow

TIMEOUT

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 | WorkflowWorkflow | Processos WorkflowWorkflow e crie um novo 107

WorkFlow - 107

processo, conforme o contedo dos campos apresentados na tabela abaixo:

Campo Cdigo Descrio PEDCOM

Conteudo

APROVACAO DE PEDIDO DE COMPRAS

Pesq Padro WFSC7 - PEDIDO DE COMPRAS Arquivo .vsd C:\MP8\AP_DATA\WORKFLOWWORKFLOW\PEDCOMPRA S.VSD

* O arquivo .vsd poder existir em outros lugares, basta informar o caminho e nome do arquivo a ser usado.

PASSO 6 Cadastro de Status Ainda no configurador, selecione a opo de menu Ambiente | WorkflowWorkflow | Status WorkflowWorkflow e cadastre alguns status para o processo mencionado acima, conforme o contedo dos campos apresentados abaixo: Cd Processo PEDCOM PEDCOM PEDCOM PEDCOM PEDCOM PEDCOM PEDCOM PEDCOM PEDCOM Cd Status 100100 100200 100300 100400 100500 100600 100700 100800 100900 INICIO GERANDO A SOLICITACAO ENVIANDO MENSAGEM RECEBENDO APROVACAO PEDIDO APROVADO PEDIDO REPROVADO ENVIANDO NOTIFICACAO EXECUTANDO TIMEOUT REENVIANDO SOLICITACAO 108 108 WorkFlow Descrio

PEDCOM

101000

FINALIZANDO PROCESSO

PASSO 7 Criar 2 dois htmls modelos para o processo Criar 2 dois htmls modelos chamado WFW120P1.htm (utilizado para aprovao) e WFW120P2.htm (utilizado para notificao) no diretrio \WORKFLOWWORKFLOW (abaixo do rootpath do protheus).

WFW120p1.htm

(modelo para aprovao do pedido)

Cdigo fonte: <html> 109

WorkFlow - 109

<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" %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 110 110 WorkFlow face="Verdana"><b>

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" 111

WorkFlow - 111

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> 112 112 WorkFlow

</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> <td width="155" bgcolor="#99CCFF"><font size="2" face="Verdana"><b>Total + IPI</b></font></td> <td width="121"><input type="text" size="13" name="T16" value=%lbtotal%></td> </tr> </table> <h4><font color="#0000FF" face="Verdana"><strong>APROVAO:</strong></font></h4> <p><input value="Sim"> Sim.<br> <input type="radio" name="%RBAPROVA%" value="Nao"> No. (Favor especificar motivo)<br> <h4><font size="2" face="Arial">Motivo: <textarea name="S1" rows="4" cols="74">%lbmotivo%</textarea></font><br> 113 type="radio" checked name="%RBAPROVA%"

WorkFlow - 113

</h4> <p><input type="button" name="B1" value="Enviar" onclick="ValidaObs(FrontPage_Form1)"> <input type="reset" name="B2" value="Limpar"> </p> </form> </body> </html>

WFW120p2.htm

(modelo para notificao)

114 114 WorkFlow

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" </b></font></h2> 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> 115 face="Verdana"><b>!Titulo!

<p><font color="#0000FF" face="Verdana"><b>Cabealho do

WorkFlow - 115

</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 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> 116 116 WorkFlow color="#0000FF"

<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> 117

WorkFlow - 117

<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> <td width="155" bgcolor="#99CCFF"><font size="2" face="Verdana"><b>Total + IPI</b></font></td> <td width="121"><input type="text" size="13" name="T16" value=%lbtotal%></td> </tr> </table> </form> </body> </html>

Passo 8 Criar um processo de WorkflowWorkflow a partir do ponto de entrada

118 118 WorkFlow

A partir do IDE, crie um arquivo de programa chamado WFW120p1.prw e associe a um de seus projeto. A baixo, crie as seguintes linhas de programas que faro parte do processo: WFW120p.PRW #INCLUDE PROTHEUS.CH /* // WFW120P Ponto de entrada do sistema do pedido de compras que. Este ponto de entrada ser // de compras // */ User Function WFW120p() U_APCIniciar() Return executado tanto na incluso como alterao do pedido a partir do boto OK.

/* // APCIniciar() Esta funo responsvel por iniciar a criao do processo e o // */ User Function APCIniciar() Local oProcess, oHtml Local cNumPed, cUsrCorrente Local aCond := {} 119 cDestinatario, cShape, cArqHtml, cAssunto, envio da mensagem para o destinatrio.

Local cCodigoStatus, cDescricao, cValor

WorkFlow - 119

Local nTotal := 0, nDias := 0, nHoras := 0, nMinutos := 10 // Obtenha// Obtem o numero do pedido: cNumPed := SC7->C7_NUM // // MonteMonta uma descrio para o assunto: cAssunto := "Aprovacao do pedido de compras No: " + cNumPed // // Informea o caminho e o arquivo html que ser usado. cArqHtml := "\workflowWorkflow\wfw120p1.htm" // Obtenha// Obtenho o nome do usurio corrente: cUsrCorrente := Subs(cUsuario,7,15) // Informe// Informo a lista deos destinatrios:. S, entreear entre ; se houver mais do que 1. separando-os :=

cDestinatario aprovador@microsiga.com.braprovador@microsiga.com.br // // InicializeInicializando a classe de processo...: oProcess := TWFProcess():New( "PEDCOM", cAssunto )

// Crie// Criando uma nova tarefa, informando o html template a ser utilizado:... oProcess:NewTask( "Aprovao do pedido", cArqHtml ) // Informe// Informo o nome do shape correspondente a este ponto do fluxo:... cShape := INICIO // // Informeo o cdigo do status do processo correspondente a este ponto do fluxo... cCodigoStatus := "100100" cDescricao := "Iniciando processo..."

120 120 WorkFlow

// // RepassoRepasse as informaes para o mtodo track() que registrar as informaes //// para a rastreabilidade e visio. oProcess:Track( cCodigoStatus, cDescricao, cUsrCorrente, cShape ) // // InformoInforme a funo que devera ser executada quando as respostas chegarem // // ao workflowWorkflow. oProcess:bReturn := "U_APCRetorno" oProcess:cSubject := cAssunto // // DeterminoDetermine o tempo necessrio para executar o timeout. 5 minutos ser // // suficiente para respondermos o pedido. Caso contrario, ser executado. oProcess:bTimeOut := {{"U_APCTimeout(1)", nDias, nHoras, nMinutos }} // // InformoInforme qual responsvel por esta tarefa. // Destsa // forma, ele poder ver a pendncia na consulta por usurio. oProcess:UserSiga := WFCodUser( APROVADOR ) oHtml := oProcess:oHTML // // CrioCrie novas informaes a serem passadas para o mtodo Track(), baseado // // no novo passo em que o fluxo se encontra. cShape := INCLUSAO 121 usuario do Pprotheus estar ser

WorkFlow - 121

cCodigoStatus := "100200" cDescricao := "Gerando solicitao de aprovao de pedido de compras..." oProcess:Track(cCodigoStatus, cDescricao, cUsrCorrente, cShape ) // // PreenchoPreencha os campos contidos no html com as informaes colhidas no // bancdo // de dados. oHtml:ValByName( "EMISSAO", SC7->C7_EMISSAO ) oHtml:ValByName( "FORNECEDOR", SC7->C7_FORNECE ) dbSelectArea(SA2) dbSetOrder(1) dbSeek(xFilial(SA2) + SC7->C7_FORNECE) oHtml:ValByName( "lb_nome", SA2->A2_NOME ) oHtml:ValByName( "lb_cond", SC7->C7_COND ) // Obtenha//Obtenho as condicoescondies de pPagamento. dbSelectArea(SE4) If dbSeek(xFilial(SE4)) While !Eof() .and. xFilial(SE4) == SE4->E4_FILIAL AAdd(aCond, "'" + SE4->E4_DESCRI + "'" ) dbSkip() end end dbSelectArea(SB1) dbSetOrder(1) dbSelectArea(SC7) oHtml:ValByName( "PEDIDO", SC7->C7_NUM ) cNum := SC7->C7_NUM dbSetOrder(1) 122 122 WorkFlow

dbSeek(xFilial(SC7) + cNum ) // // Preenchao a tabela do html chamadao produto. cCom seus respectivos campos. While !Eof() .and. ( C7_NUM == cNum ) SB1->( dbSeek( xFilial(SB1) + SC7->C7_PRODUTO ) ) nTotal := nTotal + C7_TOTAL AAdd( ( oHtml:ValByName( "produto.item" )),C7_ITEM ) AAdd( ( oHtml:ValByName( "produto.codigo" )),C7_PRODUTO ) AAdd( ( oHtml:ValByName( "produto.descricao" )),SB1->B1_DESC ) cValor := Transform( C7_QUANT,'@E 99,999.99' ) AAdd( ( oHtml:ValByName( "produto.quant" )), cValor) cValor := Transform( C7_PRECO,'@E 99,999.99' ) AAdd( ( oHtml:ValByName( "produto.preco" )), cValor) cValor := Transform( C7_TOTAL,'@E 99,999.99' ) AAdd( ( oHtml:ValByName( "produto.total" )), cValor) AAdd( ( oHtml:ValByName( "produto.unid" )),SB1->B1_UM ) AAdd( ( oHtml:ValByName( "produto.entrega" )), '0' ) AAdd( ( oHtml:ValByName( "produto.condPag" )),aCond ) // // Gravoe o novo campo criado e o ID do processo juntamente com+ o ID da tarefa //, para ser // obtidao a partir da pesquisa padro na janela da rastreabilidade. if RecLock("SC7",.f. ) C7_WFID := oProcess:fProcessID + oProcess:fTaskID MsUnLock("SC7") end dbSkip() Enddo 123

WorkFlow - 123

oHtml:ValByName("lbValor" , Transform( nTotal,'@E 99,999.99' ) ) oHtml:ValByName("lbFrete" , Transform( 0,'@E 99,999.99' ) ) oHtml:ValByName("lbTotal" , Transform( nTotal,'@E 99,999.99' ) ) oProcess:cTo := cDestinatario // // Finalizeo a primeira etapa do fluxo do processo, informando em que ponto o // // o fluxo do processo foi executado e, posteriormente, repasseo para o mtodo track(). cShape := ENVIAR;APROVADOR_A cCodigoStatus := 100300 cDescricao := "Enviando solicitacao para: " + cDestinatario oProcess:Track( cCodigoStatus, cDescricao, cUsrCorrente, cShape ) // // Neste ponto, o processo sera criado e ser mensagem para a lista // de // destinatrios. oProcess:Start() Return enviadao auma

124 124 WorkFlow

/* // APCRetorno() Esta funo responsvel por parapor atualizar o pedido de compras // */ User Function APCRetorno(oProcess) Local cFindKey, cDescricao cAssunto, cNumPed, cShape, cCodigoStatus, com as respostas vindas do aprovador.

// // ObteObtenhando o numero do pedido:... cNumPed := oProcess:oHtml:RetByName(Pedido) // // MontandoMonte a lista de argumentos para ser passadao para o mtodo track(): // // Pode ser informado mais do que 1 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 ) // Verificando Verifique se a resposta diferente de SIM. , Oou seja, rReprovado... if Upper(oProcess:oHtml:RetByName(RBAPROVA)) <> SIM dbSelectarea("SCR") // Posicionae a lLiberacao dbSetorder(2) 125

WorkFlow - 125

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

// // GereGerando rastreabilidade...:

novas informaes a serem passadas para a

cCodigoStatus := 100600 cDescricao := cAssunto + REPROVADO

// // Destsa vez, no informoe nenhum shape associado a reprovao devido por no // // haver nenhum shape relacionado a reprovao. oProcess:Track( cCodigoStatus, cDescricao ) // // Executeo a funo responsvel pela notificao ao usurio solicitante. U_APCNotificar( oProcess, cDescricao ) return .t. end // // LibereLiberando o pedido...: dbSelectArea("SCR") dbSetOrder(2) cFindKey := xFilial("SCR") + "PC" + cNumPed If dbSeek( cFindKey ) RecLock("SCR",.f.) 126 126 WorkFlow

SCR->CR_DATALIB := dDataBase SCR->CR_OBS := "" 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 ) // Executoe a funo responsvel pela notificao ao usurio solicitante. U_APCNotificar( oProcess, cDescricao) Return

127

WorkFlow - 127

/* // APCNotificar() Estsa funo responsvel por notificar ao solicitante o // */ User Function APCNotificar( oProcess, cDescricao ) Local oHtml Local aValues := Array(17) Local cNumPed, cShape, cCodigoStatus, cArqHtml // // Informoe o 2 html para notificacaoo que . Este diferente do wfw120p1.htm cArqHtml := "\workflowWorkflow\wfw120p2.htm" // // GereGerando informaes para a rastreabilidade...: cShape := NOTIFICACAO;SOLICITANTE cCodigoStatus := 100700 oProcess:Track( cCodigoStatus, cDescricao,, cShape ) // Devido// Como os htmls seremo possvelposso usar o 3 terceiro parmetro // com o valor .T. no mtodo // NewTask() da classe TWFProcess(). Neste caso, //, tenho deve-seque obter todas as // informaes que precisonecessrias para montar o novo html // para notificao ao solicitante. oHtml := oProcess:oHtml aValues[01] := oHtml:ValByName("EMISSAO") aValues[02] := oHtml:ValByName("FORNECEDOR") aValues[03] := oHtml:ValByName("lb_nome") aValues[04] := oHtml:ValByName("lb_cond") aValues[05] := oHtml:ValByName("PEDIDO") aValues[06] := oHtml:ValByName("Produto.item") 128 128 WorkFlow diferentes, no ser resultado da aprovao do pedido.

aValues[07] := oHtml:ValByName("Produto.codigo") aValues[08] := oHtml:ValByName("Produto.descricao") aValues[09] := oHtml:ValByName("Produto.quant") aValues[10] := oHtml:ValByName("Produto.preco") aValues[11] := oHtml:ValByName("Produto.total") aValues[12] := oHtml:ValByName("Produto.unid") aValues[13] := oHtml:ValByName("Produto.entrega") aValues[14] := oHtml:ValByName("Produto.condPag") aValues[15] := oHtml:ValByName("lbValor") aValues[16] := oHtml:ValByName("lbFrete") aValues[17] := oHtml:ValByName("lbTotal") // // Aps obter as informaes desejadas, crieo uma nova tarefa...: oProcess:NewTask("Resultado da Aprovao", cArqHtml ) oHtml := oProcess:oHtml // // Repasseo as informaes do outro html para esse novo... oHtml:ValByName("EMISSAO", aValues[01] ) oHtml:ValByName("FORNECEDOR", aValues[02] ) oHtml:ValByName("lb_nome", aValues[03] ) oHtml:ValByName("lb_cond", aValues[04] ) oHtml:ValByName("PEDIDO", aValues[05] ) AEval( aValues[06],{ |x| AAdd( oHtml:ValByName( "produto.item" ), x )}) AEval( aValues[07],{ |x| AAdd( oHtml:ValByName( "produto.codigo" ), x)}) AEval( aValues[08],{ "produto.descricao" ), x ) } ) |x| AAdd( oHtml:ValByName(

AEval( aValues[09],{ |x| AAdd( oHtml:ValByName( "produto.quant" ), x)}) AEval( aValues[10],{ |x| AAdd( oHtml:ValByName( "produto.preco" ), x)}) 129

WorkFlow - 129

AEval( aValues[11],{ |x| AAdd( oHtml:ValByName( "produto.total" ), x )}) AEval( aValues[12],{ |x| AAdd( oHtml:ValByName( "produto.unid" ), x )}) AEval( aValues[13],{ |x| AAdd( oHtml:ValByName( "produto.entrega" ), x ) } ) AEval( aValues[14],{ |x| AAdd( oHtml:ValByName( "produto.condPag" ), x ) } ) oHtml:ValByName( "lbValor", aValues[15]) oHtml:ValByName( "lbFrete", aValues[16]) oHtml:ValByName( "lbTotal", aValues[17]) oHtml:ValByName( "Titulo", cDescricao ) // // Informoe o endereo eletrnico do solicitante. Esta informao poderia estar // // armazenadoa em um campo na tabela SC7, por exemplo:.. oProcess:cTo := solicitante@microsiga.com.br oProcess:cSubject := "Retorno da Aprovacao do Pedido de Compras" // // EEnvienviando a mensagem para o solicitante:... oProcess:Start() // // Como no houve informaes geradas para essa tarefa nos campos bReturn // e // bTimeout, esse processo automaticamente. De qualquer // // forma, informo informe, na rastreabilidades, sobre estse passo alcanado no fluxo. cShape := TERMINO cCodigoStatus := 101000 cDescricao := "Termino do processo" oProcess:Track( cCodigoStatus, cDescricao,, cShape ) Return acaba sendoser finalizado

130 130 WorkFlow

/* // APCTimeout() Esta funo responsvel pela execuo do timeout // */ User Function APCTimeOut( nVezes, oProcess ) Local nDias := 0, nHoras := 0, nMinutos := 10 Local cNumPed, cShape, cCodigoStatus, cDescricao, cArqHtml // // InformeInformando o html...: cArqHtml := "\workflowWorkflow\wfw120p1.htm" // // ObtenhaObte ndo o numero nmero do pedido: //. Veja que o mtodo Valbyname() deve ser usado // na funo de timeout. cNumPed := oProcess:oHtml:ValByName(Pedido) do processo.

// // Verifico Verifique o numero de vezes que o timeout foi executado para este processo... If ( nVezes == 1 ) // // Se for a 1.primeira vVez, ..:. // fFinalizeo a tarefa anterior. oProcess:Finish() // // Crieo uma nova tarefa de reenvio, aproveitando as mesmas informaes // do // html preenchido anteriormente atravs do 3 terceiro parmetro do mtodo // // NewTask(), usando o valor .T. (verdadeiro). 131

WorkFlow - 131

oProcess:NewTask("Reenvio de aprovao", cArqHtml, .t. ) // // Determinoe rastreabilidade... uma nova informao a ser gravada na

cShape := TIMEOUT cCodigoStatus := 100800 cDescricao := "Executando timeout" oProcess:Track( cCodigoStatus, cDescricao,, cShape ) oProcess:cTo := "aprovador@microsiga.com.br" oProcess:bReturn := "U_APCRetorno" //// Desta vez, informoe ao timeout que ser for executado, ser pela 2 segunda vez. oProcess:bTimeOut nMinutos }} := {{"U_APCTimeout(2)", nDias, nHoras,

// // Incrementoe o assunto da mensagem para ficar ressaltado que se trata // // de um reenvio indicando o timeout. oProcess:cSubject := "(Timeout)" + oProcess:cSubject // // Preparoe novas informaes a serem inseridas na rastreabilidade.... cShape := REENVIO;APROVADOR_B cCodigoStatus := 100900 cDescricao := "Reenviando aprovacao do pedido de compras no. " + cNumPed oProcess:Track( cCodigoStatus, cDescricao,, cShape ) // // Gerae o processo e enviea a mensagem. oProcess:Start() else

132 132 WorkFlow

// // Envieo uma notificao ao usurio, indicando que o processo foi descartado. cDescricao := Pedido de compras no. + cNumPed + no foi atendido. U_APCNotificar(oProcess, cDescricao ) end Return

PASSO 9 Compilar e executar o modulo de compras Aps compilar o programa WFW120P.PRW, execute o mduloambiente de compras, e selecione a opo de menu Atualizaes | Pedidos | Pedidos de Compras e iInclua um novo pedido. Ao confirmar a gravao, pressionando o boto Ok, ser enviado um e-mail ao aprovador.

133

WorkFlow - 133

Garanta que o Scheduler esteja ativo e a funo de rRecebimento de mensagens do WorkflowWorkflow esteja agendada ( faa o agendamento de 1 em 1 minuto para que essta resposta seja quase prontamente processada ). Passados alguns minutos aps responder o e-mail (1 a 2 minutos no mximo), verifique se o pedido foi ou no aprovado.

PASSO 10 Consultas (rRastreabilidade de processo) A qualquer momento, podero ser realizadaso realizar consultas na janela de rastreabilidade para saber qual a situao em que se encontra um determinado processo. A partir da opo de menu Miscelnea | WorkflowWorkflow | Rastreabilidade, no prprio mduloambiente de compras( ou qualquer outro ), possvel realizar tais consultas.

No campo Pesq Padro:, selecione a pesquisa padro WFSC7 e, no campo Processo:, pressione F3 para realizar a pesquisa da tabela SC7 (pedido de compras). Ao Selecione selecionar o pedido, voc ter algumas informaes inerentes ao processo gerado para o produto escolhido. Veja Observe que todos os textos que inclumos, atravs do mtodo oprocess:track(...), sero vistos nesta janela.

134 134 WorkFlow

Iniciar o navegador Internet Explorer.lnk

135

WorkFlow - 135

136 136 WorkFlow

PASSO 11 Consultas (Processo por usurios) A qualquer momento, o usurio do sistema poder realizar consultas sobre pendncias geradas pelo WorkflowWorkflow, simplesmente selecionando a opo de menu Miscelnea | WorkflowWorkflow | Processos Usuarios disponvel nos mduloambientes.

Se o usurio atual for aAdministrador, este ele poder ver as pendncias geradas para qualquer outro usurio cadastrado no sistema. Caso contrrio, somente poder ver as pendncias relacionadas a ele prpriomesmo.

137

WorkFlow - 137

138 138 WorkFlow

Glossrio
Autenticao SMTP: validao de usurio e senha no servidor de email para envio de mensagens. Browser internet: programa que permite navegar nas pginas disponveis na internet. O Internet Explorer um exemplo de browser. Caixa de correio: nome dado a um diretrio em que sero armazenadas todas as mensagens recebidas, a enviar, enviadas etc. Em agrupamento de pastas nomeadas inbox, outbox, sent etc. pertencentes a uma determinada conta de e-mail. Cliente de e-mail: sofware de controle de e-mails pelo usurio final. Exemplos: OutLook Express e OutLook XP. Conta de e-mail: endereo de e-mail existente em um servidor de email. Cookies: arquivos gravados na estao do usurio, pelos diversos sites, para leitura de informaes daquela estao. Html (Hyper Text Mark-up Language): um arquivo no formato texto que contm diversos tipos de comando que controlam a apresentao visual no browser internet. Java Script: linguagem contida nos HTMLs, permitindo validaes e aes diversas. Messenger do Protheus: recurso disponvel no Protheus que serve para avisar aos usurios de algum processo ou mensagem de Workflow que esteja disponvel no aguardo de uma ao a ser tomada. Processo: conjunto de tarefas a serem executadas, baseadas em uma regra de negcio que determina um ou mais caminhos a serem seguidos denominados fluxo. 139

WorkFlow - 139

Protocolo POP3 ou IMAP: recurso disponvel pelos servidores de emails para permitir o acesso caixa de correio (leitura). Protocolo SMTP: recurso disponvel pelos servidores de e-mails para o envio de mensagens atravs de uma conta de e-mail. Rastreabilidade: recurso necessrio para localizar e identificar as propriedades (status, descrio, data, participante etc.) de um determinado processo de Workflow. Retorno: conjunto de respostas obtidas por e-mail ou pela postagem de um html via browser internet, atravs do servio http que sero usados para realizar atualizaes na base de dados do Protheus. Servio http: servio utilizado pelos servidores internet que disponibiliza aos usurios o acesso internet. Servidor de e-mail: software de controle de envios e recebimento de e-mails. Exemplos: Exchange e Domino. Timeout: tempo fora do prazo limite (tempo excedido). Procedimento a ser executado aps o tempo limite esperado por uma ao a ser tomada por um participante na trajetria de um fluxo de processo. Workflow: automao do fluxo de processo.

Nmero de Registro: WF8112527064070185742R4Workflow: Aautomao do fluxo de processo. Conta de Ee-mail : Eendereo de e-mail existente em um servidor de e-mail. Servidor de Ee-mail : Ssoftware de controle de envios e recebimento de e-mails. Exemplos : Exchange e, Domino. Protocolo POP3 ou IMAP: Rrecurso disponvel pelos servidores de emails para permitir o acesso caixa de correio (leitura). Protocolo SMTP : Rrecurso disponvel pelos servidores de e-mails para o envio de mensagens atravs de uma conta de e-mail. Caixa de correio: Nnome dado a um diretrio onde em que sero armazenados todas as mensagens recebidas, enviar, enviadas, etc.. Em agrupamento de pastas nomeados inbox, outbox, sent, etc.. pertencentes a uma determinada conta de e-mail. Servio http: Sservio utilizado pelos servidores internet que disponibilizdisponibilizaa aos usurios o acesso internet. Browser internet: Pprograma que permite navegar nas paginas disponveis na internet. O Internet Explorer exemplo de browser. Html (Hyper Text Mark-up Language): um arquivo no formato texto que contem diversos tipos de comando que controlam a apresentao visual no browser internet.

140 140 WorkFlow

Autenticao SMTP: Vvalidao de usurio e senha no servidor de email para envio de mensagens. Processo: o conjunto de tarefas a serem executados, baseados em uma regra de negocio que determinam um ou mais caminhos a serem seguidos, denominados fluxo. Retorno: o conjunto de respostas obtidas por e-mail ou pela postagem de um html via o browser internet atravs do servio http que sero usados para realizar atualizaes na base de dados do protheus. Rastreabilidade: Rrecurso necessrio para localizar e identificar as propriedades (status, descrio, data, participante, etc.) de um determinado processo de workflow. Timeout: Ttempo fora do prazo limite (tempo excedido). Procedimento a ser executado aps o tempo limite esperado por uma ao a ser tomada de um participante na trajetria de um fluxo de processo. Messenger do Protheus: rRecurso disponvel no protheus que serve para avisar aos usurios de algum processo ou mensagem de workflow que esteja disponvel no aguardo de uma ao a ser tomada. Cliente de Email : sSofware de controle de e-mails pelo usurio final. Exemplos : OutLook Express e, OutLook XP. Cookies : Aarquivos gravados na estao do usurio, pelos diversos sites, para leitura de informaes daquela estao Java Script : Llinguagem contida nos HTMLS HTMLs, permitindo validaes e aes diversas.

141

WorkFlow - 141

142 142 WorkFlow