Usuários mais ativos no mês 12/2019
  1. henrique.muller

    843 Pontos

  2. paulo.silva

    842 Pontos

  3. maicon.pereira

    582 Pontos

  4. juliano.pezzini

    464 Pontos

  5. leandro.piscke

    428 Pontos

  6. diuari.molinari

    386 Pontos

  7. dirceu.schlickmann

    347 Pontos

  8. Camila

    288 Pontos

  9. bruno.cardoso

    272 Pontos

  10. Rafael Leonhardt

    253 Pontos

Erro com BTL no 15.0 - 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.

+2 votos
39 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.

perguntou Jun 10, 2015 por rodrigo.andrade (107 pontos)
editado Jun 11, 2015 por henrique.muller
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') 

 

respondida Jun 11, 2015 por henrique.muller (843 pontos)
editado Jun 12, 2015 por paulo.silva
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();
}

 

respondida Jun 11, 2015 por rodrigo.andrade (107 pontos)
editado Jun 11, 2015 por henrique.muller
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!
...