V10 RecursosReferência
RecursosReferência
Referência
Voltar | Lista de artigos

Como usar as propriedades "HandleExceptions" e "Handled" nos eventos?

Última alteração a 28/09/2021

Com o novo motor de extensibilidade, ao contrário do VBA, é possível ter várias várias implementações para um único evento. Estas implementações são codificadas em extensões que ficam registadas no ERP e a ordem de execução dos eventos subscritos é definida pela ordem do próprio registo ou através do atributo Order (utilizando o namespace Primavera.Extensibility.Attributes) se os eventos se encontrarem dentro da mesma extensão.

O seguinte exemplo demonstra o evento AntesDeGravar da FichaArtigos, subscrito mais do que uma vez na mesma extensão:

using Primavera.Extensibility.Attributes;

public class UiFichaArtigos1 : FichaArtigos
{
	[Order(0)]
	public override void AntesDeGravar(ref bool Cancel, ExtensibilityEventArgs e)
	{
		base.AntesDeGravar(ref Cancel, e);
	}
}

public class UiFichaArtigos2 : FichaArtigos
{
	[Order(1)]
	public override void AntesDeGravar(ref bool Cancel, ExtensibilityEventArgs e)
	{
		base.AntesDeGravar(ref Cancel, e);
	}
}

Desta forma, é possível ter uma pilha de execução do mesmo evento, o que permite gerir as exceções que ocorrem de duas formas distintas:

  • Cancelar a operação do formulário e a execução do(s) evento(s) subscrito(s);
  • Continuar a operação do formulário e mostrar apenas uma mensagem de utilizador com dados do erro da exceção.

Este procedimento é controlado pelo valor da propriedade "HandleExceptions":

ValorComportamento
TrueExceções não tratadas nas implementações devem ser tratadas pelo ERP.

A operação do formulário não é interrompida e, no final, o sistema apresenta uma mensagem de erro com informação sobre a exceção que ocorreu.

FalseAs exceções não tratadas nas implementações não devem ser tratadas pelo ERP.

A operação do formulário é cancelada.

Por predefinição, esta propriedade assume o valor "True" para todas as implementações de eventos de Plataforma e o valor "False" para os restantes.

Quando as exceções transitam para os eventos seguintes, ficam disponíveis na propriedade Exceptions. O exemplo seguinte mostra como uma exceção não controlada que ocorre na primeira subscrição do evento é passada para o evento seguinte.

public class UiFichaArtigos1 : FichaArtigos
{
	[Order(0)]
	public override void AntesDeGravar(ref bool Cancel, ExtensibilityEventArgs e)
	{
		e.HandleExceptions = true;
		throw new Exception("Erro ao gravar na extensão 1.");
	}
}

public class UiFichaArtigos2 : FichaArtigos
{
	[Order(1)]
	public override void AntesDeGravar(ref bool Cancel, ExtensibilityEventArgs e)
	{
		string msg = "UiFichaArtigos2.AntesDeGravar" + Environment.NewLine;
		msg += string.Format("Exceções: {0}", e.Exceptions.Count);

		if (e.Exceptions.Count > 0)
		{
			foreach (var item in e.Exceptions)
			{
				msg += "Exceção = " + item.Exception.Message + Environment.NewLine;
			}
		}

		PSO.Dialogos.MostraMensagem(StdPlatBS100.StdBSTipos.TipoMsg.PRI_SimplesOk, msg);
	}
}

Pode ainda definir o valor "True" para a propriedade "Handled" para intervir e cancelar a execução de uma pilha de implementações do evento em qualquer momento.

Através do vídeo Tratamento de Exceções podemos ver as duas propriedades a serem utilizadas em conjunto para controlar as exceções e a execução da pilha.

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Características das entidades e serviços Conceito de integração Conceito de extensibilidade Como registar projetos de extensibilidade? Boas práticas de organização de projetos de integração