妙な仕様

顧客マスタ編集のjspに妙な仕様が…

	/**
	 * 個人顧客の場合に、顧客名、顧客名カナが変更されたら、顧客担当者名、顧客担当者名カナにコピーする
	 *          顧客担当者名、顧客担当者名カナが変更されたら、顧客名、顧客名カナにコピーする
	 */
	function copyNameXPcName(direction) {
		var customerCode = $("#customerCode").val();
		if(customerCode.length == 0) {
			return;
		}

		var headChar = customerCode.charAt(0);
		if(headChar != '2' && headChar != '4') {
			// 個人顧客以外は行わない
			return;
		}

('A`) なんというマジックナンバー。これは間違いなく罠。

メニューを追加する

メニューはLogin時にLoginAction.login()でロードされCommonResources.userDto.menuDtoListに格納される。
UserDtoが

@Component(instance = InstanceType.SESSION)

とセッションスコープになっていてこれをセッション内で使いまわす構造となる。

メニューのロードはroot.service.MenuService.findMenuByUserId()を通して行われる。

データ構成


データの取得はroot.entity.sql.menu.FindMenuByUserId.sqlで。
parentId=nullの親階層はユーザーRollに関係なく常に取り込まれる。
子階層はGrantRollで有効になっているもののみが取得される。

これらのメニューはMenuService.convertMenuJoinToDto()で整形されメニューとして利用される。
この際子の無い親階層は省略されることに注意。

ざっくりTIPS

わりとSeasar2のものが多め

SQL関連

データの取得更新はS2DAO/S2JDBC経由で。

  • SQLは root.entity.sql以下にsqlファイルで格納されている
  • SQL実行のホストはServiceクラス
  • 履歴データの更新はテーブルの更新トリガで行い、プログラム側では何もしない
    • テーブルのレイアウトを変更した場合はトリガと履歴テーブルの修正が必要になる

構成


    • dto(root.dto)
      EntityよりもController層寄りのもの*1という位置づけか。
      ActionとFormとServiceあたりの橋渡しをする。

*1:使われ方を見ると単なるデータ受け渡し用のパラメータクラスというよりはEntityの意味を強く持ちながら、かつModel層からは離れた位置にあるというしっくり来ないクラス。

SalesCubeをカスタマイズ

次のソリューションのためにSalesCubeをカスタマイズすることに。

販売管理システム SalesCube - トップページ
http://www.ark-info-sys.co.jp/jp/product/salescube/index.html

ソースを分析しつつカスタマイズの勘所なんかを。
(Ver.1.1ベース)
とはいえSeasar2にも不慣れなんで誰得なまとめになりそうな。