Workflow Exemplo - Atualização de Preços

4
Exemplo Atualização de Preços Neste exemplo, efetuaremos todos os passos para a construção de um processo simples de Workflow. O objetivo deste Workflow é fazer que a cada inclusão de um produto uma pessoa deverá receber um email contendo o código e descrição deste produto e deverá informar neste email o valor de venda deste produto. Após a resposta deste usuário, o Microsiga Protheus® atualizará a base de dados do Protheus. Passo 1: Construindo o HTML: Para este exemplo, faremos um HTML muito simples. O mesmo foi feito no FrontPage Express ® . Abaixo segue o código do HTML (Graveo com o nome de Curso.HTM, em um diretório abaixo do RootPath chamado Workflow.): <html> <head> <meta httpequiv="ContentType" content="text/html; charset=iso88591"> <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> <title>Favor Atualizar o Preço de Venda do Produto</title> </head> <body bgcolor="#FFFFFF"> <form action="mailto:%WFMailTo%" method="POST" name="FrontPage_Form1"> <p>Favor Atualizar o Preço de Venda deste Produto</p> <p>Data : %DATA%</p> <table border="2"> <tr> <td width="100">Código</td> <td width="200">Descrição</td> <td width="90">Preço Venda</td>

description

Workflow Exemplo: Atualização de Preços

Transcript of Workflow Exemplo - Atualização de Preços

Page 1: Workflow Exemplo - Atualização de Preços

Exemplo ­ Atualização de Preços

Neste exemplo, efetuaremos todos os passos para a construção de um processo simples de Workflow. O objetivo deste Workflow é fazer que a cada inclusão de um produtouma pessoa deverá receber um e­mail contendo o código e descrição deste produto e deverá informar neste e­mail o valor de venda deste produto. Após a resposta desteusuário, o Microsiga Protheus® atualizará a base de dados do Protheus.

Passo 1: Construindo o HTML:

Para este exemplo, faremos um HTML muito simples. O mesmo foi feito no FrontPage Express®. Abaixo segue o código do HTML (Grave­o com o nome de Curso.HTM, emum diretório abaixo do RootPath chamado Workflow.):

<html>

<head>

<meta http­equiv="Content­Type"

content="text/html; charset=iso­8859­1">

<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">

<title>Favor Atualizar o Preço de Venda do Produto</title>

</head>

<body bgcolor="#FFFFFF">

<form action="mailto:%WFMailTo%" method="POST"

name="FrontPage_Form1">

<p>Favor Atualizar o Preço de Venda deste Produto</p>

<p>Data : %DATA%</p>

<table border="2">

<tr>

<td width="100">Código</td>

<td width="200">Descrição</td>

<td width="90">Preço Venda</td>

Page 2: Workflow Exemplo - Atualização de Preços

</tr>

<tr>

<td>%TB.CODIGO%</td>

<td><input type="text" size="20"

name="%TB.DESCRICAO%" value="%TB.DESCRICAO%"></td>

<td><input type="text" size="16" name="%TB.PRECO%"

value="%TB.PRECO%"></td>

</tr>

</table>

<p><input type="submit" name="B1" value="Enviar"></p>

</form>

<p>&nbsp;</p>

<p>&nbsp;</p>

</body>

</html>

Repare que no código acima existe o trecho mailto:%WFMailTo%, que teve que ser incluído na mão.

Em alguns editores de HTML, ao gravar o mesmo poderá ser acrescentado o número 25 no trecho acima: mailto:%25WFMailTo%25. Basta tirar estes números.

Neste HTML temos quatro objetos que serão substituídos por dados do Microsiga Protheus®: DATA, TB.CODIGO, TB.DESCRICAO, TB.PRECO.

Neste exemplo, a tabela somente terá os dados de um só produto, mas poderia ter mais. O código da página HTML permaneceria o mesmo.

Passo 2 : Cadastrando Processos e Status:

Para podermos fazer uma rastreabilidade dos processos do Workflow, devemos cadastrar o processo e os Status deste processo.

Vamos cadastrar então o Processo em questão. No ambiente Configurador, cadastre o Processo com o Código PRECOS.

No mesmo ambiente, cadastre dois Status para este processo: 10001, colocando a descrição de ‘E­mail Enviado’ e o 10002, colocando a descrição de ‘E­mailRespondido’.

Passo 3: Criando o Ponto de Entrada com o Processo do Workflow:

Vamos então criar o ponto de Entrada que é disparado a cada inclusão de um produto. O nome do ponto de Entrada é MT010INC. Comentaremos cada linha do programa.

User Function MT010INC()

Page 3: Workflow Exemplo - Atualização de Preços

Local oHTML

//Crio o objeto oProcess, que recebe a inicialização da classe TWFProcess. Repare que o primeiro Parâmetro é o código do processo que cadastramos acima e o segundouma descrição qualquer.

oProcess := TWFProcess():New( "PRECOS", "Atualizacao de Precos" )

//Crio uma task. Um Processo pode ter várias Tasks(tarefas). Para cada Task informo um nome para ela e o HTML envolvido. Repare que o path do HTML é sempreabaixo do RootPath do Microsiga Protheus®.

oProcess:NewTask( "PRECOS01", "\WORKFLOW\CURSO.HTM" )

//Informo o título do e­mail.

oProcess:cSubject := "Atualizacao de Precos"

//Informo qual função o Workflow executará ao ler a resposta do usuário.

oProcess:bReturn := "U_CURSO01R()"

//Informo o tempo de espera máximo para a resposta do usuário e a função a ser executada caso este tempo seja ultrapassado.

oProcess:bTimeOut := "U_CURSO01T()",0, 0, 5

//Simplesmente passo o valor da propriedade oProcess:oHTML para uma variável local para facilitar

oHTML := oProcess:oHTML

//Começo a preencher os valores do HTML. Inicialmente preencho o objeto DATA(no Html %DATA%) com a data base do sistema.

oHTML:ValByName('DATA',dDataBase)

//Preencho os itens da tabela : Código, Descrição do Produto e preço.

dbSelectArea("SB1")

aadd((oHtml:valByName('TB.CODIGO')),B1_COD)

aadd((oHtml:valByName('TB.DESCRICAO')),B1_DESC)

aadd((oHtml:valByName('TB.PRECO')),TRANSFORM( B1_PRV1,'@E 99,999.99' ))

//Informo para qual endereço(s) vai o e­mail

oProcess:cTo := [email protected]

//Informo o código do usuário no Microsiga Protheus® que receberá o e­mail. Isto é útil para usar a consulta de Processos por usuário.

oProcess:UserSiga := "000000"

//Coloco aqui um ponto de Rastreabilidade. Os dois primeiros parâmetros são sempre os abaixo passados e o terceiro indica o código do Status acima cadastrado.

RastreiaWF(oProcess:fProcessID+'.'+oProcess:fTaskID,oProcess:fProcCode,'10001')

//Aqui faço a gravação do ID do Processo (que é gerado pelo Workflow e único para cada processo) em um campo criado pelo usuário nesta tabela. Isto servirá para

Page 4: Workflow Exemplo - Atualização de Preços

rastrear qual processo está ligado a determinado produto. É este código que deverá ser informado na caixa de ID da tela de rastreabilidade.

RecLock('SB1')

SB1­>B1_WFID := oProcess:fProcessID

MsUnlock()

//Inicio o Processo, enviando o e­mail.

oProcess:Start()

Return .T.

Agora, crie a função que trata o retorno do E­mail. Assim que o Workflow lê da caixa postal uma mensagem deste processo, ele executa a função abaixo, definida acimana propriedade bReturn.

//Sempre é passado como último parâmetro a variável oProcess, que contém todas as propriedades do e­mail respondido.

User Function CURSO01R(oProcess)

dbSelectArea("SB1")

dbSetOrder(1)

//Pego o código do produto, através do método RetByName, para achar o produto correto no cadastro.

dbSeek(xFilial()+oProcess:oHtml:RetByName('TB.CODIGO')[1])

RecLock("SB1")

//Gravo o valor do preço de venda informado pela pessoa que respondeu o e­mail

SB1­>B1_PRV1 := Val(oProcess:oHtml:RetByName('TB.PRECO')[1])

MsUnlock()

//Coloco mais um ponto de rastreabilidade, usando o Status 10002.

RastreiaWF(oProcess:fProcessID+'.'+oProcess:fTaskID,oProcess:fProcCode,'10002')

Return .T.

Vamos agora criar uma função que trata o TimeOut. Ela simplesmente mostra uma mensagem no console do Microsiga Protheus®. Repare que ela recebe também comoúltimo parâmetro a variável do processo, igual a função de retorno.

User Function CURSO01T(oProcess)

ConOut('TimeOut executado')

Return .T.