BISOrderBy: mudanças entre as edições
Sem resumo de edição |
mSem resumo de edição |
||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
O BISOrderBy é o objeto usado em conjunto com os MOs pela | O BISOrderBy é o objeto usado em conjunto com os MOs pela [[BISDAO]] do BISFrameWork para definir a ordem que os objetos devem ser retornados ao utilizarmos os métodos de find. Para criar o BISOrderBy é possível de duas maneiras: instanciando o objeto como qualquer outro (sintaxe "new BISOrderBy(...)"), ou utilizando os métodos estáticos "getBISOrderbyInstance()". Em ambos os casos é possível passar dois atributos: coluna a ordenar e ascendência/descendência do campo. Por padrão, se passada só o nome da coluna, a ordem será ascendente. O nome da coluna a ser passada é o mesmo nome do atributo do VO. | ||
Em ambos os casos é possível passar dois atributos: coluna a ordenar e ascendência / descendência do campo. Por padrão, se passada só o nome da coluna, a ordem será ascendente. O nome da coluna a ser passada é o mesmo nome do atributo do VO. | |||
Por exemplo, se temos um ClientVO, e queremos ordenar pelo atributo "name", devemos criar o BISOrderBy passando a | |||
Por exemplo, se temos um ClientVO, e queremos ordenar pelo atributo "name", devemos criar o BISOrderBy passando a String "name" como parâmetro. Se desejarmos que a ordem da lista seja de Z para A, devemos passar o segundo atributo como "false". Como o valor padrão é sempre true na ordem da lista, não faz sentido passar o segundo atributo para obter uma lista ascendente. | |||
É possível organizar uma lista por um atributo que esteja em um sub VO. Por exemplo, imaginando que nosso ClientVO tenha um atributo "address" que carregue um AddressVO, e este tenha um atributo para o nome da rua chamado "street". Para ordenar a lista de clientes por nome da rua, devemos criar um BISOrderBy passando como atributo a string "address.street". Lembrando que o find a ser utilizado é de Client, e não de address. | É possível organizar uma lista por um atributo que esteja em um sub VO. Por exemplo, imaginando que nosso ClientVO tenha um atributo "address" que carregue um AddressVO, e este tenha um atributo para o nome da rua chamado "street". Para ordenar a lista de clientes por nome da rua, devemos criar um BISOrderBy passando como atributo a string "address.street". Lembrando que o find a ser utilizado é de Client, e não de address. | ||
{{nota| | {{nota|Usando o MetaObjects|Um dos possíveis problemas de se passar o nome do atributo como String é um futuro refactor ou alterações do código que venham a alterar o nome da coluna/atributo do VO. Quando isso ocorre, mesmo mudando os métodos Get e Set o nome do atributo passado na String não é validado pelo builder e gerará erro de RunTime já que o atributo não será encontrado no VO. | ||
Para evitar esse tipo de problema, recomendamos que os atributos | |||
Para evitar esse tipo de problema, recomendamos que os atributos passados no OrderBy sejam extraídos do MetaObject ([[BISVO_]]). Permitindo assim que futuras alterações sejam detectadas logo na compilação do sistema, não só durante o uso. Principalmente o uso já em homologação e pelo cliente.}} | |||
Linha 17: | Linha 17: | ||
<syntaxhighlight lang="java5"> | <syntaxhighlight lang="java5"> | ||
//Ordenando por uma coluna | //Ordenando por uma coluna | ||
BISOrderBy.getBISOrderbyInstance( | BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority()); | ||
//Ordenando por uma coluna de for descendente | //Ordenando por uma coluna de for descendente | ||
BISOrderBy.getBISOrderbyInstance( | BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority(), false); | ||
//Ordenando por duas colunas | //Ordenando por duas colunas | ||
BISOrderBy.getBISOrderbyInstance( | BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority(), false).addOrderbyItem(AbbreviationVO_.VO.occurrence()); | ||
</syntaxhighlight>}} | </syntaxhighlight>}} |
Edição atual tal como às 17h26min de 7 de setembro de 2015
O BISOrderBy é o objeto usado em conjunto com os MOs pela BISDAO do BISFrameWork para definir a ordem que os objetos devem ser retornados ao utilizarmos os métodos de find. Para criar o BISOrderBy é possível de duas maneiras: instanciando o objeto como qualquer outro (sintaxe "new BISOrderBy(...)"), ou utilizando os métodos estáticos "getBISOrderbyInstance()". Em ambos os casos é possível passar dois atributos: coluna a ordenar e ascendência/descendência do campo. Por padrão, se passada só o nome da coluna, a ordem será ascendente. O nome da coluna a ser passada é o mesmo nome do atributo do VO.
Por exemplo, se temos um ClientVO, e queremos ordenar pelo atributo "name", devemos criar o BISOrderBy passando a String "name" como parâmetro. Se desejarmos que a ordem da lista seja de Z para A, devemos passar o segundo atributo como "false". Como o valor padrão é sempre true na ordem da lista, não faz sentido passar o segundo atributo para obter uma lista ascendente.
É possível organizar uma lista por um atributo que esteja em um sub VO. Por exemplo, imaginando que nosso ClientVO tenha um atributo "address" que carregue um AddressVO, e este tenha um atributo para o nome da rua chamado "street". Para ordenar a lista de clientes por nome da rua, devemos criar um BISOrderBy passando como atributo a string "address.street". Lembrando que o find a ser utilizado é de Client, e não de address.
![]() |
|
Para ordenar por múltiplas colunas, basta chamar os métodos "addOrderbyItem()" e passar os mesmos atributos citados acima, ou um BISOrderBy completo. A ordem em que estes são acrescentados define a prioridade de cada coluna, ou seja, a segunda coluna só será utilizada se houver empate na primeira, a terceira só será usada de houver empate na primeira e segunda, e assim por diante.
![]() |
Criando BISOrderBy
//Ordenando por uma coluna
BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority());
//Ordenando por uma coluna de for descendente
BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority(), false);
//Ordenando por duas colunas
BISOrderBy.getBISOrderbyInstance(AbbreviationVO_.VO.priority(), false).addOrderbyItem(AbbreviationVO_.VO.occurrence());
|