♥ 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 Marcado como spam |
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); }
Marcado como spam 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. | |
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); }
Marcado como spam | |
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. ————-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 Marcado como spam 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. 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. | |
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. Marcado como spam |