Como adicionar um submenu em alguma rotina no Protheus

Hoje iremos demonstrar como adicionar submenus dentro de um menu via AdvPL.

As rotinas de cadastro em AdvPL, possuem um menu que é montado através de um Array, geralmente com as informações de Descrição da rotina, Função e número da opção do menu.

Mas e para adicionar um submenu, como fazer? No caso, ao invés de informar o nome de uma função, basta informar o array que será adicionado.

Note no print abaixo, que adicionamos uma opção no menu (Visualizar XYZ) e em seguida um submenu, e dentro do submenu tem algumas funções e mais um submenu:

Exemplo de submenu

Abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function nomeFunction
Ponto de entrada para adicionar opções no menu do cadastro de produtos
@type  Function
@author Atilio
@since 24/05/2021
@see https://tdn.totvs.com/pages/releaseview.action?pageId=370617549
/*/

User Function MTA010MNU()
    Local aArea := GetArea()
    Local aSubMenu := {}
    Local aSubMenu2 := {}

    //Adicionando opções no segundo submenu
    aAdd(aSubMenu2, {"Item A", "u_FuncSubA()", 0, 2, 0, NIL})
    aAdd(aSubMenu2, {"Item B", "u_FuncSubB()", 0, 2, 0, NIL})

    //Adicionando opções no primeiro submenu
    aAdd(aSubMenu, {"Opção 1",     "u_FuncSub1()", 0, 2, 0, NIL})
    aAdd(aSubMenu, {"Opção 2",     "u_FuncSub1()", 0, 2, 0, NIL})
    aAdd(aSubMenu, {"Opção 3",     "u_FuncSub1()", 0, 2, 0, NIL})
    aAdd(aSubMenu, {"Opção 4",     "u_FuncSub1()", 0, 2, 0, NIL})
    aAdd(aSubMenu, {"Opção Itens", aSubMenu2,      0, 2, 0, NIL})

    //Adicionando uma função no menu principal e adicionando o submenu
    aAdd(aRotina, {"* Visualizar XYZ", "u_Funcao1()", 0, 2, 0, NIL})
    aAdd(aRotina, {"* Sub-Menu",       aSubMenu,      0, 2, 0, NIL})
    
    RestArea(aArea)
Return

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.

Deixe uma resposta

Terminal de Informação