kazpgmの日記

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

12月15日に、Vectorから、バグ修正と説明追加「Ver1.6(202112100000)」公開OKのメールが来た。

1.Vectorから「kaz_javaSpringBootプログラム自動作成◎生成ツール」java ,SpringBoot
https://www.vector.co.jp/soft/winnt/prog/se523123.html
のバグ修正と説明追加「Ver1.6(202112100000)」が公開OKとなった。

修正履歴は以下のようになる。
・1.6(202112100000)
 1.「javaSpringBootプログラム作成マクロ.xlsm」・「ReadMe」シートの以下記述を修正した。
  --------------------------------------------------------------------------------------------------------------------------
  「kaz_javaSpringBootプログラム作成ツール」の導入手順、定義ファイル説明
  <<追加 start>>
    ↑画像付き説明は以下シートを見てください。 
      ・「ReadMe補足:自動作成したPGMサンプルを動かすときは」シート。手順01~手順02、手順08~手順13が理解できます。
      ・「ReadMe補足 定義ファイル」シート。「手順03」~「手順08」及び『「javaSpringBootテーブル項目一覧などの定義.xlsm」のシートの定義について』が理解できます。
  <<追加 end>>

  --------------------------------------------------------------------------------------------------------------------------
  1 手順01.PC設定
    Spring BootでWEB開発するための環境を作ってください。
    前述「私のSpring Boot+thymeleaf環境」に合わせてもらえれば良いと思います。
  <<追加 start>>
     補足:STS4、apache-maven 3.6.3、JDK JavaSE-13、MySql 10.4.14-MariaDBの導入は必須です。
        その他はPOM.xmlにより自動設定されるので気にしないでOKです。
  <<追加 end>>
     ・・・当ツールはPGMコードを作成することを目的としていて、環境はすでにできていることを前提にしています。

  --------------------------------------------------------------------------------------------------------------------------
  手順04.「コード一覧表」シートに、選択プルダウンやラジオボタンなどのコードを設定してください。
  <<修正前>>
   ・現在入っている「10.ary_lrgmidsml_category」「11.ary_lrgmidsml_biztype」はDBエレメントのサンプルなので、削除しても大丈夫です。
  <<修正後>>
   ・現在入っている「10.ary_lrgmidsml_category」~「15.ary_lrgmidsml_purchase_hist」はDBエレメントのサンプルなので、削除しても大丈夫です。

  --------------------------------------------------------------------------------------------------------------------------
  「javaSpringBootテーブル項目一覧などの定義.xlsm」のシートの定義について
  ・・・
   検索項目一致条件(P列10行から)
  <<修正前>>
     ・「検索ラジオボタン・入力プルダウン」、「検索チェックボックス・入力プルダウン」、
      「検索プルダウン・入力ラジオボタン」、「検索・入力ラジオボタン」、「検索・入力プルダウン」、「検索・入力プルダウン」、
      「メールアドレスの書式」のときは検索項目一致条件に「FromTo」を指定できません、
      強制的に「完全一致」に書き換えます。
  <<修正後>>
     ・同上、
      同上、「検索・入力ajax」、
      同上、
      同上

 2.「javaSpringBootプログラム作成マクロ.xlsm」に「ReadMe補足 定義ファイル」シートを追加した。これによりツールに対する理解が深まることを期待している。

 3.「javaSpringBootテーブル項目一覧などの定義.xlsm」・「コード一覧」シート
  --------------------------------------------------------------------------------------------------------------------------
  I列(テーブル略名)を空白にした。
  理由:各テーブル定義のテーブル略名を使用してPGMを作成していて、ここに定義したテーブル略名は使用していないため。

  --------------------------------------------------------------------------------------------------------------------------
  4行目
  注意)・コードIDは英数字とアンダースコアのみ使用してください。
       KEY項目IDが、テーブルIDと同じ場合、強制的に、KEY項目ID+”_cd”に書き換えられます。
        ・分類名の項目ID(K列)に同じ名前の登録があると自動作成後のPGMでエラーになります。
  <<修正前>>
          テーブル項目名を修正して下さい。
  <<修正後>>
          テーブル項目名を修正して下さい。(名前だからと言って、各テーブル同じnameではダメということ。)
 4.「javaSpringBootテーブル項目一覧などの定義.xlsm」に項目チェック内容=”検索・入力Ajax”のサンプルを追加した。
  ・「javaSpringBootテーブル項目一覧などの定義.xlsm」の「使用できる項目」シートの38行目に
   item31(検索・入力Ajax(業種ID))を項目チェック内容=”検索・入力Ajax”として追加した。

 5.バグ修正
  ■以下の時、入力エラーが起きると例外が発生する。または、行追加、行削除を行うと例外が発生する。修正する
   修正 例:SubcategoryController.java 中分類情報管理・中分類情報変更・小分類情報一覧登録
   理由:subcategoryFormのCategoryCdObjがnullになっているため、
      subcategoryAmendRegister.htmlの「<td th:text="*{categoryCdObj.catname}">catname</td>」で例外発生
   修正箇所:
 ----
   private String extracategoryListAdd(SubcategoryJoinPForm subcategoryJoinPForm,
     BindingResult result,
     String mode,
     String addNum,
     Model model) {
    //エラーになったときのモードを設定
    model.addAttribute("mode", mode);
   <<追加 start>>
    subcategoryService.setDbEleObjForSubcategoryForm(subcategoryJoinPForm);
   <<追加 end>>
 ----
   private String extracategoryListDel(SubcategoryJoinPForm subcategoryJoinPForm,
     BindingResult result,
     String mode,
     String num,
     Model model) {
    //エラーになったときのモードを設定
    model.addAttribute("mode", mode);
   <<追加 start>>
    subcategoryService.setDbEleObjForSubcategoryForm(subcategoryJoinPForm);
   <<追加 end>>
 ----
   @PostMapping(params="mode=upd_do")
   public String subcategoryUpdDo(@Validated({GroupOrder1.class, GroupOrder2.class})  SubcategoryJoinPForm subcategoryJoinPForm,
  ・・・
    if (result.hasErrors()) {
   <<追加 start>>
     subcategoryService.setDbEleObjForSubcategoryForm(subcategoryJoinPForm);
   <<追加 end>>
     //何かしらの入力エラーがあった場合"itemErrorMessages"にエラー内容を入れる
     setAddNumMapForAttribute(model, subcategoryJoinPForm);

  ■親子テーブル変更画面(1つの子供データが2行表示のパターン)で子供データを削除すると画面が壊れることがわかった。ので、修正する
   例:purchaseHistAmendRegister.html 購入履歴情報管理・購入履歴情報変更・購入履歴明細情報一覧登録
   修正内容:
   修正前:
                 <td align="center" nowrap rowspan="2">
      <th:block th:if="${mode == 'ins'} " >
        <a th:href="'JavaScript:document.frm.num.value =\'' + ${status.count} + '\';do_Submit_Clk2(\'insListJoin_del\');'">
       <img src="/img/btn/btn_delete.gif" alt="削除" width="38" height="20" border="0"></a>
       </th:block>
      <th:block th:if="${mode != 'ins'} " >
        <a th:href="'JavaScript:document.frm.num.value =\'' + ${status.count} + '\';do_Submit_Clk2(\'updListJoin_del\');'">
       <img src="/img/btn/btn_delete.gif" alt="削除" width="38" height="20" border="0"></a>
       </th:block>
     </td>
      </th:block>
             </tr>
    <tr>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice}" th:errorclass="font-s-red-form"></div>
                 </td>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].quantity')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].quantity}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].quantity')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].quantity}" th:errorclass="font-s-red-form"></div>
                 </td>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].price')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].price}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].price')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].price}" th:errorclass="font-s-red-form"></div>
                 </td>
    </tr>

    </th:block>
   修正後:
                 <td align="center" nowrap rowspan="2">
      <th:block th:if="${mode == 'ins'} " >
        <a th:href="'JavaScript:document.frm.num.value =\'' + ${status.count} + '\';do_Submit_Clk2(\'insListJoin_del\');'">
       <img src="/img/btn/btn_delete.gif" alt="削除" width="38" height="20" border="0"></a>
       </th:block>
      <th:block th:if="${mode != 'ins'} " >
        <a th:href="'JavaScript:document.frm.num.value =\'' + ${status.count} + '\';do_Submit_Clk2(\'updListJoin_del\');'">
       <img src="/img/btn/btn_delete.gif" alt="削除" width="38" height="20" border="0"></a>
       </th:block>
     </td>
      </th:block>
             </tr>
   <<追加 start>>
      <th:block th:if="*{purchaseDetailHistJoinCFormList[__${status.index}__].delKbn == ''}">
   <<追加 end>>
    <tr>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].unitPrice}" th:errorclass="font-s-red-form"></div>
                 </td>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].quantity')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].quantity}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].quantity')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].quantity}" th:errorclass="font-s-red-form"></div>
                 </td>
                 <td th:class="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].price')} ? 'error' : 'none'">
                  <input th:field="*{purchaseDetailHistJoinCFormList[__${status.index}__].price}"   class="form-eng"   type="text" size="30" maxlength="20" />
                  <div th:if="${#fields.hasErrors('purchaseDetailHistJoinCFormList[__${status.index}__].price')}" th:errors="*{purchaseDetailHistJoinCFormList[__${status.index}__].price}" th:errorclass="font-s-red-form"></div>
                 </td>
    </tr>
   <<追加 start>>
      </th:block>
   <<追加 end>>

    </th:block>

  ■セッションBeanの使い方が間違っていた。ので、修正する。
   検索画面Form(例:biztypeSrchForm)Bean、検索ソート順Form(例:srchOrderForm)Beanを
   「@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」としてセッションスコープにしたが、
   コントローラ(例:BiztypeController)で
   画面入力した値(例:BiztypeSrchForm biztypeSrchForm,SrchOrderForm srchOrderForm,)を直接設定
   (例:this.biztypeSrchForm = biztypeSrchForm;と、this.srchOrderForm = srchOrderForm;)しているので
   セッションBeanでなくなっている。正しくは、セッションBeanの中身を書き換える。(変数自体を直接書き換えないこと)
  
  ・「作成例\作成先フォルダ\demo-spring-kaz01u_元ネタ削除後_最新」内容変更
   ・src\main\java\com\kaz01u\demo\form」内容変更
    SessionUserSrchForm.java ←新規追加
    SessionUserSrchOrderForm.java ←新規追加
    SrchOrderForm.java ←@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」を削除した修正
    UserSrchForm.java ←@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」を削除した修正
   ・src\main\java\com\kaz01u\demo\controller\admin」内容変更
    UserController.java ←SessionUserSrchForm、SessionUserSrchOrderFormに対応した修正
  ・「作成例\hinagata\java\form」内容変更
   03_00_SessionTblSrchForm.txt ←新規追加。Session■{Prg_name}■SrchForm向け
   03_00_SessionTblSrchOrderForm.txt ←新規追加。Session■{Prg_name}■SrchOrderForm向け
   03_00_TblSrchForm.txt ←@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」削除
  ・「作成例\hinagata\java\controller」内容変更
   02_00_TblController.txt ←Session■{Prg_name}■SrchForm、Session■{Prg_name}■SrchOrderFormに対応した修正
   02_00_TblJoinParentController.txt ←Session■{Prg_name}■SrchForm、Session■{Prg_name}■SrchOrderFormに対応した修正
   02_30_01_whereItm部品.txt ←Session■{Prg_name}■SrchFormに対応した修正
   02_30_02_whereEditDateFromTo部品.txt ←Session■{Prg_name}■SrchFormに対応した修正
   02_30_03_whereFromToItm部品.txt ←Session■{Prg_name}■SrchFormに対応した修正
   02_30_04_whereItm検索チェックボックス部品.txt ←Session■{Prg_name}■SrchFormに対応した修正
  ・自動作成マクロも、Session■{Prg_name}■SrchForm、Session■{Prg_name}■SrchOrderFormに対応した修正。

  ・自動作成後のPGMでの、セッションBean例:
   1.BiztypeSrchForm 修正
    @Component
   <<削除 start>>
    @Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
   <<削除 end>>
    public class BiztypeSrchForm implements Serializable {

   2.SessionBiztypeSrchForm 新規作成
   <<追加>>
    @Component
    @Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class SessionBiztypeSrchForm implements Serializable {
     /**
      * 
      */
     private static final long serialVersionUID = 1L;
     private BiztypeSrchForm biztypeSrchForm;
    }

   3.BiztypeController 修正
    ・・・
   <<修正前>>
    @Autowired
    BiztypeSrchForm biztypeSrchForm;  ←「@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」なのでセッションBean
    @Autowired
    SrchOrderForm srchOrderForm;  ←「@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)」なのでセッションBean
    ・・・
    @PostMapping(params="mode=list")
    public String biztypeList(BiztypeSrchForm biztypeSrchForm,
      SrchOrderForm srchOrderForm,
      ・・・
        Pageable pageable) {
     //セッションに載せる
     this.biztypeSrchForm = biztypeSrchForm;  ←NG:変数自体を直接書き換えている。(this.biztypeSrchFormが、セッションBeanでなくなっている)
     this.srchOrderForm = srchOrderForm;  ←NG:変数自体を直接書き換えている。(this.srchOrderFormが、セッションBeanでなくなっている)
   <<修正後>>
    @Autowired
    SessionBiztypeSrchForm sessionBiztypeSrchForm;  ←新たにSessionBiztypeSrchFormを作って、セッションBeanとする、中身をBiztypeSrchFormとする。
    @Autowired
    SessionSrchOrderForm sessionSrchOrderForm;  ←新たにSessionSrchOrderFormを作って、セッションBeanとする、中身をSrchOrderFormとする。
    ・・・
    @PostMapping(params="mode=list")
    public String biztypeList(BiztypeSrchForm biztypeSrchForm,
      SrchOrderForm srchOrderForm,
      ・・・
        Pageable pageable) {
     //セッションに載せる
     this.sessionBiztypeSrchForm.setBiztypeSrchForm(biztypeSrchForm);  ←新たなSessionBiztypeSrchFormの中身BiztypeSrchFormを書き換る。
     this.sessionSrchOrderForm.setSrchOrderForm(srchOrderForm);  ←新たなSessionBiztypeSrchFormの中身BiztypeSrchFormを書き換る。

  ■Functions.javaで例外が発生しても、エラー表示画面にならないのを修正した。
   理由:Functions.javaで、「throw new RuntimeException("・・・・");」とするところを
      throwを書かずに「new RuntimeException("・・・・");」と書いていたので、次ステップが実行されていた。
   修正:throwを追記した。
  
  ■Functions.javaのsetAndDelUploadFileメソッドの以下を修正した。
   1.ファイル作成のフラッシュ、クローズを追記した。
    //ファイルUPLOAD
    try (OutputStream os = Files.newOutputStream(uploadfile, StandardOpenOption.CREATE)) {
     byte[] bytes = file.getBytes();
     os.write(bytes);
    <<追加 start>>
     os.flush();
     os.close();
    <<追加 end>>
    } catch (IOException ex) {
   2.javaのmatchesメソッドに対するパラメータが間違っていた
    <<修正前>>
          if (!table.matches("/^[0-9a-zA-Z_\\-]+$/") || 
               !pkey.matches("/^[0-9a-zA-Z_\\-]+$/")) { // TABLE名キーであること。
    <<修正後>>
          if (!table.matches("^[0-9a-zA-Z_\\-]+$") || 
               !pkey.matches("^[0-9a-zA-Z_\\-]+$")) { // TABLE名キーであること。

  ■画像アップロード先及びファイルアップロード先「upload」フォルダの作成が抜けていた。
   1.「demo-spring-kaz01u_元ネタ削除後_最新」フォルダに「upload」フォルダを新規作成した。
    さらに「javaSpringBootプログラム作成マクロ.xlsm」・「ReadMe」シートの「手順09」の以下を修正した。
    <<修正前>>
    手順09.STS4(Spring Tool Suite 4)に設定
     3.「C:\sts\workspace\demo-spring-kaz01u」の、「src」、「sql」、「logs」フォルダを削除したのち、
     「作成先フォルダ\demo-spring-kaz01u」フォルダの中身(「pom.xml」、「src]、『sql」、「logs」)をコピーしてください。
    <<修正後>>
    手順09.STS4(Spring Tool Suite 4)に設定
     3.「C:\sts\workspace\demo-spring-kaz01u」の、「src」、「sql」、「logs」、「upload」フォルダを削除したのち、
      「kaz_javaSpringBootプログラム作成ツール\作成例\作成先フォルダ\demo-spring-kaz01u」フォルダの中身
      (「pom.xml」、「src]、『sql」、「logs」、「upload」)をコピーしてください。
     さらに「ReadMe補足 自動作成したPGMサンプルを動かすときは」シートの「手順09」を修正した。

   2.自動作成後のFunctions.java・setAndDelUploadFileメソッドの「Files.createDirectory(path);」を
    「Files.createDirectories(path);」に変えた。これで、存在しないフォルダも作ってくれる。

  ■DbElementのチェックロジックのひな形と、自動作成マクロを修正した。
   理由
    例:項目名を"item31"として、コード値に”11.selectなど.大分類.ary_lrgmidsml_biztype”としたとき
     「if (!dbElementsService.isCheckItem31(・・・」になってしまったので、「if (!dbElementsService.isCheckBiztypeCd(・・・」にする。
   ・チェックロジックのひな形修正
    <<修正前>>
    hinagata\java\controller\02_17_02_01_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{LrgKeyId}■(■{prg_name}■Form.get■{LrgKeyId}■(), false)) {
    hinagata\java\controller\02_17_02_01_JoinC_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{LrgKeyId}■(■{prg_name}■JoinCForm.get■{LrgKeyId}■(), false)) {
    hinagata\java\controller\02_17_02_02_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{MidKeyId}■(■{prg_name}■Form.get■{LrgKeyId}■(), 
    hinagata\java\controller\02_17_02_02_JoinC_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{MidKeyId}■(■{prg_name}■JoinCForm.get■{LrgKeyId}■(), 
    hinagata\java\controller\02_17_02_03_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{SmlKeyId}■(■{prg_name}■Form.get■{LrgKeyId}■(), 
    hinagata\java\controller\02_17_02_03_JoinC_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{SmlKeyId}■(■{prg_name}■JoinCForm.get■{LrgKeyId}■(), 
    hinagata\java\controller\02_26_02_01_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{LrgKeyId}■(■{prg_name}■SrchForm.get■{LrgKeyId}■(), true)) {
    hinagata\java\controller\02_26_02_02_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{MidKeyId}■(■{prg_name}■SrchForm.get■{LrgKeyId}■(), 
    hinagata\java\controller\02_26_02_03_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{SmlKeyId}■(■{prg_name}■SrchForm.get■{LrgKeyId}■(), 
    hinagata\java\service\impl\02_05_02_01_isCheckLrg部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{LrgKeyId}■(■{prg_name}■Upload.get■{LrgKeyId}■(), false)) {
    hinagata\java\service\impl\02_05_02_02_isCheckLrgMid部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{MidKeyId}■(■{prg_name}■Upload.get■{LrgKeyId}■(), ■{prg_name}■Upload.get■{MidKeyId}■(), false, ■{lrgKeyId}■Flg)) {
    hinagata\java\service\impl\02_05_02_03_isCheckLrgMidSml部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{SmlKeyId}■(■{prg_name}■Upload.get■{LrgKeyId}■(), ■{prg_name}■Upload.get■{MidKeyId}■(), 
    <<修正後>>
    hinagata\java\controller\02_17_02_01_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBLrgKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_17_02_01_JoinC_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBLrgKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_17_02_02_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBMidKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_17_02_02_JoinC_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBMidKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_17_02_03_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBSmlKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_17_02_03_JoinC_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBSmlKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_26_02_01_isCheckLrg部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBLrgKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_26_02_02_isCheckLrgMid部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBMidKeyId}■(・・・同じ・・・
    hinagata\java\controller\02_26_02_03_isCheckLrgMidSml部品.txt(2,8)  [SJIS]:   if (!dbElementsService.isCheck■{DBSmlKeyId}■(・・・同じ・・・
    hinagata\java\service\impl\02_05_02_01_isCheckLrg部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{DBLrgKeyId}■(・・・同じ・・・
    hinagata\java\service\impl\02_05_02_02_isCheckLrgMid部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{DBMidKeyId}■(・・・同じ・・・
    hinagata\java\service\impl\02_05_02_03_isCheckLrgMidSml部品.txt(2,9)  [SJIS]:    if (!dbElementsService.isCheck■{DBSmlKeyId}■(・・・同じ・・・
   ・自動作成マクロ修正
    ひな型修正に合わせて、値を入れるロジック追加した。


 6.よりよくするための修正
  ■SeqServiceImpl.javaのgetDbSeqメソッドの以下を修正した。
   1.getDbSeq(String tableId, int keyItemLen, String aAri, int yymmddLen, int count)メソッド
    ・シーケンス番号を取得するのは別トランザクション( Propagation.REQUIRES_NEW)にする。
     こうしないと、ほかの人が同じテーブルに挿入するときのシーケンス番号取得を
     自分がDB登録トランザクション済みになるまで待たせることになります。
     別トランザクション( Propagation.REQUIRES_NEW)にすれば、
     自分のシーケンス番号取得が済めば、ほかの人がシーケンス番号を取得できるようになる。
     補足:複数データの一括登録時に、ほかの人のDB追加を待たせないための工夫です。
     追記:@Transactionalデフォルトは「propagation Propagation.REQUIRED」なので、
        @Transactionalのメソッドから、@Transactionalのメソッドを呼び出した場合、
        同一トランザクションとして処理されます。
    <<追加 start>>
    import org.springframework.transaction.annotation.Propagation;
    <<追加 end>>
     ・・・
    <<修正前 start>>
    @Transactional(rollbackFor=Throwable.class)
    <<修正前 end>>
    <<修正後 start>>
    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor=Throwable.class)
    <<修正後 end>>
    @Override
    public String getDbSeq(String tableId, int keyItemLen, String aAri, int yymmddLen, int count) {