BISOrderBy

De BIS Wiki
Revisão de 17h26min de 7 de setembro de 2015 por Rodrigogml (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

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.


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 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.


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());