No artigo de hoje, vamos demonstrar em como fazer uma query, para consultar informações de uma rotina nos menus do Protheus.
Supondo que você precisa encontrar em que menu está determinada rotina, como podemos fazer isso através de uma query?
Pois bem, as tabelas que vamos usar aqui serão as seguintes:
- MPMENU_MENU – Cadastro de Menus
- MPMENU_ITEM – Itens do Menu
- MPMENU_FUNCTION – Função vinculada ao Item
- MPMENU_I18N – Opções do Menu e Opções do Item
Com isso, por exemplo, vou pesquisar pela função MATA010, e ela vai me trazer uma lista dos módulos onde está esse cadastro, conforme print abaixo:
E abaixo a query montada de exemplo:
SELECT M_NAME AS MODULO_NOME, M_MODULE AS MODULO_COD, I_TABLES AS TABELAS, F_FUNCTION AS FUNCAO, DADOS_MENU.N_DESC AS SUBMENU_NOME, DADOS_ITEM.N_DESC AS ROTINA_NOME FROM MPMENU_MENU MENU INNER JOIN MPMENU_ITEM ITEM ON ( ITEM.I_ID_MENU = MENU.M_ID AND ITEM.D_E_L_E_T_ = ' ' ) INNER JOIN MPMENU_FUNCTION FUNC ON ( FUNC.F_ID = ITEM.I_ID_FUNC AND FUNC.D_E_L_E_T_ = ' ' ) INNER JOIN MPMENU_I18N DADOS_MENU ON ( DADOS_MENU.N_PAREN_ID = ITEM.I_FATHER AND DADOS_MENU.N_LANG = '1' AND DADOS_MENU.D_E_L_E_T_ = ' ' ) INNER JOIN MPMENU_I18N DADOS_ITEM ON ( DADOS_ITEM.N_PAREN_ID = ITEM.I_ID AND DADOS_ITEM.N_LANG = '1' AND DADOS_ITEM.D_E_L_E_T_ = ' ' ) WHERE MENU.D_E_L_E_T_ = ' ' AND F_FUNCTION LIKE '%MATA010%' ORDER BY MODULO_COD
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Acaba de me salvar a pele! Tava ficando maluco tentando relacionar as tabelas de menu!
Bom dia Rafael, tudo joia?
Opa, ficamos felizes com o feedback.
Obrigado pelo comentário.
Tenha uma ótima e abençoada quinta feira.
Um forte abraço.
Olá, sabe onde ficam os dados sobre o acesso do usuário por rotina?
O que a função FWGetMnuAccess trás.
Gostaria de pegar direto do banco de dados se for possivel.
Bom dia Roberta, tudo joia?
Tenta fazer um teste, cria uma user function, e acione a função FwGetMenuAccess.
Nisso, coloque um breakpoint na linha que faz o acionamento e comece a depurar o código via VsCode.
Quando parar na linha do breakpoint, você abre o aplicativo dbMonitor na mesma pasta do dbAccess.
Nisso vai na sua conexão e dá um rastrear nela. Salve esse log, e depois procure nas queries, em quais tabelas estão sendo acessadas.
Tenha uma ótima e abençoada sexta feira.
Um forte abraço.
Como extrair um menu da homologação para colocar em produção?
Bom dia Danielle, tudo joia?
Se eu não me engano, a TOTVS estava estudando a criação de alguma ferramenta para exportar informações de um menu e depois importar em outra base.
Mas não sei se esse projeto seguiu em frente.
Momentaneamente o que você teria que fazer é ir recriando em produção os menus que estão em homologação.
Tenha uma ótima e abençoada sexta feira.
Um grande abraço.