WorkFlow de Produtos ADVPL Via Link Parte 01
Senhores, vamos iniciar uma serie para desenvolvimento de WorkFlow em ADVPL via Link com envio, layout em HTML e retorno fora do Protheus via link.
O desenvolvido é um processo simples com alguns pontos de entrada para adicionar a execução do WorkFlow no Menu Outras Ações, para legenda e também para envio automático após a gravação do produto
Vamos ao que interessa
Configuração
Para começo de historia vamos fazer as configurações para envio de WokFlow via link, no primeiro link você pode verificar as configurações no seu appserver, qualquer duvida ou problema na configuração deixe nos comentários que irei responder
https://tdn.totvs.com/pages/releaseview.action?pageId=225268728
https://interno.totvs.com/mktfiles/tdiportais/helponlineprotheus/p12/portuguese/sigaworkflow.htm
Campo Customizado
Seguindo nosso projeto é necessário criação de um campo customizado na SB1 para controlar o Status do WorkFlow, para o exemplo foi criado somente um campo para validar o status, mas facilmente podem ser criados mais campos controlando hora do disparo do e-mail, data do disparo, motivo da recusa da aprovação e por ai vai.
Configuração do Campo:



Pontos de Entrada
O primeiro Ponto de Entrada MT010CAN, vai acionar WF após cadastro do produto
#Include "TOTVS.ch"
#Include 'Protheus.ch'
/*/{Protheus.doc} User Function MT010CAN
(LOCALIZAÇÃO: Este ponto está localizado nas funções
A010Inclui (Inclusão do Produto),
A010Altera (Alteração do Produto) e
A010Deleta (Deleção do Produto).
EM QUE PONTO: No final das funções citadas, após atualizar ou não os dados do Produto;
Pode ser utilizado para executar customizações conforme o tipo de retorno: Execução OK ou Execução Cancelada.
Será acionado para disparar o WF no cadastro do produto)
@type Function
@author Leandro Lemos
@since 16/12/2020
@version P12
@param param_name, param_type, param_descr
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
User Function MT010CAN()
//TRATAMENTOS DO USUÁRIO 1- Alteração
IF (INCLUI .OR. (ALTERA .and. !(SB1->B1_ZSITUA $ '03,04')))
u_wfProdutos(SB1->B1_COD)
EndIF
Return Nil
MT010COR, Ponto de Entrada para adicionar legenda de cores na tela de cadastro de produtos Mata010
#Include "TOTVS.ch"
#Include 'Protheus.ch'
/*/{Protheus.doc} User Function MT010COR
(Ponto de Entrada para adicionar legenda de cores na tela de cadastro de produtos Mata010)
@type Function
@author Leandro Lemos
@since 16/12/2020
@version P12
@param param_name, param_type, param_descr
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
USER FUNCTION MT010COR ()
Local aCores:={}
aAdd(aCores,{'B1_ZSITUA == ""','BR_VERMELHO',Nil}) //Não Enviado
aAdd(aCores,{'B1_ZSITUA == "01"','BR_VERMELHO',Nil}) //Não Enviado
aAdd(aCores,{'B1_ZSITUA == "02"','BR_AZUL',Nil}) //Aguardando aprovação
aAdd(aCores,{'B1_ZSITUA == "03"','BR_VERDE',Nil}) //Aprovado
aAdd(aCores,{'B1_ZSITUA == "04"','BR_LARANJA',Nil}) //Recusado
RETURN aCores
MT010BRW, Adiciona mais opções de menu na Mbrowse
#Include "TOTVS.ch"
#Include 'Protheus.ch'
/*/{Protheus.doc} User Function MT010BRW
(Adiciona mais opções de menu na Mbrowse ( ) --> aRotUser
Deve retornar um Array contendo as novas opções no menu)
@type Function
@author Leandro Lemos
@since 16/12/2020
@version P12
@param param_name, param_type, param_descr
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
USER FUNCTION MT010BRW ()
Local aLegMnu:={}
aAdd(aLegMnu,{"Legenda","U_MT010LEG", 0, 3, 0, Nil })
RETURN aLegMnu
USER FUNCTION MT010LEG()
Local aLegenda := {}
aAdd(aLegenda,{'BR_VERMELHO' ,"Não Enviado"})
aAdd(aLegenda,{'BR_VERDE' ,"Aprovado"})
aAdd(aLegenda,{'BR_AZUL' ,"Aprovação Pendente"})
aAdd(aLegenda,{'BR_LARANJA' ,"Reprovado"})
BrwLegenda("Legendas","Legenda de acordo com o Status", aLegenda )
Return
Função do WorkFlow
Adiantando o desenvolvido o WorkFlow, utilizaremos duas funções, uma para envio do WF e outra para o retorno.
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function wfProdutos
(Fonte para envio de WorkFlow para Fluxo de Cadastro de Produto)
@type Function
@author Leandro Lemos
@since 16/12/2020
@version P12
@param cProduto, param_type, param_descr
@return lOk, bool, confirmação ou não da operação
@example
(examples)
@see (links_or_references)
/*/
User Function wfProdutos(cProduto)
Local lOk := .T.
if MsgNoYes("Iniciar Teste?",'Teste')
MsgInfo(cProduto,"Teste")
endif
Return lOk
/*/{Protheus.doc} User Function wfPrdRet
(long_description)
@type Function
@author Leandro Lemos
@since 16/12/2020
@version P12
@param , ,
@return lOk, bool, confirmação ou não da operação
@example
(examples)
@see (links_or_references)
/*/
User Function wfPrdRet()
Return lOk
Por hora encerramos por aqui, falta desenvolver o fonte responsável pelo WF e também o layout em HTML.
O material desenvolvido aqui e as próximas partes podem ser baixadas em meu git.
https://github.com/lemossleandro/erplabs
Qualquer dica para a continuação do exemplo, deixe nos comentários.