No vídeo de hoje, vamos demonstrar em como criar um ícone na bandeja do sistema operacional e mostrar popups através do AdvPL.
A dúvida de hoje, nos perguntaram, se seria possível criar um mecanismo que mostre popups para o usuário sendo possível abrir funcionalidades no ERP.
Pensando nisso, montamos esse exemplo, onde demonstramos em como utilizar a classe TSystemTray junto com o SIGAMDI mostrando Popups para o usuário e sendo possível abrir funções via tecla de atalho.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"
//Variáveis estáticas
Static oSysTray
Static oTimer
/*/{Protheus.doc} User Function MdiOk
P.E. acionado logo ao abrir o sistema via SIGAMDI
@type Function
@author Atilio
@since 22/12/2023
@see https://tdn.totvs.com/display/public/framework/MDIOK
/*/
User Function MdiOk()
Local aArea := FWGetArea()
Local lContinua := .T.
Local oJanela := GetWndDefault()
Local oMenu
Local oItem1
Local cIcon := "totvsprinter_logo.png"
Local nTempo := 10000 //60.000 milissegundos é igual a 1 minuto
//Somente se for usuário administrador
If FWIsAdmin() .And. ValType(oSysTray) == "U"
//Monta o menu e os itens
oMenu := TMenu():New(0, 0, 0, 0, .T., , oJanela)
oItem1 := TMenuItem():New(oJanela,'...', , , , {|| /* comandos */ }, , 'BR_VERDE', , , , , , , .T.)
oItem2 := TMenuItem():New(oJanela,'Teste', , , , {|| Alert("testando, 123!") }, , 'CHECKED', , , , , , , .T.)
oMenu:Add(oItem1)
oMenu:Add(oItem2)
//Cria o ícone na barra do S.O.
oSysTray := TSystemTray():New(oJanela, cIcon)
oSysTray:cToolTip := "Protheus"
oSysTray:SetMenu(oMenu)
//Temporizador para disparar mensagem
oTimer := TTimer():New( nTempo,;
{|| fAtualiza() },;
oJanela )
oTimer:Activate()
EndIf
FWRestArea(aArea)
Return lContinua
Static Function fAtualiza()
Local aArea := FWGetArea()
Local cMensagem := "Agora é " + Time()
Local nTimeOut := 8000 // 8.000 milissegundos é igual a 8 segundos
Local cQuery := ""
Local nTotal := 0
//Busca os registros em analise que necessitam de aprovação
cQuery += " SELECT " + CRLF
cQuery += " E2_NUM " + CRLF
cQuery += " FROM " + CRLF
cQuery += " " + RetSQLName("SE2") + " SE2 " + CRLF
cQuery += " WHERE " + CRLF
cQuery += " E2_FILIAL = '01' " + CRLF
cQuery += " AND E2_VENCREA = '" + dToS(Date()) + "' " + CRLF
cQuery += " AND E2_BAIXA = '' " + CRLF
cQuery += " AND SE2.D_E_L_E_T_ = ' ' " + CRLF
TCQuery cQuery New Alias "QRY_SE2"
//Se existem dados
If ! QRY_SE2->(EoF())
//Conta a quantidade de registros
Count To nTotal
QRY_SE2->(DbGoTop())
//Monta a mensagem que será exibida
cMensagem := "Existem '" + cValToChar(nTotal) + "' títulos a pagar em aberto vencendo hoje. Pressione a tecla -F9- que será aberto a tela para análise."
//Exibe uma mensagem no S.O.
oSysTray:ShowMessage(;
"Pressione -F9-",; //[ cTitulo ],;
cMensagem,; //[ cMessage ],;
1,; //[ nTypeMessage ],;
nTimeOut,; //[ ntimeout ],;
{||}; //[ bAction ];
)
EndIf
QRY_SE2->(DbCloseArea())
FWRestArea(aArea)
Return
/*/{Protheus.doc} User Function ChkExec
Ponto de Entrada acionado ao clicar em alguma opção no menu
@type Function
@author Atilio
@since 22/12/2023
@see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/
User Function ChkExec()
Local lContinua := .T.
//Somente se for usuário administrador
If FWIsAdmin()
//Adiciona o atalho
SetKey(VK_F9, {|| FinA750() })
EndIf
Return lContinua
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Mestre muito bom esse artigo a minha duvida é eu adaptei ele para trazer os pedidos de compra pendente aprovação, só que quando coloco SetKey(VK_F9, {|| MATA094() }) ele nao deixa o botão de aprovar visível tem ideia de como posso resolver isso?
Bom dia Ruan, tudo joia?
Tenta encapsular numa User Function e forçar a mudança de nome da função, por exemplo:
—
SetKey(VK_F9, {|| u_SuaFuncao()})
—
Ai na sua função, ficaria algo assim:
—
User Function zSuaFuncao()
Local aArea := FWGetArea()
Local cFunBkp := FunName()
//Muda o nome da função e aciona
SetFunName(‘MATA094’)
MATA094()
//Volta o nome da função para o Backup
SetFunName(cFunBkp)
FWRestArea(aArea)
Return
—
Tenha uma ótima e abençoada sexta feira.
Um grande abraço.
Boa tarde Mestre, tenho uma duvida, compilei o fonte porem no meu caso aparece o icone ao lado do relógio com as opções porem o popup não aparece na tela.
Bom dia Pedro, tudo joia?
Se for o ambiente Windows, verifica se a função “Não Perturbe”/”Não incomodar” está ativada.
Pois se ela estiver ativada, ela não irá mostrar popups.
Tenha uma ótima e abençoada segunda feira.
Um grande abraço.
Isso mesmo, muito obrigado.
Bom dia Pedro, tudo joia?
Opa, nós que agradecemos o feedback.
Tenha uma ótima e abençoada terça feira.
Um grande abraço.