Forum
See question

NullReference ao invocar um formulário com ShowDialog() ou Show()   

304 views
0
0

Boa tarde,

Criei uma dll com 2 formulários dentro, ambos herdando de CustomForm. A partir do ERP invoco um deles e depois deste, dentro da dll invoco o outro form. Com uma versão do Primavera v10 mais antiga, consigo invocar este segundo form sem problema (estou a usar o ShowDialog()) mas com a versão atualizada do Primavera, dá-me NullReferenceException ao fazer ShowDialog(). O objecto existe porque como é possivel ver pelo código abaixo, corro um método dessa classe antes de fazer showDialog().

 

O código que estou a fazer é bastante simples mas dá erro na linha a bold.

 

FDU_DetalhesDocDigitizer FrmDetalhes = new FDU_DetalhesDocDigitizer();

FrmDetalhes.BindControlos(Doc, OpersDocDigit);

FrmDetalhes.ShowDialog();

 

 

Onde BindControlos é:

public void BindControlos (JObject DadosDocumento, Operacoes OpersWS)

{

OpersDocDigit = OpersWS;

DadosDoc = DadosDocumento;

 

//criamos uma instância de EstruturaDoc em DocERP para guardar os dados de DadosDocumento

DocERP = new EstruturaDoc(

DadosDocumento[“document”][“id”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:client_tax_id”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:client_name”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:currency”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:invoice_number”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:vendor_tax_id”].ToString(),

DadosDocumento[“document”][“annotations”][“data”][“document:invoice:vendor_name”].ToString(),

(decimal)DadosDocumento[“document”][“annotations”][“data”][“document:invoice:base_amount”],

(decimal)DadosDocumento[“document”][“annotations”][“data”][“document:invoice:vat_amount”],

(decimal)DadosDocumento[“document”][“annotations”][“data”][“document:invoice:total_amount”],

DateTime.Parse(DadosDocumento[“document”][“annotations”][“data”][“document:invoice:emission_date”].ToString()));

 

this.txtClientName.Text = DocERP.ClienteNome;

this.txtClientTaxId.Text = DocERP.ClienteNif;

this.txtCurrency.Text = DocERP.Moeda;

this.txtInvoiceNumber.Text = DocERP.Documento;

this.txtVendorName.Text = DocERP.FornecedorNome;

this.txtVendorTaxId.Text = DocERP.FornecedorNif;

this.txtValorBase.EditValue = DocERP.ValorBase;

this.txtValorIVA.EditValue = DocERP.ValorIVA;

this.txtValorTotal.EditValue = DocERP.ValorTotal;

this.txtCalend.EditValue = DocERP.DataDoc.ToString(“yyyy-MM-dd”);

 

//verificamos se o documento tem linhas. Se tiver, criamos a grid, senão não fazemos mais nada

try

{

JArray ArrLinhas = JArray.FromObject(DadosDocumento[“document”][“annotations”][“data”][“document:invoice:tax_lines”]);

if (ArrLinhas.Count > 0)

CriarGrid(true, ArrLinhas, ref DocERP);

}

catch (Exception)

{

Console.WriteLine(“Não tem linhas”);

}

 

//botões do formulário

BotaoERP = new SimpleButton();

BotaoERP.Parent = this.containerDocERP;

BotaoERP.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Style3D;

BotaoERP.Text = ” Criar doc. ERP “;

BotaoERP.AutoSize = true;

BotaoERP.Enabled = (DocJaCriado(DocERP.Documento)) ? false : true;

BotaoERP.Show();

BotaoERP.Click += new System.EventHandler(this.BotaoERP_Click);

 

BotaoFichOrig = new SimpleButton();

BotaoFichOrig.Parent = this.containerFichOrig;

BotaoFichOrig.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Style3D;

BotaoFichOrig.Text = ” Ver ficheiro original “;

BotaoFichOrig.AutoSize = true;

BotaoFichOrig.Enabled = true;

BotaoFichOrig.Show();

BotaoFichOrig.Click += new System.EventHandler(this.BotaoFichOrig_Click);

 

//mostramos a label criado se o documento já tiver sido anteriormente persistido

if (DocJaCriado(DocERP.Documento))

this.lblCriado.Visible = true;

else

this.lblCriado.Visible = false;

}

Faça login para poder traduzir
General
Integration
V10
Marked as spam
Created 4 years and 10 months ago andrmanta
a
andrmanta Iniciante
3 answers
0
Private answer

Bom dia, experimenta instanciar o form com este código:

using (var result = BSO.Extensibility.CreateCustomFormInstance(typeof(FDU_DetalhesDocDigitizer)))
{
	if (result.IsSuccess())
	{
		(result.Result as FDU_DetalhesDocDigitizer).ShowDialog();
	}
}

Vais precisar de fazer using deste namespace:

using Primavera.Extensibility.Extensions;

 

Faça login para poder traduzir
Marked as spam
Created 4 years and 10 months ago danielvieira-1
d
danielvieira-1 Responsiveness Member
    Comments
    Muito obrigado Daniel!
    4 years and 10 months ago
    andrmanta
      0
      Private answer

      Bom dia Daniel,

      Instancei o form conforme indicado:
      "bool result=PSO.Dialogos.MostraPerguntaSimples("A Rubrica " + RubricaCCT + " não existe. Deseja criar?");
      if (result==true)
      { using (var result1 = BSO.Extensibility.CreateCustomFormInstance(typeof(PriCustomFormItem1)))
      {
      if (result1.IsSuccess())
      { (result1.Result as PriCustomFormItem1).ShowDialog(); }
      }

      //PriCustomFormItem1 f2 = new PriCustomFormItem1(RubricaCCT);
      //f2.ShowDialog();
      }"
      mas dá a seguinte mensagem de erro em anexo.

      Faça login para poder traduzir
      Attachments:
      Marked as spam
      Created 3 years and 8 months ago amricopestana
      amricopestana Iniciante
        0
        Private answer

        Boa tarde,

        Tentei usar o codigo anterior para uma situação identica em dentro de um CustomForm chamo outro e dá-me o seguinte erro em anexo.

        Faça login para poder traduzir
        Attachments:
        Marked as spam
        Created 3 years and 8 months ago amricopestana
        amricopestana Iniciante