Fórum
Ver pergunta

Numa class .NET “normal” como obter acesso ao contexto BSO; PSO?   

101 visualizações
0
0

Bom dia,

Num projeto de extensbilidade, quando herdamos da calss Primavera.Extensibility.Sales.Editors.EditorVendas, temos acesso a todos os eventos e também ao contexto do editor: BSO, PSO, DocumentoVenda; … etc. 

De forma a organizar melhor o projeto\código, pretendo criar outras classes no projeto e ter acesso pelo menos ao contexto do ERP (BSO e PSO).
Existe alguma classe que possa ser herdada para este efeito? À semelhança do que acontecia no VBA, eu podia adicionar módulos com diversas funções ao projeto porque o BSO e PSO eram globais a todo o projeto VBA!

Obrigado.

Faça login para poder traduzir
Integração
V10
Marcado como spam
Criado há 5 anos e 6 meses heldercosta
heldercosta Iniciante
2 respostas
1
Resposta privada

Olá Helder

Tens duas possibilidades:

  • Crias uma classe estática para contexto com duas propriedades preenches e vais acedendo a esse contexto ao longo da aplicação.
  • Crias nas classes que necessitas um construtor com essas duas propriedades e sempre que criares nova instancia da classe passas as propriedades.
Faça login para poder traduzir
Marcado como spam
Criado há 5 anos e 6 meses sergiosereno
sergiosereno Most Valuable Professional
    0
    Resposta privada

    Segui a primeira sugestão.
    Faço set das mesmas logo ao abrir empresa e dessa forma tenho o contexto sempre disponível.

    Obrigado.

    Faça login para poder traduzir
    Marcado como spam
    Criado há 5 anos e 6 meses heldercosta
    heldercosta Iniciante
      Comentários
      @hchelder , estou com este exato problema. Entendo o conceito que o @sereno explicou mas não estou a conseguir pô-lo em prática. Será que me podes dar uma ajuda sobre como fizeste isto na prática? Obrigado!
      4 anos e 9 meses
      jorgeoliveira
        Bom dia @jorge-oliveira Desculpe mas não consegui formatar a resposta como ”código”! Tem que adicionar ao projeto a classe Plataforma e ter um método idêntico ao seguinte: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Primavera.Extensibility.BusinessEntities; using Primavera.Extensibility.BusinessEntities.ExtensibilityService.EventArgs; using Primavera.Extensibility.Platform.Services; namespace AppTestes { public class BasNsPlataforma : Plataforma { public override void DepoisDeAbrirEmpresa(ExtensibilityEventArgs e) { PriV100Api.AtualizaContexto(PSO, BSO, Aplicacao); } } } Criar uma outra class static do género: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ErpBS100; using Primavera.Extensibility.Integration; using StdBE100; using StdPlatBS100; using static StdBE100.StdBETipos; namespace AppTestes { public sealed class PriV100Api { #region Singleton pattern // .NET guarantees thread safety for static initialization private static readonly PriV100Api MotorInstancia = new PriV100Api(); private PriV100Api() { } public static PriV100Api AbreEmpresa(EnumTipoPlataforma tipoPlataforma, string empresa, string utilizador, string password) { StdBSConfApl AppConfig = new StdBSConfApl(); StdPlatBS Plataforma = new StdPlatBS(); ErpBS Motor = new ErpBS(); ApplicationContext AppContexto = new ApplicationContext(Motor); AppConfig.Instancia = ”Default”; AppConfig.AbvtApl = ”ERP”; AppConfig.PwdUtilizador = password; AppConfig.Utilizador = utilizador; AppConfig.LicVersaoMinima = ”10.00”; StdBETransaccao Transacao = new StdBETransaccao(); try { Plataforma.AbrePlataformaEmpresa(empresa, Transacao, AppConfig, tipoPlataforma); } catch { throw; } if (Plataforma.Inicializada) { Motor.AbreEmpresaTrabalho(tipoPlataforma, empresa, utilizador, password, Transacao, ”Default”); //PSOPlataforma = Plataforma; PSO = null; BSO = Motor; Aplicacao = AppContexto; Estado = true; } return MotorInstancia; } public static PriV100Api AtualizaContexto(StdBSInterfPub pso, ErpBS bso, ApplicationContext aplicacao) { if (pso == null) { throw new ArgumentNullException(nameof(pso)); } if (bso == null) { throw new ArgumentNullException(nameof(bso)); } if (aplicacao == null) { throw new ArgumentNullException(nameof(aplicacao)); } //PSOPlataforma = null; PSO = pso; BSO = bso; Aplicacao = aplicacao; Estado = true; return MotorInstancia; } #endregion #region Public Properties /// /// Primavera ERPV100 Plataforma (Motores Integracao) /// //public static StdPlatBS PSOPlataforma { get; private set; } /// /// Primavera ERPV100 Plataforma /// public static StdBSInterfPub PSO { get; private set; } /// /// Primavera ERPV100 Motor /// public static ErpBS BSO { get; private set; } /// /// Estado Motor False – Erro | True – Ok /// public static bool Estado { get; private set; } /// /// Primavera /// public static ApplicationContext Aplicacao { get; private set; } #endregion } } Desta forma, em qualquer local da aplicação pode usar: PriV100Api.BSO…. Espero ter ajudado. Cumprimentos Hélder Costa
        4 anos e 9 meses
        heldercosta
          @hchelder , já formatei o código e acho que percebi a ideia. Muito obrigado pelo apoio.
          4 anos e 9 meses
          jorgeoliveira