kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

ここのところの、「kaz_javaSpringBootプログラム自動作成◎生成ツール」に機能追加。DBデータの大中小分類直接コード入力、ajaxで名称表示。の追加完了

kaz_javaSpringBootプログラム自動作成◎生成ツール」

関連キーワード(テーブル ,自動生成 ,定義 ,java ,Security ,Spring ,DB ,SpringBoot ,Thymeleaf ,JPA)
https://www.vector.co.jp/soft/winnt/prog/se523123.html

のバグ修正および機能追加が完了した。本日VectorにVer1.2(202108180000)で登録依頼する。

修正履歴は以下のようになる。
・1.2(202108180000)
1.バグ修正
  ■自動生成された一括登録画面の項目「年月日[yyyy/mm/dd]」にバグがあり、入力できない。
   (他の画面はOKだった)
   これは、JKL呼び出しの時"frmL"をパラメータにしていたが、"frm"でなければいけなかった。ので、修正する。

  ■各テーブル用コントローラの「@PostMapping(params="mode=insList_add")」メソッドで現在、
   @Validated(入力チェック)を行っていないが、typeMismatchエラー(例、金額欄に文字を入れた時)が
   起きる可能性があるので、入力チェックを行いエラー時は戻るようにする。
  ■各テーブル用コントローラの「@PostMapping(params="mode=insList_del")」メソッドで現在、
   @Validated(入力チェック)を行っていないが、
   @Validated(入力チェック)を行って入力エラーを無視するようにする。

          まいったな、これでVectorに登録申請したが、入力エラーを無視するPGMにしたらうまくいかなかったので、入力チェックを行いエラー時は戻るようにPGM修正しておいた。まあ、PGM的には間違っていないのでいいかな。

  ■自動作成された「result.rejectValue("xxxx", "validation.xxxx", new String[] {"『XXXX』"}, "");」の
   「"validation.xxxx"」を"validation.category"にする。
   これは、messages.propertiesの"validation.category"を固定で使用するので。

  ■DBエレメントから名称が取得できないとき「java.lang.NullPointerException: null」になるので修正する。
   「テーブル名.getテーブルIDObj().get分類名の項目ID()」を
   「ObjectUtils.isEmpty(テーブル名.getテーブルIDObj())?"":テーブル名.getテーブルIDObj().get分類名の項目ID()]に変更する。

2.仕様追加
[1]ツール修正
  ■「javaSpringBootテーブル項目一覧などの定義.xlsm」の「★TOOL用コンスタント★」シート
     A列の「検索・入力プルダウン」の次行に「検索・入力ajax」を追加する。
     これにより、DBデータの大分類、中分類、小分類を画面から入力する時、直接コード入力して、
     ajaxで名称を表示するようにする。
    ・さらに「javaSpringBootプログラム作成マクロ.xlsm」のReadMeシート・352行あたりの
     「強制的に「検索・入力プルダウン」に変更します。」を
     検索・入力プルダウン以外かつ、検索・入力ajax以外の場合、強制的に「検索・入力プルダウン」に変更します。
     に書き換えます・
    ・さらに「javaSpringBootプログラム作成マクロ.xlsm」のReadMeシート・353行あたりに
     検索・入力ajaxを指定した場合、強制的に「検索・入力プルダウン」に変更します。

  ■「javaSpringBootテーブル項目一覧などの定義.xlsm」の標準モジュール「Module12」マクロを修正する。
  ■「javaSpringBootプログラム作成マクロ.xlsm」の「Module1_一気にPGM作成Otaasuke」マクロを修正する。

[2]自動作成後のPGMがどのようになるか
  ■javaScript中の変更することができるvarをletに変更する。
   最近はletのほうが一般的なので、自分で作成したものに関しては修正する。

  ■同一セッション内のリクエストの同期を行うための追加
   理由:以下のような情報がWEBに掲載されていたため
    @SessionAttributesアノテーション、またはsessionスコープのBeanを使用する場合は、
    同一セッション内のリクエストを同期化することを推奨する。
    同期化しない場合、セッションに格納されているオブジェクトに、同時にアクセスする可能性があるため、
    想定外のエラーや、動作を引き起こす原因になりうる。
   ①/demo/config/EnableSynchronizeOnSessionPostProcessor.java 新規追加

   ②/src/main/java/com/kaz02u/demo/WebConfig.java 修正
    EnableSynchronizeOnSessionPostProcessor.javaのbean定義を追加

  ■serviceクラスの@Transactionalを@Transactional(rollbackFor=Throwable.class)に修正
   理由:以下のような情報がWEBに掲載されていたため
    ロールバックは非検査例外(RuntimeExceptionとそのサブクラス)にのみ適応され、
    検査例外(RuntimeExceptionとそのサブクラス以外)に関してはデフォルトでは
    ロールバックされずコミットされる

  ■各テーブル用AmendRegister.htmlの以下を削除する
   理由: Thymeleafのテンプレートレイアウト機能により
    <div th:fragment="mainSub" th:remove="tag">がAmend.html、Register.htmlのmainSubに置き換わる。ので、
    mainSub以外(以下箇所)は使用されない。
    ”登録”、”リセット”ってあるので誤解してしまうかもしれないので削除する。
     <!-- tbl-01 end -->
     <p class="text-center"><a href="javascript:do_Submit_Clk1();"><img src="/img/btn/button-sub.gif" alt="登録" width="61" height="22" border="0" class="right5" /></a>
     <a th:href="'javascript:submitFrm5(\'/members/admin/・・・\', \'ins\')'"><img src="/img/btn/button-reset.gif" alt="リセット" width="84" height="22" border="0" /></a></p>

  ■各テーブル用Controllerクラスの「@PostMapping(params="mode=del_do")」メソッドに、テーブル削除済みチェックを追加する。

  ■DBデータの大分類、中分類、小分類を画面から入力する時、直接コード入力して、
   ajaxで名称を表示するようにすることもできるようにする。
   ◆XX情報登録
    ①DbElementsController.java
      a.「@Autowired DbElementsService dbElementsService;」を追加
      b.dbElem2(大分類、中分類、小分類のいずれかに入力項目(selectでない項目)があるときの、チェンジ関数のajaxから呼ばれるエレメント取得)関数追加
          
    ②XxxxxxController.java
      a.xxxxxxInsSub(XX情報登録表示処理SUB)
       ・大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
        「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
      b.checkAndEditLrgmidsmlForXxxxxxForm(大分類、中分類、小分類をチェックし、DBエレメントを作成する)
       ・大分類、中分類、小分類、それぞれが入力項目のとき、xxxxxxFormに分類名を設定するようにする
       ・大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
        「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
    ③XxxxxxForm.java
      a.大分類、中分類、小分類、それぞれが入力項目のとき、分類名項目を追加する
    ④DbElementsServiceImpl.java
      a.現在privateになっている大分類、中分類、小分類の分類名を返すメソッドをpublicに変更する
      b.getDbEleAryLrgmidsmlYyyyyyyyにパラメータに(select項目のときtrue、入力項目の時false)を追加する
       入力項目の時は、select項目作成用のDB読み見込みを行わないようにする。
      c.現在自動作成されるgetDbEleAryLrgmidsmlYyyyyyyyは、大分類、中分類、小分類がすべてselect項目のとき使用できるようにしておく。
    ⑤DbElementsService.java
      a.現在DbElementsServiceImpl.javaで、privateになっている大分類、中分類、小分類の分類名を返すメソッドをpublicに変更する
      b.getDbEleAryLrgmidsmlYyyyyyyyにパラメータに(select項目のときtrue、入力項目の時false)を追加する
    ⑥XxxxxxServiceImpl.java
      a.findByPkForXxxxxxForm(XX情報画面情報を取得する)
        XxxxxxForm作成時に、大分類、中分類、小分類、それぞれが入力項目のとき、分類名を設定する
    ⑦kaz.js
      a.以下関数(大分類、中分類、小分類のいずれかに入力項目(selectでない項目)があるときのチェンジ関数)を追加する
       ・createLrgOnlyChange2
        「中分類がないかつ、入力項目(LrgName=null以外)大分類」のchange関数。
       ・createLrgChange2
        大分類のchange関数
       ・createMidChange2
        中分類のchange関数
       ・createSmlChange2
        小分類のchange関数。
       ・getObjHTMLSubForLrg
        大分類のObjectがあるTDを書き換える。(大分類が入力項目の時使用する)
       ・getObjHTMLSubForMid
        中分類のObjectがあるTDを書き換える。(中分類が入力項目の時使用する)
       ・getObjHTMLSubForSml
        小分類のObjectがあるTDを書き換える。(小分類が入力項目の時使用する)
       ・getObjHTMLSub
        大分類、中分類、小分類のObjectがあるTDを書き換える。(分類が入力項目の時使用する)
    ⑧xxxxxxAmendRegister.html
      a.大分類、中分類、小分類のいずれかに入力項目が含まれている場合のchange関数を
       createLrgChange2、createMidChange2、createSmlChange2にする。
       かつ入力項目時は、分類名を表示したり、入力エラー時にエラー表示にしたりする

   ◆XX情報一覧
    ①XxxxxxController.java
      a.xxxxxxList(XX情報リスト検索条件表示処理)
       ・大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
        「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
      b.xxxxxxListDo(XX情報リスト一覧表示処理)
       ・大分類、中分類、小分類、それぞれが入力項目のとき、xxxxxxSrchFormに分類名を設定するようにする
       ・大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
        「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
    ②XxxxxxSrchForm.java
      a.大分類、中分類、小分類、それぞれが入力項目のとき、分類名項目を追加する
    ③xxxxxxList.html
      a.大分類、中分類、小分類のいずれかに入力項目が含まれている場合のchange関数を
       createLrgChange2、createMidChange2、createSmlChange2にする。
       かつ入力項目時は、分類名を表示したり、入力エラー時にエラー表示にしたりする

   ◆XX情報一覧登録
    ①XxxxxxController.java
      a.xxxxxxInsListSub(XX情報一括登録表示初期処理SUB)
       大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
       「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
      b.xxxxxxInsListAdd(XX情報一括登録行追加表示処理)
       大分類、中分類、小分類のいずれかに入力項目が含まれている場合の
       「dbElementsService.getDbEleAryLrgmidsmlYyyyyyyy」呼び出しに、パラメータ(select項目のときtrue)を追加する
    ②xxxxxxRegisterList.html
      a.大分類、中分類、小分類のいずれかに入力項目が含まれている場合のchange関数を
       createLrgChange2、createMidChange2、createSmlChange2にする。
       かつ入力項目時は、分類名を表示したり、入力エラー時にエラー表示にしたりする