Вы находитесь на странице: 1из 4

ExemploAtualizaodePreos

Nesteexemplo,efetuaremostodosospassosparaaconstruodeumprocessosimplesdeWorkflow.OobjetivodesteWorkflowfazerqueacadainclusodeumproduto
umapessoadeverreceberumemailcontendoocdigoedescriodesteprodutoedeverinformarnesteemailovalordevendadesteproduto.Apsarespostadeste
usurio,oMicrosigaProtheusatualizarabasededadosdoProtheus.

Passo1:ConstruindooHTML:
Paraesteexemplo,faremosumHTMLmuitosimples.OmesmofoifeitonoFrontPageExpress .AbaixosegueocdigodoHTML(GraveocomonomedeCurso.HTM, em
umdiretrioabaixodoRootPathchamadoWorkflow.):
<html>
<head>
<metahttpequiv="ContentType"
content="text/htmlcharset=iso88591">
<metaname="GENERATOR"content="MicrosoftFrontPageExpress2.0">
<title>FavorAtualizaroPreodeVendadoProduto</title>
</head>

<bodybgcolor="#FFFFFF">

<formaction="mailto:%WFMailTo%"method="POST"
name="FrontPage_Form1">
<p>FavorAtualizaroPreodeVendadesteProduto</p>
<p>Data:%DATA%</p>
<tableborder="2">
<tr>
<tdwidth="100">Cdigo</td>
<tdwidth="200">Descrio</td>
<tdwidth="90">PreoVenda</td>

</tr>
<tr>
<td>%TB.CODIGO%</td>
<td><inputtype="text"size="20"
name="%TB.DESCRICAO%"value="%TB.DESCRICAO%"></td>
<td><inputtype="text"size="16"name="%TB.PRECO%"
value="%TB.PRECO%"></td>
</tr>
</table>
<p><inputtype="submit"name="B1"value="Enviar"></p>
</form>
<p>&nbsp</p>
<p>&nbsp</p>
</body>
</html>
Reparequenocdigoacimaexisteotrechomailto:%WFMailTo%,quetevequeserincludonamo.
EmalgunseditoresdeHTML,aogravaromesmopoderseracrescentadoonmero25notrechoacima:mailto:%25WFMailTo%25.Bastatirarestesnmeros.
NesteHTMLtemosquatroobjetosqueserosubstitudospordadosdoMicrosigaProtheus:DATA,TB.CODIGO,TB.DESCRICAO,TB.PRECO.
Nesteexemplo,atabelasomenteterosdadosdeumsproduto,maspoderiatermais.OcdigodapginaHTMLpermaneceriaomesmo.

Passo2:CadastrandoProcessoseStatus:
ParapodermosfazerumarastreabilidadedosprocessosdoWorkflow,devemoscadastraroprocessoeosStatusdesteprocesso.
VamoscadastrarentooProcessoemquesto.NoambienteConfigurador,cadastreoProcessocomoCdigoPRECOS.
No mesmo ambiente, cadastre dois Status para este processo: 10001, colocando a descrio de Email Enviado e o 10002, colocando a descrio de Email
Respondido.

Passo3:CriandooPontodeEntradacomoProcessodoWorkflow:
VamosentocriaropontodeEntradaquedisparadoacadainclusodeumproduto.OnomedopontodeEntradaMT010INC.Comentaremoscadalinhadoprograma.
UserFunctionMT010INC()

LocaloHTML
//CriooobjetooProcess,querecebeainicializaodaclasseTWFProcess.ReparequeoprimeiroParmetroocdigodoprocessoquecadastramosacimaeosegundo
umadescrioqualquer.
oProcess:=TWFProcess():New("PRECOS","AtualizacaodePrecos")
//Crio uma task. Um Processo pode ter vrias Tasks(tarefas). Para cada Task informo um nome para ela e o HTML envolvido. Repare que o path do HTML sempre
abaixodoRootPathdoMicrosigaProtheus.
oProcess:NewTask("PRECOS01","\WORKFLOW\CURSO.HTM")
//Informoottulodoemail.
oProcess:cSubject:="AtualizacaodePrecos"
//InformoqualfunooWorkflowexecutaraolerarespostadousurio.
oProcess:bReturn:="U_CURSO01R()"
//Informootempodeesperamximoparaarespostadousurioeafunoaserexecutadacasoestetemposejaultrapassado.
oProcess:bTimeOut:={{"U_CURSO01T()",0,0,5}}
//SimplesmentepassoovalordapropriedadeoProcess:oHTMLparaumavarivellocalparafacilitar
oHTML:=oProcess:oHTML
//ComeoapreencherosvaloresdoHTML.InicialmentepreenchooobjetoDATA(noHtml%DATA%)comadatabasedosistema.
oHTML:ValByName('DATA',dDataBase)
//Preenchoositensdatabela:Cdigo,DescriodoProdutoepreo.
dbSelectArea("SB1")
aadd((oHtml:valByName('TB.CODIGO')),B1_COD)
aadd((oHtml:valByName('TB.DESCRICAO')),B1_DESC)
aadd((oHtml:valByName('TB.PRECO')),TRANSFORM(B1_PRV1,'@E99,999.99'))
//Informoparaqualendereo(s)vaioemail
oProcess:cTo:=bi@workflow.com
//InformoocdigodousurionoMicrosigaProtheusquereceberoemail.IstotilparausaraconsultadeProcessosporusurio.
oProcess:UserSiga:="000000"
//ColocoaquiumpontodeRastreabilidade.OsdoisprimeirosparmetrossosempreosabaixopassadoseoterceiroindicaocdigodoStatusacimacadastrado.
RastreiaWF(oProcess:fProcessID+'.'+oProcess:fTaskID,oProcess:fProcCode,'10001')
//Aqui fao a gravao do ID do Processo (que gerado pelo Workflow e nico para cada processo) em um campo criado pelo usurio nesta tabela. Isto servir para

rastrearqualprocessoestligadoadeterminadoproduto.estecdigoquedeverserinformadonacaixadeIDdateladerastreabilidade.
RecLock('SB1')
SB1>B1_WFID:=oProcess:fProcessID
MsUnlock()
//IniciooProcesso,enviandooemail.
oProcess:Start()
Return.T.
Agora,crieafunoquetrataoretornodoEmail.AssimqueoWorkflowldacaixapostalumamensagemdesteprocesso,eleexecutaafunoabaixo,definidaacima
napropriedadebReturn.
//SemprepassadocomoltimoparmetroavariveloProcess,quecontmtodasaspropriedadesdoemailrespondido.
UserFunctionCURSO01R(oProcess)
dbSelectArea("SB1")
dbSetOrder(1)
//Pegoocdigodoproduto,atravsdomtodoRetByName,paraacharoprodutocorretonocadastro.
dbSeek(xFilial()+oProcess:oHtml:RetByName('TB.CODIGO')[1])
RecLock("SB1")
//Gravoovalordopreodevendainformadopelapessoaquerespondeuoemail
SB1>B1_PRV1:=Val(oProcess:oHtml:RetByName('TB.PRECO')[1])
MsUnlock()
//Colocomaisumpontoderastreabilidade,usandooStatus10002.
RastreiaWF(oProcess:fProcessID+'.'+oProcess:fTaskID,oProcess:fProcCode,'10002')
Return.T.
VamosagoracriarumafunoquetrataoTimeOut.ElasimplesmentemostraumamensagemnoconsoledoMicrosigaProtheus.Reparequeelarecebetambmcomo
ltimoparmetroavariveldoprocesso,igualafunoderetorno.
UserFunctionCURSO01T(oProcess)
ConOut('TimeOutexecutado')
Return.T.

Вам также может понравиться