Pular para o conteúdo principal

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Carregando o(s) Ícone(s) do(s) Módulo(s) Específico(s) no SIGAMDI

A mesma dúvida que me fez publicar o "post" Protheus :: Disponibilizando os módulos específicos no SIGAMDI , gerou esse novo "post". A nova dúvida é: Agora que disponibilizei a Descrição dos Módulos Específicos no menu de Módulos do SIGAMDI, como fazer para que os "Ícones" referentes a esses módulos apareçam antes da descrição?

Essa foi uma boa pergunta. A resposta para a disponibilização dos Módulos, foi até simples. Bastaria saber da existência dos "Pontos de Entrada" descritos no "post" anterior.
Mas e para os ícones? Existem "Pontos de Entrada"?

Procurei um bocado e não encontrei "Ponto de Entrada" para esse fim. E agora? Já que não tem "Ponto de Entrada" como carregar os "Ícones"?

A resposta vai depender do quanto conheçemos o sistema. Sua estrutrura semântica, a forma de tratamento de erro e, finalmente, como gerar o nosso próprio "Ponto de Entrada" à partir desse conhecimento.

Para chegar à resposta que publicarei nesse "post", além de "quebrar  a cabeça" tive que fazer uso de todo o meu conhecimento da linguagem e do método da  "Tentativa e Erro" e o das "Aproximações Sucessivas" .

Primeiro, teria que identificar, em que momento e em que lugar, o sistema definia os "Ìcones" que seriam apresentados junto à descrição dos Módulos no menu de Módulos do SIGAMDI. Para isso, fui "debugando" passo a passo o sistema, identificando as funções e variáveis que eram apresentadas até o ponto da geração do Menu de Módulos do SIGAMDI.

Tendo feito isso, identifiquei uma variável "Static" de nome aRetModName que continha todas as informações dos módulos. Identifiquei nessa variável as seguintes informações:


aRetModName -> ARRAY (   80) [...]
          aRetModName[1] -> ARRAY (    5) [...]
               aRetModName[1][1] -> N (   15) [         1.0000]

               aRetModName[1][2] -> C (    7) [SIGAATF]

               aRetModName[1][3] -> C (   11) [Ativo Fixo ]

               aRetModName[1][4] -> L (    3) [.T.]

               aRetModName[1][5] -> C (    6) [ATFIMG]

          aRetModName[2] -> ARRAY (    5) [...]
               aRetModName[2][1] -> N (   15) [         2.0000]

               aRetModName[2][2] -> C (    7) [SIGACOM]

               aRetModName[2][3] -> C (    8) [Compras ]

               aRetModName[2][4] -> L (    3) [.T.]

               aRetModName[2][5] -> C (    6) [COMIMG]

          aRetModName[3] -> ARRAY (    5) [...]
               aRetModName[3][1] -> N (   15) [         3.0000]

               aRetModName[3][2] -> C (    7) [SIGACON]

               aRetModName[3][3] -> C (   14) [Contabilidade ]

               aRetModName[3][4] -> L (    3) [.F.]

               aRetModName[3][5] -> C (    6) [CONIMG]

          aRetModName[4] -> ARRAY (    5) [...]
               aRetModName[4][1] -> N (   15) [         4.0000]

               aRetModName[4][2] -> C (    7) [SIGAEST]

               aRetModName[4][3] -> C (   14) [Estoque/Custos]

               aRetModName[4][4] -> L (    3) [.T.]

               aRetModName[4][5] -> C (    6) [ESTIMG]

          aRetModName[5] -> ARRAY (    5) [...]
               aRetModName[5][1] -> N (   15) [         5.0000]

               aRetModName[5][2] -> C (    7) [SIGAFAT]

               aRetModName[5][3] -> C (   11) [Faturamento]

               aRetModName[5][4] -> L (    3) [.T.]

               aRetModName[5][5] -> C (    6) [FATIMG]

          aRetModName[6] -> ARRAY (    5) [...]
               aRetModName[6][1] -> N (   15) [         6.0000]

               aRetModName[6][2] -> C (    7) [SIGAFIN]

               aRetModName[6][3] -> C (   10) [Financeiro]

               aRetModName[6][4] -> L (    3) [.T.]

               aRetModName[6][5] -> C (    6) [FINIMG]

          aRetModName[7] -> ARRAY (    5) [...]
               aRetModName[7][1] -> N (   15) [         7.0000]

               aRetModName[7][2] -> C (    7) [SIGAGPE]

               aRetModName[7][3] -> C (   17) [Gestão de Pessoal]

               aRetModName[7][4] -> L (    3) [.T.]

               aRetModName[7][5] -> C (    6) [GPEIMG]

          aRetModName[8] -> ARRAY (    5) [...]
               aRetModName[8][1] -> N (   15) [         8.0000]

               aRetModName[8][2] -> C (    7) [SIGAFAS]

               aRetModName[8][3] -> C (   19) [Faturamento Serviço]

               aRetModName[8][4] -> L (    3) [.F.]

               aRetModName[8][5] -> C (    6) [FASIMG]

          aRetModName[9] -> ARRAY (    5) [...]
               aRetModName[9][1] -> N (   15) [         9.0000]

               aRetModName[9][2] -> C (    7) [SIGAFIS]

               aRetModName[9][3] -> C (   14) [Livros Fiscais]

               aRetModName[9][4] -> L (    3) [.T.]

               aRetModName[9][5] -> C (    6) [FISIMG]

          aRetModName[10] -> ARRAY (    5) [...]
               aRetModName[10][1] -> N (   15) [        10.0000]

               aRetModName[10][2] -> C (    7) [SIGAPCP]

               aRetModName[10][3] -> C (   21) [Planej.Contr.Produção]

               aRetModName[10][4] -> L (    3) [.T.]

               aRetModName[10][5] -> C (    6) [PCPIMG]

          aRetModName[11] -> ARRAY (    5) [...]
               aRetModName[11][1] -> N (   15) [        11.0000]

               aRetModName[11][2] -> C (    7) [SIGAVEI]

               aRetModName[11][3] -> C (    8) [Veículos]

               aRetModName[11][4] -> L (    3) [.T.]

               aRetModName[11][5] -> C (    6) [VEIIMG]

          aRetModName[12] -> ARRAY (    5) [...]
               aRetModName[12][1] -> N (   15) [        12.0000]

               aRetModName[12][2] -> C (    8) [SIGALOJA]

               aRetModName[12][3] -> C (   17) [Controle de Lojas]

               aRetModName[12][4] -> L (    3) [.T.]

               aRetModName[12][5] -> C (    6) [LOJIMG]

          aRetModName[13] -> ARRAY (    5) [...]
               aRetModName[13][1] -> N (   15) [        13.0000]

               aRetModName[13][2] -> C (    7) [SIGATMK]

               aRetModName[13][3] -> C (   11) [Call Center]

               aRetModName[13][4] -> L (    3) [.T.]

               aRetModName[13][5] -> C (    6) [TMKIMG]

          aRetModName[14] -> ARRAY (    5) [...]
               aRetModName[14][1] -> N (   15) [        14.0000]

               aRetModName[14][2] -> C (    7) [SIGAOFI]

               aRetModName[14][3] -> C (    7) [Oficina]

               aRetModName[14][4] -> L (    3) [.T.]

               aRetModName[14][5] -> C (    6) [OFIIMG]

          aRetModName[15] -> ARRAY (    5) [...]
               aRetModName[15][1] -> N (   15) [        15.0000]

               aRetModName[15][2] -> C (    7) [SIGARPM]

               aRetModName[15][3] -> C (   25) [Protheus T Report Utility]

               aRetModName[15][4] -> L (    3) [.F.]

               aRetModName[15][5] -> C (    6) [RPMIMG]

          aRetModName[16] -> ARRAY (    5) [...]
               aRetModName[16][1] -> N (   15) [        16.0000]

               aRetModName[16][2] -> C (    7) [SIGAPON]

               aRetModName[16][3] -> C (   16) [Ponto Eletrônico]

               aRetModName[16][4] -> L (    3) [.T.]

               aRetModName[16][5] -> C (    6) [PONIMG]

          aRetModName[17] -> ARRAY (    5) [...]
               aRetModName[17][1] -> N (   15) [        17.0000]

               aRetModName[17][2] -> C (    7) [SIGAEIC]

               aRetModName[17][3] -> C (   19) [Easy Import Control]

               aRetModName[17][4] -> L (    3) [.T.]

               aRetModName[17][5] -> C (    6) [EICIMG]

          aRetModName[18] -> ARRAY (    5) [...]
               aRetModName[18][1] -> N (   15) [        18.0000]

               aRetModName[18][2] -> C (    7) [SIGATCF]

               aRetModName[18][3] -> C (   35) [Terminal de consulta do funcionário]

               aRetModName[18][4] -> L (    3) [.T.]

               aRetModName[18][5] -> C (    6) [TCFIMG]

          aRetModName[19] -> ARRAY (    5) [...]
               aRetModName[19][1] -> N (   15) [        19.0000]

               aRetModName[19][2] -> C (    7) [SIGAMNT]

               aRetModName[19][3] -> C (   20) [Manutenção de Ativos]

               aRetModName[19][4] -> L (    3) [.T.]

               aRetModName[19][5] -> C (    6) [MNTIMG]

          aRetModName[20] -> ARRAY (    5) [...]
               aRetModName[20][1] -> N (   15) [        20.0000]

               aRetModName[20][2] -> C (    7) [SIGARSP]

               aRetModName[20][3] -> C (   30) [Recrutamento e Seleção Pessoal]

               aRetModName[20][4] -> L (    3) [.T.]

               aRetModName[20][5] -> C (    6) [RSPIMG]

          aRetModName[21] -> ARRAY (    5) [...]
               aRetModName[21][1] -> N (   15) [        21.0000]

               aRetModName[21][2] -> C (    7) [SIGAQIE]

               aRetModName[21][3] -> C (   20) [Inspeção de Entradas]

               aRetModName[21][4] -> L (    3) [.T.]

               aRetModName[21][5] -> C (    6) [QIEIMG]

          aRetModName[22] -> ARRAY (    5) [...]
               aRetModName[22][1] -> N (   15) [        22.0000]

               aRetModName[22][2] -> C (    7) [SIGAQMT]

               aRetModName[22][3] -> C (   10) [Metrologia]

               aRetModName[22][4] -> L (    3) [.T.]

               aRetModName[22][5] -> C (    6) [QMTIMG]

          aRetModName[23] -> ARRAY (    5) [...]
               aRetModName[23][1] -> N (   15) [        23.0000]

               aRetModName[23][2] -> C (    7) [SIGAFRT]

               aRetModName[23][3] -> C (   10) [Front Loja]

               aRetModName[23][4] -> L (    3) [.T.]

               aRetModName[23][5] -> C (    6) [FRTIMG]

          aRetModName[24] -> ARRAY (    5) [...]
               aRetModName[24][1] -> N (   15) [        24.0000]

               aRetModName[24][2] -> C (    7) [SIGAQDO]

               aRetModName[24][3] -> C (   22) [Controle de Documentos]

               aRetModName[24][4] -> L (    3) [.T.]

               aRetModName[24][5] -> C (    6) [QDOIMG]

          aRetModName[25] -> ARRAY (    5) [...]
               aRetModName[25][1] -> N (   15) [        25.0000]

               aRetModName[25][2] -> C (    7) [SIGAQIP]

               aRetModName[25][3] -> C (   21) [Inspeção de Processos]

               aRetModName[25][4] -> L (    3) [.T.]

               aRetModName[25][5] -> C (    6) [QIPIMG]

          aRetModName[26] -> ARRAY (    5) [...]
               aRetModName[26][1] -> N (   15) [        26.0000]

               aRetModName[26][2] -> C (    7) [SIGATRM]

               aRetModName[26][3] -> C (   11) [Treinamento]

               aRetModName[26][4] -> L (    3) [.T.]

               aRetModName[26][5] -> C (    6) [TRMIMG]

          aRetModName[27] -> ARRAY (    5) [...]
               aRetModName[27][1] -> N (   15) [        27.0000]

               aRetModName[27][2] -> C (    7) [SIGAEIF]

               aRetModName[27][3] -> C (   23) [Importação - Financeiro]

               aRetModName[27][4] -> L (    3) [.F.]

               aRetModName[27][5] -> C (    6) [EIFIMG]

          aRetModName[28] -> ARRAY (    5) [...]
               aRetModName[28][1] -> N (   15) [        28.0000]

               aRetModName[28][2] -> C (    7) [SIGATEC]

               aRetModName[28][3] -> C (   13) [Field Service]

               aRetModName[28][4] -> L (    3) [.T.]

               aRetModName[28][5] -> C (    6) [TECIMG]

          aRetModName[29] -> ARRAY (    5) [...]
               aRetModName[29][1] -> N (   15) [        29.0000]

               aRetModName[29][2] -> C (    7) [SIGAEEC]

               aRetModName[29][3] -> C (   19) [Easy Export Control]

               aRetModName[29][4] -> L (    3) [.T.]

               aRetModName[29][5] -> C (    6) [EECIMG]

          aRetModName[30] -> ARRAY (    5) [...]
               aRetModName[30][1] -> N (   15) [        30.0000]

               aRetModName[30][2] -> C (    7) [SIGAEFF]

               aRetModName[30][3] -> C (   14) [Easy Financing]

               aRetModName[30][4] -> L (    3) [.T.]

               aRetModName[30][5] -> C (    6) [EFFIMG]

          aRetModName[31] -> ARRAY (    5) [...]
               aRetModName[31][1] -> N (   15) [        31.0000]

               aRetModName[31][2] -> C (    7) [SIGAECO]

               aRetModName[31][3] -> C (   15) [Easy Accounting]

               aRetModName[31][4] -> L (    3) [.T.]

               aRetModName[31][5] -> C (    6) [ECOIMG]

          aRetModName[32] -> ARRAY (    5) [...]
               aRetModName[32][1] -> N (   15) [        32.0000]

               aRetModName[32][2] -> C (    7) [SIGAAFV]

               aRetModName[32][3] -> C (   32) [Administração de Força de Vendas]

               aRetModName[32][4] -> L (    3) [.F.]

               aRetModName[32][5] -> C (    6) [AFVIMG]

          aRetModName[33] -> ARRAY (    5) [...]
               aRetModName[33][1] -> N (   15) [        33.0000]

               aRetModName[33][2] -> C (    7) [SIGAPLS]

               aRetModName[33][3] -> C (   14) [Plano de Saúde]

               aRetModName[33][4] -> L (    3) [.T.]

               aRetModName[33][5] -> C (    6) [PLSIMG]

          aRetModName[34] -> ARRAY (    5) [...]
               aRetModName[34][1] -> N (   15) [        34.0000]

               aRetModName[34][2] -> C (    7) [SIGACTB]

               aRetModName[34][3] -> C (   23) [Contabilidade Gerencial]

               aRetModName[34][4] -> L (    3) [.T.]

               aRetModName[34][5] -> C (    6) [CTBIMG]

          aRetModName[35] -> ARRAY (    5) [...]
               aRetModName[35][1] -> N (   15) [        35.0000]

               aRetModName[35][2] -> C (    7) [SIGAMDT]

               aRetModName[35][3] -> C (   32) [Medicina e Segurança do Trabalho]

               aRetModName[35][4] -> L (    3) [.T.]

               aRetModName[35][5] -> C (    6) [MDTIMG]

          aRetModName[36] -> ARRAY (    5) [...]
               aRetModName[36][1] -> N (   15) [        36.0000]

               aRetModName[36][2] -> C (    7) [SIGAQNC]

               aRetModName[36][3] -> C (   29) [Controle de Não-Conformidades]

               aRetModName[36][4] -> L (    3) [.T.]

               aRetModName[36][5] -> C (    6) [QNCIMG]

          aRetModName[37] -> ARRAY (    5) [...]
               aRetModName[37][1] -> N (   15) [        37.0000]

               aRetModName[37][2] -> C (    7) [SIGAQAD]

               aRetModName[37][3] -> C (   21) [Controle de Auditoria]

               aRetModName[37][4] -> L (    3) [.T.]

               aRetModName[37][5] -> C (    6) [QADIMG]

          aRetModName[38] -> ARRAY (    5) [...]
               aRetModName[38][1] -> N (   15) [        38.0000]

               aRetModName[38][2] -> C (    7) [SIGAQCP]

               aRetModName[38][3] -> C (   33) [Controle Estatístico de Processos]

               aRetModName[38][4] -> L (    3) [.F.]

               aRetModName[38][5] -> C (    6) [QCPIMG]

          aRetModName[39] -> ARRAY (    5) [...]
               aRetModName[39][1] -> N (   15) [        39.0000]

               aRetModName[39][2] -> C (    7) [SIGAOMS]

               aRetModName[39][3] -> C (   28) [OMS - Gestão de Distribuição]

               aRetModName[39][4] -> L (    3) [.T.]

               aRetModName[39][5] -> C (    6) [OMSIMG]

          aRetModName[40] -> ARRAY (    5) [...]
               aRetModName[40][1] -> N (   15) [        40.0000]

               aRetModName[40][2] -> C (    7) [SIGACSA]

               aRetModName[40][3] -> C (   18) [Cargos e Salários ]

               aRetModName[40][4] -> L (    3) [.T.]

               aRetModName[40][5] -> C (    6) [CSAIMG]

          aRetModName[41] -> ARRAY (    5) [...]
               aRetModName[41][1] -> N (   15) [        41.0000]

               aRetModName[41][2] -> C (    7) [SIGAPEC]

               aRetModName[41][3] -> C (   10) [Auto Peças]

               aRetModName[41][4] -> L (    3) [.T.]

               aRetModName[41][5] -> C (    6) [PECIMG]

          aRetModName[42] -> ARRAY (    5) [...]
               aRetModName[42][1] -> N (   15) [        42.0000]

               aRetModName[42][2] -> C (    7) [SIGAWMS]

               aRetModName[42][3] -> C (   27) [WMS - Gestão de Armazenagem]

               aRetModName[42][4] -> L (    3) [.T.]

               aRetModName[42][5] -> C (    6) [WMSIMG]

          aRetModName[43] -> ARRAY (    5) [...]
               aRetModName[43][1] -> N (   15) [        43.0000]

               aRetModName[43][2] -> C (    7) [SIGATMS]

               aRetModName[43][3] -> C (   26) [TMS - Gestão de Transporte]

               aRetModName[43][4] -> L (    3) [.T.]

               aRetModName[43][5] -> C (    6) [TMSIMG]

          aRetModName[44] -> ARRAY (    5) [...]
               aRetModName[44][1] -> N (   15) [        44.0000]

               aRetModName[44][2] -> C (    7) [SIGAPMS]

               aRetModName[44][3] -> C (   18) [Gestão de Projetos]

               aRetModName[44][4] -> L (    3) [.T.]

               aRetModName[44][5] -> C (    6) [PMSIMG]

          aRetModName[45] -> ARRAY (    5) [...]
               aRetModName[45][1] -> N (   15) [        45.0000]

               aRetModName[45][2] -> C (    7) [SIGACDA]

               aRetModName[45][3] -> C (   29) [Controle de Direitos Autorais]

               aRetModName[45][4] -> L (    3) [.T.]

               aRetModName[45][5] -> C (    6) [CDAIMG]

          aRetModName[46] -> ARRAY (    5) [...]
               aRetModName[46][1] -> N (   15) [        46.0000]

               aRetModName[46][2] -> C (    7) [SIGAACD]

               aRetModName[46][3] -> C (   25) [Automação Coleta de Dados]

               aRetModName[46][4] -> L (    3) [.F.]

               aRetModName[46][5] -> C (    6) [ACDIMG]

          aRetModName[47] -> ARRAY (    5) [...]
               aRetModName[47][1] -> N (   15) [        47.0000]

               aRetModName[47][2] -> C (    8) [SIGAPPAP]

               aRetModName[47][3] -> C (    4) [PPAP]

               aRetModName[47][4] -> L (    3) [.T.]

               aRetModName[47][5] -> C (    6) [PAPIMG]

          aRetModName[48] -> ARRAY (    5) [...]
               aRetModName[48][1] -> N (   15) [        48.0000]

               aRetModName[48][2] -> C (    7) [SIGAREP]

               aRetModName[48][3] -> C (    7) [Réplica]

               aRetModName[48][4] -> L (    3) [.T.]

               aRetModName[48][5] -> C (    6) [REPIMG]

          aRetModName[49] -> ARRAY (    5) [...]
               aRetModName[49][1] -> N (   15) [        49.0000]

               aRetModName[49][2] -> C (    6) [SIGAGE]

               aRetModName[49][3] -> C (   18) [Gestão Educacional]

               aRetModName[49][4] -> L (    3) [.T.]

               aRetModName[49][5] -> C (    6) [AGEIMG]

          aRetModName[50] -> ARRAY (    5) [...]
               aRetModName[50][1] -> N (   15) [        50.0000]

               aRetModName[50][2] -> C (    7) [SIGAEDC]

               aRetModName[50][3] -> C (   21) [Easy Drawback Control]

               aRetModName[50][4] -> L (    3) [.T.]

               aRetModName[50][5] -> C (    6) [EDCIMG]

          aRetModName[51] -> ARRAY (    5) [...]
               aRetModName[51][1] -> N (   15) [        51.0000]

               aRetModName[51][2] -> C (    7) [SIGAHSP]

               aRetModName[51][3] -> C (   17) [Gestão Hospitalar]

               aRetModName[51][4] -> L (    3) [.T.]

               aRetModName[51][5] -> C (    6) [HSPIMG]

          aRetModName[52] -> ARRAY (    5) [...]
               aRetModName[52][1] -> N (   15) [        52.0000]

               aRetModName[52][2] -> C (    8) [SIGAVDOC]

               aRetModName[52][3] -> C (    6) [Viewer]

               aRetModName[52][4] -> L (    3) [.F.]

               aRetModName[52][5] -> C (    0) []

          aRetModName[53] -> ARRAY (    5) [...]
               aRetModName[53][1] -> N (   15) [        53.0000]

               aRetModName[53][2] -> C (    7) [SIGAAPD]

               aRetModName[53][3] -> C (   34) [Avaliação e Pesquisa de Desempenho]

               aRetModName[53][4] -> L (    3) [.T.]

               aRetModName[53][5] -> C (    6) [APDIMG]

          aRetModName[54] -> ARRAY (    5) [...]
               aRetModName[54][1] -> N (   15) [        54.0000]

               aRetModName[54][2] -> C (    7) [SIGAGSP]

               aRetModName[54][3] -> C (   21) [Gestão de Prefeituras]

               aRetModName[54][4] -> L (    3) [.F.]

               aRetModName[54][5] -> C (    6) [GSPIMG]

          aRetModName[55] -> ARRAY (    5) [...]
               aRetModName[55][1] -> N (   15) [        55.0000]

               aRetModName[55][2] -> C (    7) [SIGACRD]

               aRetModName[55][3] -> C (   43) [Sistema de Fidelização e Análise de Crédito]

               aRetModName[55][4] -> L (    3) [.T.]

               aRetModName[55][5] -> C (    6) [CRDIMG]

          aRetModName[56] -> ARRAY (    5) [...]
               aRetModName[56][1] -> N (   15) [        56.0000]

               aRetModName[56][2] -> C (    7) [SIGASGA]

               aRetModName[56][3] -> C (   16) [Gestão Ambiental]

               aRetModName[56][4] -> L (    3) [.T.]

               aRetModName[56][5] -> C (    6) [SGAIMG]

          aRetModName[57] -> ARRAY (    5) [...]
               aRetModName[57][1] -> N (   15) [        57.0000]

               aRetModName[57][2] -> C (    7) [SIGAPCO]

               aRetModName[57][3] -> C (   36) [Planejamento e Controle Orçamentário]

               aRetModName[57][4] -> L (    3) [.T.]

               aRetModName[57][5] -> C (    6) [PCOIMG]

          aRetModName[58] -> ARRAY (    5) [...]
               aRetModName[58][1] -> N (   15) [        58.0000]

               aRetModName[58][2] -> C (    7) [SIGAGPR]

               aRetModName[58][3] -> C (   37) [Gerenciamento de Pesquisa e Resultado]

               aRetModName[58][4] -> L (    3) [.T.]

               aRetModName[58][5] -> C (    6) [GPRIMG]

          aRetModName[59] -> ARRAY (    5) [...]
               aRetModName[59][1] -> N (   15) [        59.0000]

               aRetModName[59][2] -> C (    7) [SIGAGAC]

               aRetModName[59][3] -> C (   17) [Gestão de Acervos]

               aRetModName[59][4] -> L (    3) [.T.]

               aRetModName[59][5] -> C (    6) [GACIMG]

          aRetModName[60] -> ARRAY (    5) [...]
               aRetModName[60][1] -> N (   15) [        60.0000]

               aRetModName[60][2] -> C (    7) [SIGAHEO]

               aRetModName[60][3] -> C (   28) [HRP Estrutura Organizacional]

               aRetModName[60][4] -> L (    3) [.F.]

               aRetModName[60][5] -> C (    6) [HEOIMG]

          aRetModName[61] -> ARRAY (    5) [...]
               aRetModName[61][1] -> N (   15) [        61.0000]

               aRetModName[61][2] -> C (    7) [SIGAHGP]

               aRetModName[61][3] -> C (   21) [HRP Gestão de Pessoal]

               aRetModName[61][4] -> L (    3) [.F.]

               aRetModName[61][5] -> C (    6) [HGPIMG]

          aRetModName[62] -> ARRAY (    5) [...]
               aRetModName[62][1] -> N (   15) [        62.0000]

               aRetModName[62][2] -> C (    7) [SIGAHHG]

               aRetModName[62][3] -> C (   29) [HRP Ferramentas de Informação]

               aRetModName[62][4] -> L (    3) [.F.]

               aRetModName[62][5] -> C (    6) [HHGIMG]

          aRetModName[63] -> ARRAY (    5) [...]
               aRetModName[63][1] -> N (   15) [        63.0000]

               aRetModName[63][2] -> C (    7) [SIGAHPL]

               aRetModName[63][3] -> C (   34) [HRP Planejamento e Desenvolvimento]

               aRetModName[63][4] -> L (    3) [.F.]

               aRetModName[63][5] -> C (    6) [HPLIMG]

          aRetModName[64] -> ARRAY (    5) [...]
               aRetModName[64][1] -> N (   15) [        64.0000]

               aRetModName[64][2] -> C (    7) [SIGAAPT]

               aRetModName[64][3] -> C (   22) [Processos Trabalhistas]

               aRetModName[64][4] -> L (    3) [.T.]

               aRetModName[64][5] -> C (    6) [APTIMG]

          aRetModName[65] -> ARRAY (    5) [...]
               aRetModName[65][1] -> N (   15) [        65.0000]

               aRetModName[65][2] -> C (    7) [SIGAGAV]

               aRetModName[65][3] -> C (   18) [Gestão Advocaticia]

               aRetModName[65][4] -> L (    3) [.F.]

               aRetModName[65][5] -> C (    6) [GAVIMG]

          aRetModName[66] -> ARRAY (    5) [...]
               aRetModName[66][1] -> N (   15) [        66.0000]

               aRetModName[66][2] -> C (    7) [SIGAICE]

               aRetModName[66][3] -> C (   16) [Gestão de Riscos]

               aRetModName[66][4] -> L (    3) [.T.]

               aRetModName[66][5] -> C (    6) [ICEIMG]

          aRetModName[67] -> ARRAY (    5) [...]
               aRetModName[67][1] -> N (   15) [        67.0000]

               aRetModName[67][2] -> C (    7) [SIGAAGR]

               aRetModName[67][3] -> C (   15) [Gestão Agrícola]

               aRetModName[67][4] -> L (    3) [.T.]

               aRetModName[67][5] -> C (    6) [AGRIMG]

          aRetModName[68] -> ARRAY (    5) [...]
               aRetModName[68][1] -> N (   15) [        68.0000]

               aRetModName[68][2] -> C (    7) [SIGAARM]

               aRetModName[68][3] -> C (   25) [Gestão de Armazens Gerais]

               aRetModName[68][4] -> L (    3) [.F.]

               aRetModName[68][5] -> C (    6) [ARMIMG]

          aRetModName[69] -> ARRAY (    5) [...]
               aRetModName[69][1] -> N (   15) [        69.0000]

               aRetModName[69][2] -> C (    7) [SIGAGCT]

               aRetModName[69][3] -> C (   19) [Gestão de Contratos]

               aRetModName[69][4] -> L (    3) [.T.]

               aRetModName[69][5] -> C (    6) [GCTIMG]

          aRetModName[70] -> ARRAY (    5) [...]
               aRetModName[70][1] -> N (   15) [        70.0000]

               aRetModName[70][2] -> C (    7) [SIGAORG]

               aRetModName[70][3] -> C (   26) [Arquitetura Organizacional]

               aRetModName[70][4] -> L (    3) [.T.]

               aRetModName[70][5] -> C (    6) [ORGIMG]

          aRetModName[71] -> ARRAY (    5) [...]
               aRetModName[71][1] -> N (   15) [        71.0000]

               aRetModName[71][2] -> C (    7) [SIGALVE]

               aRetModName[71][3] -> C (   19) [Locação de Veículos]

               aRetModName[71][4] -> L (    3) [.F.]

               aRetModName[71][5] -> C (    6) [LVEIMG]

          aRetModName[72] -> ARRAY (    5) [...]
               aRetModName[72][1] -> N (   15) [        72.0000]

               aRetModName[72][2] -> C (    9) [SIGAPHOTO]

               aRetModName[72][3] -> C (    5) [Photo]

               aRetModName[72][4] -> L (    3) [.F.]

               aRetModName[72][5] -> C (    6) [PHOIMG]

          aRetModName[73] -> ARRAY (    5) [...]
               aRetModName[73][1] -> N (   15) [        73.0000]

               aRetModName[73][2] -> C (    7) [SIGACRM]

               aRetModName[73][3] -> C (   32) [Customer Relationship Management]

               aRetModName[73][4] -> L (    3) [.F.]

               aRetModName[73][5] -> C (    6) [CRMIMG]

          aRetModName[74] -> ARRAY (    5) [...]
               aRetModName[74][1] -> N (   15) [        74.0000]

               aRetModName[74][2] -> C (    7) [SIGABPM]

               aRetModName[74][3] -> C (   27) [Business Process Management]

               aRetModName[74][4] -> L (    3) [.T.]

               aRetModName[74][5] -> C (    6) [BPMIMG]

          aRetModName[75] -> ARRAY (    5) [...]
               aRetModName[75][1] -> N (   15) [        97.0000]

               aRetModName[75][2] -> C (    7) [SIGAESP]

               aRetModName[75][3] -> C (    9) [U_ESPNOME]

               aRetModName[75][4] -> L (    3) [.T.]

               aRetModName[75][5] -> C (    0) []

          aRetModName[76] -> ARRAY (    5) [...]
               aRetModName[76][1] -> N (   15) [        98.0000]

               aRetModName[76][2] -> C (    8) [SIGAESP1]

               aRetModName[76][3] -> C (   10) [U_ESP1NOME]

               aRetModName[76][4] -> L (    3) [.T.]

               aRetModName[76][5] -> C (    0) []

          aRetModName[77] -> ARRAY (    5) [...]
               aRetModName[77][1] -> N (   15) [        96.0000]

               aRetModName[77][2] -> C (    8) [SIGAESP2]

               aRetModName[77][3] -> C (   10) [U_ESP2NOME]

               aRetModName[77][4] -> L (    3) [.T.]

               aRetModName[77][5] -> C (    0) []

          aRetModName[78] -> ARRAY (    5) [...]
               aRetModName[78][1] -> N (   15) [        75.0000]

               aRetModName[78][2] -> C (    8) [SIGAAPON]

               aRetModName[78][3] -> C (   28) [Apontamento/Ponto Eletrônico]

               aRetModName[78][4] -> L (    3) [.F.]

               aRetModName[78][5] -> C (    0) []

          aRetModName[79] -> ARRAY (    5) [...]
               aRetModName[79][1] -> N (   15) [        76.0000]

               aRetModName[79][2] -> C (    8) [SIGAJURI]

               aRetModName[79][3] -> C (    7) [Sisjuri]

               aRetModName[79][4] -> L (    3) [.F.]

               aRetModName[79][5] -> C (    0) []

          aRetModName[80] -> ARRAY (    5) [...]
               aRetModName[80][1] -> N (   15) [        99.0000]

               aRetModName[80][2] -> C (    7) [SIGACFG]

               aRetModName[80][3] -> C (   12) [Configurador]

               aRetModName[80][4] -> L (    3) [.F.]

               aRetModName[80][5] -> C (    6) [CFGIMG]




aRetModName, Retornado pela função RetModName() e no meu exemplo, é um array multidimensional, em que a primeira dimensão contém 80 elementos. Cada elemento dessa primira dimensão é um outro Array de 5 elementos. Nesses cinco elementos podemos identificar: O Primeiro é o número do Módulo, o Segundo o Nome do Módulo, o Terceiro a Descrição do Módulo, o quarto um valor Lógico (não sei para que serve) e, finalmente o 5 ( o que nos interessa ) é o nome do arquivo de imagem a ser exibido. Observe que todos os Módulos, exceto o SIGAESP, SIGAESP1 e SIGAESP2 possuem um conteúdo para esse quinto elemento. Nosso objetivo será carregar a descrição da imagem para esses módulos.

Lembrando que, as imagens só serão carregadas se estiverem "compiladas" no repositório do Protheus, ela deverá ser um "Resouce" armazenado no RPO (não confunda RPO com Repositório de Imagens: O repositórios de Imagens é um arquivo no qual você, também, pode armazenar imagens do tipo jpeg ou bitmap). Para adicionar uma imagem no RPO do Protheus ela deverá ser adicionada a um projeto e "compilada" como se estivesse compilando um código fonte. Nesse caso você estará adicionando o "Resource"/Recurso ao Repositório. Como sei que tem que ser um recurso existente no RPO? Abri o inspetor de Objetos através do IDE e procurei as Imagens definidas no Array aRetModName e descobri que elas são uma imagem do tipo png. Observe as imagens que são utilizadas para o módulo SIGAVEI:

No Array aRetModName a imagem definida para o módulo SIGAVEI é: LVEIMG, mas não existe essa imagem no Repositório, mas sim:

  • LVEIMG16.PNG
  • LVEIMG16_MDI.PNG
  • LVEIMG16_OCEAN.PNG
  • LVEIMG32.PNG
  • LVEIMG32_MDI.PNG
  • LVEIMG32_OCEAN.PNG
Sendo assim, acredito eu que, internamente, o sistema irá carregar a imagem de acordo com a Resolução de Tela e de acordo com o Tema do Protheus. Então, para que possamos carregar uma imagem para os módulos específicos, deveremos ter os seguintes recursos no RPO:

Para o Módulo SIGAESP:

  • ESPIMG16.PNG
  • ESPIMG16_MDI.PNG
  • ESPIMG16_OCEAN.PNG
  • ESPIMG32.PNG
  • ESPIMG32_MDI.PNG
  • ESPIMG32_OCEAN.PNG

Para o Módulo SIGAESP1:


  • ESP1IMG16.PNG
  • ESP1IMG16_MDI.PNG
  • ESP1IMG16_OCEAN.PNG
  • ESP1IMG32.PNG
  • ESP1IMG32_MDI.PNG
  • ESP1IMG32_OCEAN.PNG

Para o Módulo SIGAESP2:


  • ESP2IMG16.PNG
  • ESP2IMG16_MDI.PNG
  • ESP2IMG16_OCEAN.PNG 
  • ESP2IMG32.PNG
  • ESP2IMG32_MDI.PNG
  • ESP2IMG32_OCEAN.PNG

 Bem, agora já sabemos onde e como as imagens dos módulos padrões são carregadas. Mas e para os específicos? Como proceder?
Primeiro: Adicione as imagens com os nomes acima sugeridos ao Repositório de Objetos do Protheus;
Segundo, e mais importante: use as funções abaixo para Carregar no Array aRetModulo, e na posição referente a Imagem, o nome do recurso a ser utilizado.

As funções serão as mesmas utilizadas para carregar o nome dos módulos, ou seja, usaremos os "Pontos de Entrada" U_ESPNome(), U_Esp1Nome()  e U_Esp2Nome(). Os modificaremos de forma a permitir que tenham acesso ao Array aRetModName de forma a alterar o seu conteúdo.

O recurso da linguagem que utilizei para isso foi o "Desvio" através do Tratamento de Erro. Sabendo que o Array que armazena os módulos, suas descrições e suas imagens é um array do tipo "Static" e, depurando passo a passo a entrada no sistema, que esse array é declarado no programa APLIB100.PRW, forcei um erro chamando uma função qualquer, existente no mesmo programa, no exemplo a ValGroup() (obtida também através do Inspetor de Objetos) passando um parâmetro inválido para ela. Através de GetFuncArr() pude perceber que o parâmetro de Entrada, esperado pela função, é um array, ao invés disso, passei uma string de forma a forçar um erro. Assim, no "desvio" para o tratamento de erro, pude obter acesso à variável "Static" aRetModName e alterar o seu conteúdo.


Complicado? Agora não mais.


Vamos o código:




Função: U_EspNome()

/*/
 Funcao:  U_EspNome
 Autor:  Marinaldo de Jesus 
 Data:  06/09/2010
 Descricao: Retorna a Descricao para o Modulo SIGAESP
/*/
User Function EspNome()

 Local aRetMod
 
 Local bError   := { || aRetMod := &(cError) }
 Local bSysErrorBlock := SysErrorBlock( bError )
 Local nESP     := 0
 
 Local cError   := "aRetModName"
 
 TRYEXCEPTION USING bError
  ValGroup("")
 ENDEXCEPTION 

 IF ( ValType( aRetMod ) == "A" )
  nESP := aScan( aRetMod , { |aModName| ( aModName[2] == "SIGAESP" ) } )
  IF ( nESP > 0 )
   //Substitua o Recurso "LVEIMG" para o Recurso Definido para esse modulo
   //Ex.: aRetMod[nESP][05] := "ESPIMG"
   aRetMod[nESP][05] := "LVEIMG"
  EndIF
 EndIF 

 SysErrorBlock( bSysErrorBlock )

Return( ProcName() ) //Informe a Descricao Real no lugar de ProcName()
       

Função: U_ESP1Nome()

/*/
 Funcao:  U_Esp1Nome
 Autor:  Marinaldo de Jesus 
 Data:  06/09/2010
 Descricao: Retorna a Descricao para o Modulo SIGAESP1
/*/
User Function Esp1Nome()

 Local aRetMod
 
 Local bError   := { || aRetMod := &(cError) }
 Local bSysErrorBlock := SysErrorBlock( bError )
 Local nESP     := 0
 
 Local cError   := "aRetModName"
 
 TRYEXCEPTION USING bError
  ValGroup("")
 ENDEXCEPTION 

 IF ( ValType( aRetMod ) == "A" )
  nESP := aScan( aRetMod , { |aModName| ( aModName[2] == "SIGAESP1" ) } )
  IF ( nESP > 0 )
   //Substitua o Recurso "LVEIMG" para o Recurso Definido para esse modulo
   //Ex.: aRetMod[nESP][05] := "ESPIMG"
   aRetMod[nESP][05] := "LVEIMG"
  EndIF
 EndIF 

 SysErrorBlock( bSysErrorBlock )

Return( ProcName() )//Informe a Descricao Real no lugar de ProcName()

       
Função: U_Esp2Nome()

/*/
 Funcao:  U_Esp2Nome
 Autor:  Marinaldo de Jesus 
 Data:  06/09/2010
 Descricao: Retorna a Descricao para o Modulo SIGAESP2
/*/
User Function Esp2Nome()

 Local aRetMod
 
 Local bError   := { || aRetMod := &(cError) }
 Local bSysErrorBlock := SysErrorBlock( bError )
 Local nESP     := 0
 
 Local cError   := "aRetModName"
 
 TRYEXCEPTION USING bError
  ValGroup("")
 ENDEXCEPTION 

 IF ( ValType( aRetMod ) == "A" )
  nESP := aScan( aRetMod , { |aModName| ( aModName[2] == "SIGAESP2" ) } )
  IF ( nESP > 0 )
   //Substitua o Recurso "LVEIMG" para o Recurso Definido para esse modulo
   //Ex.: aRetMod[nESP][05] := "ESP2IMG"
   aRetMod[nESP][05] := "LVEIMG"
  EndIF
 EndIF 

 SysErrorBlock( bSysErrorBlock )

Return( ProcName() ) //Informe a Descricao Real no lugar de ProcName()

       

Bem, agora cada ponto de entrada será responsável por, além de retornar o nome do módulo específico, alterar o array aRetModulo de forma a definir a imagem que será mostrada junto ao nome quando o acesso for via SIGAMDI.

Para obter o código de exemplo, basta clicar aqui.

Obs.: Cuidado ao alterar variáveis de uso exclusivo do sistema. Poderá ocasionar efeitos "catastróficos" se não tomar o devido cuidado e a devida atenção.


Dica: Utilize a Função Resource2File(cResourceName,cFileDest) para obter as imagens usadas para um deterninado módulo do sistema, no exemplo as do SIGAVEI, para criar imagens no mesmo padrão e tamanho. Ex.:


Resource2File( "LVEIMG16.PNG" , "c:\temp\LVEIMG16.PNG" )
Resource2File( "LVEIMG16_MDI.PNG, "c:\temp\LVEIMG16_MDI.PNG" )
Resource2File( "LVEIMG16_OCEAN.PNG, "c:\temp\LVEIMG16_OCEAN.PNG" )
Resource2File( "LVEIMG32.PNG, "c:\temp\LVEIMG32.PNG" )
Resource2File( "LVEIMG32_MDI.PNG, "c:\temp\LVEIMG32_MDI.PNG" )
Resource2File( "LVEIMG32_OCEAN.PNG, "c:\temp\LVEIMG32_OCEAN.PNG" )
       


Bem, é isso.

[]s
иαldσ dj


...

Comentários

  1. Cara,

    vou deixar de estudar pelo TDN e passar a vir mais aqui.

    Parabéns aí pelo site, seu conhecimento tem que ser compartilhado.

    Quero propor um tópico.
    Explicar minuciosamente a estrutura e como criar um arquivo [*.CH] usado nos includes "xCommand".

    ResponderExcluir
  2. Sérgio,

    O Conhecimento é um bem coletivo, e deve ser difundido.

    Sua sugestão está anotada e, em breve, publicarei todas as regras para a criação de um arquivo [*.CH] onde abordarei as diretivas #command, #xcommand, #translate, #xtranslate, ..., dentre outras que são usadas para pesquisa e substituições complexas pelo pré-processador.

    []s
    иαldσ dj

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã