Aipoの一覧表示でソートをする時の注意点

Aipoの一覧画面でタイトルや更新日付などでソートをするときに、テンプレートでは

https://github.com/aipocom/aipo/blob/master/portlets/wiki/src/main/webapp/WEB-INF/templates/vm/portlets/html/ja/ajax-wiki-list.vm

#ALtdheadAtt("#ALajaxsort('wiki_name' $l10n.WIKI_TITLE $result 'WikiListScreen')" "")

のように書きます。 ただここを変更しただけではソートは効きません。

 

https://github.com/aipocom/aipo/blob/master/portlets/wiki/src/main/java/com/aimluck/eip/wiki/WikiSelectData.java

  /**
   * @return
   * 
   */
  @Override
  protected Attributes getColumnMap() {
    Attributes map = new Attributes();
    map.putValue("wiki_name", EipTWiki.WIKI_NAME_PROPERTY);
    map.putValue("parent_name", EipTWiki.PARENT_ID_PROPERTY);
    map.putValue("update_user", EipTWiki.UPDATE_USER_ID_PROPERTY);
    map.putValue("update_date", EipTWiki.UPDATE_DATE_PROPERTY);
    return map;
  }

にソートさせたいキーをセットしておきます。ソートする際のキーワードとソートさせるデータベースのカラムを紐付けます。

なぜここを変更する必要が有るかというと、

https://github.com/aipocom/aipo/blob/master/core/src/main/java/com/aimluck/eip/common/ALAbstractSelectData.java

のところでセッションに入っているソートのキーを上で設定したマップのデータベースのカラムを取り出しているからです。

  /**
   * ソート用の <code>SelectQuery</code> を構築します。
   * 
   * @param crt
   * @return
   */
  protected SelectQuery<M1> buildSelectQueryForListViewSort(
      SelectQuery<M1> query, RunData rundata, Context context) {
    String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR);
    String sort_type = ALEipUtils.getTemp(rundata, context, LIST_SORT_TYPE_STR);
    String crt_key = null;

    Attributes map = getColumnMap();
    if (sort == null) {
      return query;
    }
    crt_key = map.getValue(sort);
    if (crt_key == null) {
      return query;
    }
    if (sort_type != null
      && ALEipConstants.LIST_SORT_TYPE_DESC.equals(sort_type)) {
      query.orderDesending(crt_key);
    } else {
      query.orderAscending(crt_key);
      sort_type = ALEipConstants.LIST_SORT_TYPE_ASC;
    }
    current_sort = sort;
    current_sort_type = sort_type;
    return query;
  }