+2 votos
63 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 (107 pontos)
editado por | 63 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 (871 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 (107 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 Feb 2020
  1. diuari.molinari

    30 Pontos

  2. henrique.muller

    18 Pontos

  3. juliano.pezzini

    13 Pontos

  4. thiago.almeida

    10 Pontos

  5. bruno.viek

    9 Pontos

  6. metalsystem.gustavo

    8 Pontos

  7. gustavo.lemos

    8 Pontos

  8. Leonardo Rovigo

    7 Pontos

  9. felipe.souza

    5 Pontos

  10. antonio.teles

    5 Pontos

200 pontos
Melhores 2020 Feb 24 - Mar 01
  1. diuari.molinari

    9 Pontos

  2. bruno.viek

    9 Pontos

  3. gustavo.lemos

    8 Pontos

  4. felipe.souza

    5 Pontos

  5. juliano.pezzini

    5 Pontos

  6. pedro.amorim

    2 Pontos

409 perguntas
461 respostas
334 comentários
461 usuários