Forum
See question

Detecção de artigo novo no evento AntesDeGravar   

98 views
1
0

Bom dia,

Dentro do meu projecto de extensibilidade, ao gravar um artigo, preciso de realizar uma operação sobre CDUs específicos para evitar que sejam copiados quando o artigo está a ser copiado.

Até aqui o meu código tem sido semelhante ao que mostro, detectando que estou em presença de um artigo novo se o código de artigo for vazio (clsArtigo.Artigo == “”):

public class ApiBasBSArtigos : BasBSArtigos
{
	public override void AntesDeGravar(BasBEArtigo clsArtigo, ref string strAvisos, ExtensibilityEventArgs e)
	{
		base.AntesDeGravar(clsArtigo, ref strAvisos, e);
		
		if (clsArtigo.Artigo == "") //novo
		{
			if (clsArtigo.CamposUtil["CDU_EXEMPLO"].Valor.ToString() != "")
			{
				//estamos na presença de cdu copiado
				clsArtigo.CamposUtil["CDU_EXEMPLO"].Valor = "";
			}
		}
	}
}

No entanto, detectei que o cliente faz o seguinte para copiar um artigo:

  • abre um artigo já existente (com propriedades semelhantes às pretendidas);
  • edita o código existente para um código novo;
  • edita as restantes propriedades que quer alterar;
  • grava o artigo (originando um artigo novo)

Neste caso, no evento “AntesDeGravar” a propriedade do código de artigo (“Artigo”) não é vazia e o meu código não detecta que se trata de um artigo novo copiado.

Alguém me pode indicar qual a forma mais inequívoca e simples de detectar neste evento que o artigo é novo?

Obrigado.

Faça login para poder traduzir
Integration
V10
Marked as spam
Created 4 years and 6 months ago miguelganilhosantos
2 answers
0
Private answer

Olá o mais certo é usares uma propriedade que existe em todos os BE's que é "EmModeEdicao" se for novo artivo vai estar sempre a false.

Faça login para poder traduzir
Marked as spam
Created 4 years and 6 months ago sergiosereno
sergiosereno Most Valuable Professional
    Comments
    Obrigado Sérgio.
    4 years and 6 months ago
    miguelganilhosantos
      0
      Private answer

      Para futura referência apresento exemplo com código alterado tal como referiu o @sergiosereno:

      public class ApiBasBSArtigos : BasBSArtigos
      {
      	public override void AntesDeGravar(BasBEArtigo clsArtigo, ref string strAvisos, ExtensibilityEventArgs e)
      	{
      		base.AntesDeGravar(clsArtigo, ref strAvisos, e);
      		
      		if (clsArtigo.EmModoEdicao==false) //novo
      		{
      			if (clsArtigo.CamposUtil["CDU_EXEMPLO"].Valor.ToString() != "")
      			{
      				//estamos na presença de cdu copiado
      				clsArtigo.CamposUtil["CDU_EXEMPLO"].Valor = "";
      			}
      		}
      	}
      }

       

      Faça login para poder traduzir
      Marked as spam
      Created 4 years and 6 months ago miguelganilhosantos