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

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
    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 10 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 10 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 10 meses
        sandrasantos
          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 10 meses sandrasantos
          sandrasantos Iniciante
            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 10 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 10 meses
              sergiosereno