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.