+3 votos
157 visitas

Ao executar um business component com o BTL tenho o erro abaixo:

 

INP-501: Erro ao executar tarefa de BusinessComponent "Benner.Saude.Prestadores.FechamentoPreco, Benner.Saude.Prestadores.FechamentoPreco, Version=15.0.0.0, Culture=neutral, PublicKeyToken=null":
Não é possível utilizar o dicionário Properties da entidade sem uma definição de entidade associada. Atribua uma definição a instância da entidade através da propriedade Definition.

 

O código de excução é o seguinte:
 

public void BotaoProcessar(BusinessArgs args, SamFechamentoPreco samFechamentoPreco)
{
  if (samFechamentoPreco.Situacao == SamFechamentoPrecoSituacaoRadioItens.ItemAberto)
  {
    BusinessTask.Factory.NewComponentTask<FechamentoPreco>()
      .WithRequestValue(samFechamentoPreco)
      .Start();

    args.Message = "Rotina Enviada para execução no servidor";
  }
  else
    args.Message = "Não é possível processar a rotina não está Aberta";
}



 

Se alterar para chamada local do business component ele funciona sem problemas, exemplo:

 
 

public void BotaoProcessar(BusinessArgs args, SamFechamentoPreco samFechamentoPreco)
{
    if (samFechamentoPreco.Situacao == SamFechamentoPrecoSituacaoRadioItens.ItemAberto)
    {
        var business = BusinessComponent.CreateInstance<FechamentoPreco>();

        business.Run(samFechamentoPreco);

    }
    else
        args.Message = "Não é possível processar a rotina não está Aberta";
}



 

O código do business component é muito simples, segue abaixo:
 

public class FechamentoPreco : BusinessComponent<FechamentoPreco>, IFechamentoPreco, IBusinessTaskAction<SamFechamentoPreco>
{
    public void Run(SamFechamentoPreco samFechamentoPreco)
    {
        samFechamentoPreco.Edit();
        samFechamentoPreco.Ocorrencias += Environment.NewLine + "Data Atual: " + DateTime.Now;
        samFechamentoPreco.Save();
    }
}


Já regerei o cache no Builder algumas vezes mas não adianta.

por (115 pontos)
editado por | 157 visitas
Consegui identificar que o erro acontece na primeira linha ao dar o Edit() no obejto, trocando a assinatura do Método para um long e passando o handle da rotina e antes de fazer o edita fazer o Get Funcionou. Porém se alguém souber como passar objetos de entidade para o método Run do BTL seria muito bom

2 Respostas

0 votos
Melhor resposta

Sim tem como definir a propriedade Definition passada de uma camada para outra.

Utilize o seguinte código.

samFechamentoPreco.Definition = EntityDefinition.GetByName('NOME_TABELA') 

 

por (956 pontos)
editado por
0 votos

Consegui identificar que o erro acontece na primeira linha ao dar o Edit() no obejto, trocando a assinatura do Método para um long e passando o handle da rotina e antes de fazer o edita fazer o Get Funcionou. Porém se alguém souber como passar objetos de entidade para o método Run do BTL seria muito bom, vem como ficou

public void Run(long handleSamFechamentoPreco)
{
    SamFechamentoPreco samFechamentoPreco = SamFechamentoPreco.Get(handleSamFechamentoPreco);
    samFechamentoPreco.Edit();
}

 

por (115 pontos)
editado por
O problema ocorre porque a entidade passada está sem a definição.
Conforme resposta do Henrique pode atribuir a definição manualmente para funcionar.

Isto ocorre porque as definições não são trafegadas entre as camadas. Existem motivos pra ser assim, um deles é que as definições podem ser grandes e complexas.

abraços!
Melhores Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários