Como adicionar submenus no Outras Ações em uma função do Protheus

No artigo de hoje, vou demonstrar em como criar submenus no Outras Ações dentro de uma rotina.

Recentemente me perguntaram em como fazer para adicionar um submenu em uma rotina no Protheus.

Contextualizando então, a lógica basicamente é:

  • Todo menu é composto por um Array, geralmente chamado de aRotina, e geralmente criado por uma função estática chamada MenuDef
  • Nesse array de menu, você pode adicionar funções, por exemplo “U_zSuaFuncao()”
  • Para termos um submenu, o que temos que fazer é adicionar um array dentro desse array

Exemplificando o descritivo acima, abaixo um exemplo do ponto de entrada no menu do pedido de vendas:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} MA410MNU
Ponto de Entrada na adição de funções no Pedido de Venda
@author Atilio
@since 02/01/2023
@version 1.0
@type function
@see https://tdn.totvs.com/display/public/PROT/MA410MNU
/*/
 
User Function MA410MNU()
    Local aArea    := FWGetArea()
    Local aSubMenu := {}
 
    //Exemplo 1 - Adicionando direto no menu
    aAdd(aRotina, {"* Transferir Filial", "u_zTransPed()", 0, 4, 0, Nil})
 
 
 
    //Exemplo 2
    //Criando as opções de um submenu, e depois adiciona na rotina principal
    aSubMenu := {}
    aAdd(aSubMenu, {"* Imprimir Pedido",   "u_zImprPed()",  0, 4, 0, Nil})
    aAdd(aSubMenu, {"* Transferir Filial", "u_zTransPed()", 0, 4, 0, Nil})
    aAdd(aSubMenu, {"* Verificar Status",  "u_zVerStat()",  0, 4, 0, Nil})
    aAdd(aRotina, {"Customizações", aSubMenu, 0, 2, 0, Nil})
     
    FWRestArea(aArea)
Return

Abaixo um print de como fica na tela do Protheus:

Exemplo de submenu

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