♥ 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). Obrigado. Marcado como spam |
2 respostas
Resposta privada Olá Helder Tens duas possibilidades:
Marcado como spam | |
Resposta privada Segui a primeira sugestão. Obrigado. Marcado como spam 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! 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 @hchelder , já formatei o código e acho que percebi a ideia. Muito obrigado pelo apoio. |