Fórum
Ver pergunta

Erro ao usar num form o BSO   

158 visualizações
1
0

Bom dia,

Estou a migrar o projeto VBA da V9 para a V10.

Na ficha de cliente, no evento tecla pressionada chamo um formulario

public override void TeclaPressionada(int KeyCode, int Shift, ExtensibilityEventArgs e)
{
	base.TeclaPressionada(KeyCode, Shift, e);

	try
	{
		if (KeyCode==113)
		{
			FrmContacto Frm;
			Frm = new FrmContacto(this.Cliente.Cliente);
			Frm.ShowDialog();
		}

	}

	catch (Exception ex)
	{
		PSO.Dialogos.MostraAviso(ex.Message);
	}
}

O código do formulário é:

public partial class FrmContacto : Form
{
	string sClienteemUso;

	public static ErpBS BSO = new ErpBS();
	public ErpBS100.ErpBS Engine;
	
	public FrmContacto(String sCodigoCli)
	{
		InitializeComponent();
		sClienteemUso = sCodigoCli;
		Engine = new ErpBS100.ErpBS();
	}

	private void CmdSair_Click(object sender, EventArgs e)
	{
		this.Close();
	}

	private void FrmContacto_Load(object sender, EventArgs e)
	{
		MessageBox.Show(BSO.Base.Clientes.DaNome("000"));
	}
}

No entanto, quando é mostrado o form dá o erro que está na imagem em anexo.

BSO.Base.Clientes.DaNome(“000”) está a dar erro

O que é que estou a fazer mal?

Faça login para poder traduzir
V10
Marcado como spam
Criado há 6 anos e 3 semanas vitormonteiro
v
vitormonteiro Iniciante
2 respostas
0
Resposta privada

Boa noite Sereno,

Obrigado pela sua resposta e clareza

Ficou a funcionar na perfeição

 

 

Faça login para poder traduzir
Marcado como spam
Criado há 6 anos e 2 semanas vitormonteiro
v
vitormonteiro Iniciante
    0
    Resposta privada

    Olá algumas coisas não estão bem, nomeadamente a forma como estás a iniciar o BSO. O que estás a fazer é criar apenas uma nova instancia do objeto, mas essa instancia esta vazia porque não a API (motor) não foi inicalizada.

    Bem não necessitas de fazer isso porque na classe da ficha do cliente já tens a o BSO inicializada, só tens de passar para a tua nova classe o BSO, da forma como está no exemplo.

    Também não ten de declarar a propriedade privada do BSO como static, nãofaz sentido porque o scope da tua classe é limitado a ela propria, não a vais reutilizar mais.

    Recomendo que também passes a usar a notação CamelCase na escrita do teu código em vez da notação PascalCase.

    using System;
    using System.Windows.Forms;
    using ErpBS100;
    
    namespace ExtensibilityProject4.Sales
    {
        public partial class FrmContacto : Form
    
        {
            string clienteEmUso;
    
            //public static ErpBS BSO = new ErpBS();
            private ErpBS BSO { get; set; }
    
            public ErpBS100.ErpBS Engine;
    
            public FrmContacto(String codigoCliente, ErpBS bso)
            {
                InitializeComponent();
    
                clienteEmUso = codigoCliente;
    
                this.BSO = bso;
            }
    
            public FrmContacto()
            {
                InitializeComponent();
            }
    
            private void CmdSair_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void FrmContacto_Load(object sender, EventArgs e)
            {
    
                MessageBox.Show(BSO.Base.Clientes.DaNome(clienteEmUso));
            }
        }
    }
    

     

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