Fórum
Ver pergunta

Menus personalizados, via código   

66 visualizações
1
0

Boa noite, estou a fazer experiências com a criação de menus, estou a seguir o exemplo Primavera.CustomRibbon do github e os tutoriais em recursos, mas fiquei com uma dúvida: é preciso criar um projecto/solução para cada menu?

É que consigo criar vários grupos, botões, mas vários menus no mesmo projecto não consigo.

Obrigada

Faça login para poder traduzir
V10
Marcado como spam
Criado há 2 anos e 10 meses sandrasantos
sandrasantos Iniciante
4 respostas
0
Resposta privada

@sergiosereno (vi que tinhas feito update ao git)

Já consegui, mas a minha lógica inicial ao alterar para 2 tabs tinha um erro. chamava 2 vezes a função creategroupbutton (passando parte dos argumentos) e a função executava 2x com os restantes argumentos. A 2ª linha estourava, pois estava a sobrepor nos argumentos iniciais um 2º botão (que já estava registado).

Corrigi o código. Vi 2 opções: ou se chama nx a função, mas passando TODOS os argumentos e depois a função só cria um botão de cada vez, ou se chama a função SEM argumentos, e na função é que são criados os n botões.

Optei pela 2ª opção, acho que fica mais consistente com a lógica da criação dos tabs e dos grupos, vê o que achas.

(corrigi tb criatetab para createtab)

 

 

       public void RegisterAddin()
        {
            // Register the Ribbon button.
            RibbonEvents = this.PSO.Ribbon;
            RibbonEvents.Executa += RibbonEvents_Executa;

            // Register the add-in.
            CreateTab();
            CreateGroup();
            CreateGroupButton32();
          }

        #endregion

        #region Private methods

        private void CreateTab()
        {
           this.PSO.Ribbon.CriaRibbonTab("TAB 1", RibbonConstants.cIDTAB1, 10);
           this.PSO.Ribbon.CriaRibbonTab("TAB 2", RibbonConstants.cIDTAB2, 10);
        }

        private void CreateGroup()
        {
            this.PSO.Ribbon.CriaRibbonGroup(RibbonConstants.cIDTAB1, "Extensibility 1", RibbonConstants.cIDTAB1_GROUP1);
            this.PSO.Ribbon.CriaRibbonGroup(RibbonConstants.cIDTAB2, "Extensibility 2", RibbonConstants.cIDTAB2_GROUP1);
        }

        private void CreateGroupButton32()
        {
            this.PSO.Ribbon.CriaRibbonButton(RibbonConstants.cIDTAB1, RibbonConstants.cIDTAB1_GROUP1, RibbonConstants.cTAB1_GROUP1_IDBUTTON1, "Visual Studio 2017", true, Resources.VS2017_256x256);
            this.PSO.Ribbon.CriaRibbonButton(RibbonConstants.cIDTAB2, RibbonConstants.cIDTAB2_GROUP1, RibbonConstants.cTAB2_GROUP1_IDBUTTON1, "Visual Studio 2019", true, Resources.VS2017_256x256);
            this.PSO.Ribbon.CriaRibbonButton(RibbonConstants.cIDTAB2, RibbonConstants.cIDTAB2_GROUP1, RibbonConstants.cTAB2_GROUP1_IDBUTTON2, "Visual Studio 2020", true, Resources.VS2017_256x256);
        }

 

 

Faça login para poder traduzir
Marcado como spam
Criado há 2 anos e 9 meses sandrasantos
sandrasantos Iniciante
    Comentários
    @sandrasantos Olá Sandra defacto não há problema nenhum, o unico problema foi a minha analise. Entretanto corrigui o código do Git e a função "CreateGroupButton32" para suportar de forma generica a criação de vários botões.
    2 anos e 9 meses
    sergiosereno
      0
      Resposta privada
              private void RibbonEvents_Executa(string Id, string Comando)
              {
                  try
                  {
                      // Trace.
                      this.PSO.Diagnosticos.Trace("The user has clicked the extensibility button.");
      
                      // Trace to file.
                      this.PSO.Diagnosticos.TraceFicheiro(@"C:\erp.log", "The user has clicked the extensibility button.");
      
                      switch (Id)
                      {
                          case RibbonConstants.cIDBUTTON1:
                              //You must change the application path.
                              Process.Start(@"D:\Sandra\Administrativos\_painelTrabalho.xlsm");
                              break;
                          case RibbonConstants.cIDBUTTON2:
                              //You must change the application path.
                              Process.Start(@"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe");
                              break;
                      }
                  }
                  catch (System.Exception ex)
                  {
                     PSO.Dialogos.MostraAviso("The file don't exist.",StdBSTipos.IconId.PRI_Informativo,ex.Message);
                  }
              }
      
              #endregion
      
              #region Register the new tab inside PRIMAVERA Ribbon.
      
              public void RegisterAddin()
              {
                  // Register the Ribbon button.
                  RibbonEvents = this.PSO.Ribbon;
                  RibbonEvents.Executa += RibbonEvents_Executa;
      
                  // Register the add-in.
                  CriateTab();
                  CreateGroup();
                  CreateGroupButton32(RibbonConstants.cIDBUTTON1, "Visual Studio1", Resources.VS2017_256x256);
                  CreateGroupButton32(RibbonConstants.cIDBUTTON2, "Visual Studio2", Resources.VS2017_256x256);
              }
      
              #endregion
      
              #region Private methods
      
              private void CriateTab()
              {
                 this.PSO.Ribbon.CriaRibbonTab("1PRIMAVERA", RibbonConstants.cIDTAB1, 1);
                 this.PSO.Ribbon.CriaRibbonTab("2PRIMAVERA", RibbonConstants.cIDTAB2, 2);
      
              }
      
              private void CreateGroup()
              {
                  this.PSO.Ribbon.CriaRibbonGroup(RibbonConstants.cIDTAB1, "Extensibility21", RibbonConstants.cIDGROUP1);
                  this.PSO.Ribbon.CriaRibbonGroup(RibbonConstants.cIDTAB2, "Extensibility22", RibbonConstants.cIDGROUP2);
              }
      
              private void CreateGroupButton32(string buttonId, string buttonDescription, Image buttonImage )
              {
                  this.PSO.Ribbon.CriaRibbonButton(RibbonConstants.cIDTAB1, RibbonConstants.cIDGROUP1, buttonId, buttonDescription, true, buttonImage);
                  this.PSO.Ribbon.CriaRibbonButton(RibbonConstants.cIDTAB2, RibbonConstants.cIDGROUP2, buttonId, buttonDescription, true, buttonImage);
      
              }
      

       

      Faça login para poder traduzir
      Marcado como spam
      Criado há 2 anos e 9 meses sandrasantos
      sandrasantos Iniciante
        0
        Resposta privada

        Obrigada Sérgio. Alguma coisa se passa que não acerto com isto (ou dá erros ou ignora), e peço desde já desculpa pela linguagem pouco técnica (e agradeço correcções). Começando a fazer despiste para ver se o erro está nos ids.
        1. Qual a lógica de atribuição das strings no ficheiro Constants.cs? Com este exemplo tenho o seguinte erro:

        ————-codigo original (github)

        namespace Primavera.CustomRibbon
        {
            internal static class RibbonConstants
            {
                public const string cIDTAB = "10000";
                public const string cIDGROUP = "100001";
                public const string cIDBUTTON1 = "1000011";
                public const string cIDBUTTON2 = "1000012";
            }
        }

         

        ——————meu código

        namespace Primavera.CustomRibbon
        {
            internal static class RibbonConstants
            {
                public const string cIDTAB1 = "10000";
                public const string cIDTAB2 = "20000";
                public const string cIDGROUP1 = "100001";
                public const string cIDGROUP2 = "200001";
                public const string cIDBUTTON1 = "1000011";
                public const string cIDBUTTON2 = "1000012";
                public const string cIDBUTTON3 = "2000011";
            }
        }

         

        ———————erro ao abrir a empresa
        O item já foi adicionado. Chave no dicionário: ’1000011’ Chave a adicionar: ’1000011’
        Origin: PrimaveraRibbon1.DepoisDeCriarMenus
        Extension: Primavera.CustomRibbon1

        Faça login para poder traduzir
        Marcado como spam
        Criado há 2 anos e 9 meses sandrasantos
        sandrasantos Iniciante
          Comentários
          @sandrasantos Pareçe-me que é bug da aplicação vou investigar e depois coloco aqui a resposta. Mas o teu raciocionio está correcto.
          2 anos e 9 meses
          sergiosereno
            Olá, comecei por esta parte mas tb pode ser erro no código (não sei programar c#, ando a aprender e tb a tentar perceber a lógica destas funções). já agora, vou colocar o código que tenho me mensagem abaixo, aliás até apostava mais ser erro meu no código Tenho outras questões, relaccionadas com isto: 1 – a função criate tab, não está a receber argumentos, será necessário no caso de +1 tab? 2 – estou a chamar 2xs a funçao CreateGroupButton32, provavelmente errado 3 – para cada ”botaõ” que quiser criar tenho de ter switch na função RibbonEvents_Executa? 4 – o teste que fiz foi para abrir aplicação minha ) um ficheiro excel, mas queria adicionar atalhos do proprio erp (deixo imagem do menu que fiz através do erp). tem de ser exportado e importado para cada empresa, queira fazer isso em código. estive a tentar perceber o ficheiro xml da exportação do menu mas sem sucesso, o meu estudo da classe Class StdBSPRibbon tb não teve sucesso.
            2 anos e 9 meses
            sandrasantos
              0
              Resposta privada

              Não, podes criar os Separadores, os Grupos e os botões que entenderes. Mais se usares a extensibildiade do administrador podes depois criar permissões sobre os mesmos.

              Faça login para poder traduzir
              Marcado como spam
              Criado há 2 anos e 10 meses sergiosereno
              sergiosereno Most Valuable Professional