Definindo se um mBrowse irá executar ação em loop com MBrChgLoop – Maratona AdvPL e TL++ 341

Nesse vídeo demonstraremos a utilização da função MBrChgLoop, que serve para definir se um mBrowse clássico, irá ter o recurso de ser acionado em loop (similar a telas em MVC).

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} User Function zExe341
Ativa recurso para que cada inclusão acione a tela novamente (similar ao recurso que existe em MVC)
@type Function
@author Atilio
@since 22/03/2023
@obs 

    Função MBrChgLoop
    Parâmetros
        .T. se quiser ativar recurso em Loop e .F. se não quiser
    Retorno
        Função não tem retorno

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe341()
	Local aArea   := FWGetArea()
    Local aCores  := {}
	Private aRotina := MenuDef()
	Private cCadastro := "Grupo de Produtos"

    aAdd(aCores, {"SBM->BM_PROORI == '1'", "BR_PRETO"})
    aAdd(aCores, {"SBM->BM_PROORI == '0'", "BR_VERMELHO"})
    aAdd(aCores, {"EMPTY(SBM->BM_PROORI)", "BR_BRANCO"})

    //Ativa o recurso para funcionar em Loop
    MBrChgLoop(.T.)

    //Faz a abertura da tela
    mBrowse(1, 1, , , 'SBM', , , , , , aCores)

	FWRestArea(aArea)
Return

Static Function MenuDef()
	Local aRotina := {}

	//Adicionando opcoes do menu
	aAdd(aRotina, {"Pesquisar", "AXPESQUI", 0, 1})
	aAdd(aRotina, {"Visualizar", "AXVISUAL", 0, 2})
	aAdd(aRotina, {"Incluir", "AXINCLUI", 0, 3})
	aAdd(aRotina, {"Alterar", "AXALTERA", 0, 4})
	aAdd(aRotina, {"Excluir", "AXDELETA", 0, 5})

Return aRotina

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Leonardo Lourenço disse:

    Boa tarde,

    É possível utilizar MbrChgLoop com uma tela MsDialog com EnchoiceBar?

    Obrigado

    • Bom dia Leonardo, tudo joia?

      A MbrChgLoop não, mas você poderia tratar manualmente no seu fonte. Algo mais ou menos no seguinte sentido:
      a. Você iria criar uma variável lFazLoop como Private na sua User Function e definir ela como .T.
      b. Nisso, você faria um laço de repetição para acionar a static function que monta sua dialog, por exemplo:

      While lFazLoop
      fAcionaSuaDialog()
      EndDo

      c. Dentro dessa sua Static Function, no bloco de código do botão cancelar, ai você altera a flag para .F., algo mais ou menos assim:
      Local bBlocoCan := {|| lFazLoop := .F., … restante do código …}

      Feito isso então, por trás o sistema vai ficar em loop sempre acionando a dialog, mas ai se o usuário clicar no cancelar, como a variável vai mudar para .F. ele vai sair do laço.

      Tenha uma ótima e abençoada sexta feira.

      Um grande abraço.

Deixe uma resposta

Terminal de Informação