+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 (961 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 Apr 2026
  1. CeceliaWysel

    5 Pontos

  2. VernonSchaw

    5 Pontos

  3. MargieOsterh

    5 Pontos

200 pontos
Melhores 2026 Apr 06 - 12
  1. danilo.pereira

    96 Pontos

  2. danilo.pereira

    96 Pontos

  3. danilo.pereira

    96 Pontos

  4. willian.metalsystem

    69 Pontos

  5. henrique.muller

    62 Pontos

  6. luciano.fronza

    61 Pontos

  7. luciano.fronza

    61 Pontos

  8. luciano.fronza

    61 Pontos

  9. diuari.molinari

    52 Pontos

  10. diuari.molinari

    51 Pontos

518 perguntas
567 respostas
389 comentários
772 usuários