「kaz_javaSpringBootプログラム自動作成◎生成ツール」親子テーブルの1画面表示対応とバグ修正
「kaz_javaSpringBootプログラム自動作成◎生成ツール」java ,SpringBoot
https://www.vector.co.jp/soft/winnt/prog/se523123.html
のバグ修正が完了した。本日VectorにVer1.5(202111240000)で登録依頼する。OKがきたらまた報告する予定。
修正履歴は以下のようになる。
・1.5(202111240000)
0.マクロの使用法に親子画面(登録、照会、更新、削除各々1画面で親子関係のテーブルを扱う)を追記した
■「javaSpringBootプログラム作成マクロ.xlsm」の「ReadMe」シートに親子画面について追記した。
■「ReadMe補足 自動作成したPGMサンプルを動かすときは」シートを追加した。これによりツールに対する理解が深まることを期待している。
1.仕様追加
[1]ツール修正
■「javaSpringBootテーブル項目一覧などの定義.xlsm」の「★TOOL用コンスタント★」シート
①L~N列2行目に親子画面(登録、照会、更新、削除各々1画面で親子関係のテーブルを扱う)を
作成したいテーブルを、
「親テーブル名(親テーブル主キーカラム名,・・・複数はカンマ区切り・・・):子テーブル名(子テーブル主キーカラム名,・・・複数はカンマ区切り・・・),
・・・複数はカンマ区切り・・・」
例「purchase_hist(purchase_hist_id):purchase_detail_hist(purchase_hist_id),
category(category_cd):subcategory(category_cd),
subcategory(category_cd,subcategory_cd):extracategory(category_cd,subcategory_cd)」
として登録するようにする。
自動作成時には、ここに登録してある親子テーブルのみ親子画面を作成するようにする。
注意:同一親テーブルに子供が複数あるパターンには対応していません。
親テーブル主キーカラム名および、子テーブル主キーカラム名は「javaSpringBootテーブル項目一覧などの定義.xlsm」のPK列に値が入っていることが必須です。
②L~M列8行目に、親子画面の子テーブルMAX数(C_JOIN_DSP_DEFAULT_SIZE=50)を登録し、自動作成に使用する。
■「javaSpringBootプログラム作成マクロ.xlsm」の「Module1_一気にPGM作成Otaasuke」マクロを修正する。
[2]自動作成後のPGMがどのようになるか
■親子画面(登録、照会、更新、削除各々1画面で親子関係のテーブルを扱う)を作成
理由:現在、1テーブル1画面で作成されるが、親子関係があるテーブルも1画面で作成したい。
注意:以下は親子画面(テーブル定義エクセルで指定する)作成時の話で、
1テーブル1画面作成時は今まで通りのPGM作成とする。
①messages.properties
・親子画面用のエラーメッセージ項目名を追加登録する。
・親子画面用のtypeMismatchエラーメッセージを追加登録する。
②親テーブルentityクラスを修正する
・子テーブルのEntityクラスリスト項目を「@OneToMany
@JoinColumn(name="子テーブルFKカラム名"」として追加する。
③子テーブルのentityクラスを修正する。
・親テーブルのEntityクラスリスト項目を「@ManyToOne
@JoinColumn(name="子テーブルFKカラム名", referencedColumnName = "親テーブル主キーカラム名",
insertable = false, updatable = false)」として追加する。
補足:DBエレメント用にすでに作成しようとしている「@ManyToOne・・・」が作成されてる時は、それを使う。
④親テーブルJoinformクラスを新規作成する
・親テーブルの新規JoinFormを、親テーブルのFormを継承し、子テーブルの新規JoinFormリスト項目を追記して作成する。
⑤子テーブルの新規JoinFormを新規作成する
・子テーブルの新規JoinFormを、子テーブルのFormから親テーブル主キー項目を削除し、親テーブルObjectを削除して作成する。
⑥親テーブルのControllerクラスを修正する
・画面中の子テーブルデータの最大サイズ=Max50を指定
・親テーブルInsSubメソッドを子テーブルを取り込んだロジックに修正する。
・setAddNumMapForAttributeメソッドを新規作成し、子テーブルデータの追加最大残行数を設定する。
・子テーブルInsListAddを新規作成し、子テーブルの1行追加処理をおこなう。
・子テーブルInsListDelを新規作成し、子テーブルの1行削除処理をおこなう。
・子テーブルListAddを新規作成し、子テーブルの1行追加処理SUBをおこなう。
・子テーブルListDelを新規作成し、子テーブルの1行削除処理SUBをおこなう。
・親テーブルInsDoメソッドを子テーブルを取り込んだロジックに修正する。
・親テーブルUpdメソッドを子テーブルを取り込んだロジックに修正する。
・子テーブルUpdListAddを新規作成し、子テーブルの1行追加処理をおこなう。
・子テーブルUpdListDelを新規作成し、子テーブルの1行削除処理をおこなう。
・親テーブルUpdDoメソッドを子テーブルを取り込んだロジックに修正する。
・checkPkFor子テーブルJoinUploadを新規作成し、子テーブルのPKチェックを行う。
・親テーブルUpdListDoメソッドの”親テーブルentityクラスに子テーブルのEntityクラスリスト項目”したことによる修正を行う。
・親テーブルDelDoメソッドで、削除前に子テーブルの有無をチェックし、存在する場合エラーにするように修正する。
⑦子テーブルのrepositoryクラスを修正する
・findBy親キーの@Queryに、” order by 主キー”を追記する。
⑧親テーブルServiceImpl.javaを修正する
・registerメソッドは削除せずに、親子画面でないときはそのまま使う。
・registerJoinメソッドを新規追加。(registerメソッドをコピーし、画面入力の子テーブルデータを登録するようにする。)
・registerFor親テーブル名InsUpdListFormメソッドに、”親テーブルentityクラスに子テーブルのEntityクラスリスト項目”したことによる修正を行う。
・registerFor親テーブル名UpCsvDoメソッドに、”親テーブルentityクラスに子テーブルのEntityクラスリスト項目”したことによる修正を行う。
・findByPkFor親テーブル名Formメソッドに、”親テーブルFromクラスに子テーブルのFormクラスリスト項目”したことによる修正を行う。
・sendメソッドに、子テーブル情報もメールに追記するよう修正する。
・findByPkFor親テーブル名JoinFormメソッドを新規追加。(findByPkFor親テーブル名Formメソッドをコピーし、子テーブルデータを設定するようにする。)
・updateメソッドは削削除せずに、親子画面でないときはそのまま使う。
・updateJoinメソッドを新規追加。(updateメソッドをコピーし、画面入力の子テーブルデータを登録、更新、削除するようにする。)
⑨親テーブルService.javaを修正する
・ImplのregisterJoinメソッドを新規追加と同様
・ImplのfindByPkFor親テーブル名JoinFormメソッドを新規追加と同様
・ImplのupdateJoinを新規追加と同様
⑩子テーブルServiceImpl.java 修正
・public void registerFor子テーブル名InsUpdListFormメソッドを、public List<PurchaseDetailHist> registerFor子テーブル名InsUpdListFormとした。
⑪子テーブルService.java 修正
・子テーブルServiceImpl.java修正と同様
⑫demo/upload/Purchase子テーブル名JoinUpload.javaを新規作成する。
・親テーブルの登録画面、更新画面で子テーブルデータの既存レコード有無、画面上での削除有無を保持する。
⑬resources/templates/mail/members/admin/子テーブル名InsMailForParent.txt
・親子画面で新規登録したときの子テーブルデータ用メール文を登録する。
⑭resources/templates/members/admin/親テーブル名Amend.htmlを修正する
・FormをJoinPFormに変更する。
・”<input type="hidden" name="num" th:value="'0'"/>”を追記する。
⑮resources/templates/members/admin/親テーブル名AmendRegister.htmlを修正する
・FormをJoinPFormに変更する。
・子テーブルの情報一覧を表示し、子テーブルデータを登録、更新、削除するようにする。
⑯resources/templates/members/admin/親テーブル名Detail.htmlを修正する
・子テーブルの情報一覧を表示するようにする。
⑰resources/templates/members/admin/親テーブル名Register.htmlを修正する
・FormをJoinPFormに変更する。
・”<input type="hidden" name="num" th:value="'0'"/>”を追記する。
2.バグ修正
■・「kaz_javaSpringBootプログラム自動作成◎生成ツール」ver1.3(202108290000)で修正した
以下の修正に誤認識があった。ので、修正した。
①各テーブル用コントローラの「@PostMapping(params="mode=insList_add")」メソッドで、
@Validated({GroupOrder1.class, GroupOrder2.class})(入力チェック)を行ったが、
未入力の時に行を増やそうとすると必須入力エラーになるので操作性が悪い。
ので、@Validated({GroupOrder1.class, GroupOrder2.class})を@Validated({})にする。
②各テーブル用コントローラの「@PostMapping(params="mode=insList_del")」メソッドで、
@Validated({GroupOrder1.class, GroupOrder2.class})(入力チェック)を行ったが、
未入力の時に行を増やそうとすると必須入力エラーになるので操作性が悪い。
ので、@Validated({GroupOrder1.class, GroupOrder2.class})を@Validated({})にする。
修正内容:
①②ともに、「BindingResult result,」が必須で、「@Validated({})」は必要なかった。
ので、「@Validated({})」を削除した。
■公開区分(openKbn)で表示非表示を制御しているが、自動作成されるPGMの項目名が「openKbn」固定になっていたので
「項目名(ID)」から作成するようにした。
■2021/06/21から、『kaz_javaSpringBootプログラム自動作成◎自動生成ツール』をVectorに載せています。2022年にZenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
・Vector
www.vector.co.jp
・Zenn本(SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版))
zenn.dev