kazpgmの日記

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

TOOL更新_kaz_PHP自動作成◎自動生成お助けTOOL ver0.1(201106011930)_DB内容からプルダウン(html select option)作成できた。

TOOL更新_kaz_PHP自動作成◎自動生成お助けTOOL ver0.1(201106011930)_DB内容からプルダウン(html select option)作成できた。
2011/06/07に修正済みver0.1(201106011930)がvectorに載りました。
 重要:以下にあわせて「TOOL更新_kaz_PHP自動作成◎自動生成お助けTOOL_大中小分類情報からエレメントを作成する方法」(http://d.hatena.ne.jp/kazpgm/20110602/1307008407)も見てください。

【0】以下の修正を行いました。
1.バグ対応

(1)
 ・定義エクセルで「検索・入力プルダウン」で検索条件に「FromTo」を指定した場合、
  自動作成◎自動生成されたHTMLがバグっている。「srch_項目_From」、「srch_項目_To」の
  2項目できるはずなのだが、「Srch_項目」1つしかできていない。
  「検索プルダウン・入力ラジオボタン」も同様。

・自動作成◎自動生成された「itemAListView.html」。FromToになっていない。 <=NG

★修正後の画面と「itemAListView.html」。FromToになった。<=OK

 
 

(2)「郵便1,郵便2」の検索指定で、1つの項目も作らないバグを修正

(3)以下バグ修正
 ・「検索ラジオボタン・入力プルダウン」、「検索チェックボックス・入力プルダウン」、
  「検索・入力ラジオボタン」、「郵便1,郵便2」、「電話1,電話2,電話3」、
  「携帯1,携帯2,携帯3」、「メールアドレスの書式」の検索条件が「FromTo」指定のときは
  エラー(これらでFromTo検索することはあまりないはずなので)とする。
 ・「画像」、ファイル」、「秘密画像」、「秘密ファイル」で検索条件が指定されたときは
  エラー(これらで検索することはないはずなので)とする。

2.分類、中分類、小分類のselectをDB内容から自動作成◎自動生成する。

==<<追加、修正 プログラム一覧>>===============

今回修正量が多いので、修正内容は記述しません。
■kaz_PHP自動作成◎自動生成お助けTOOL\hinagata\Model\
 修正「hingataDeleteItemSrch.txt」
 修正「hinagata_listview20080724_user.txt」
 修正「hinagata_iUpCsv20090714.txt」
 修正「hinagata_add20110223_nondb_user.txt」
 修正「hinagata_add20080724_user.txt」正
 修正「hinagata_20080229.txt」

■kaz_PHP自動作成◎自動生成お助けTOOL\hinagata\View\
 修正「hinagata_RegisterView_001_user.txt」
 修正「hinagata_ListView_001_user.txt」
 修正「hinagata_CompleteView_001_user.txt」
 修正「hinagata_AmendView_001_user.txt」
 追加「hinagata_ListView_DB_分類_中コード値.txt」
 追加「hinagata_ListView_DB_分類_大コード値.txt」
 追加「hinagata_ListView_DB_分類_小コード値.txt」
 修正「hinagata_AmendView_001.txt」
 修正「hinagata_RegisterView_001.txt」
 修正「hinagata_NewListView_001_user.txt」
 修正「hinagata_ListView_001.txt」
 修正「hinagata_iUoCsvView.txt」
 修正「hinagata_DetailView_001_user.txt」
 修正「hinagata_DetailView_001.txt」
 修正「hinagata_ConfirmView_001_user.txt」
 追加「hinagata_ListSrch_DB_大分類_大プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大分類_大プルダウン.txt」
 追加「hinagata_ListSrch_DB_大中小分類_小プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大中小分類_小プルダウン.txt」
 追加「hinagata_ListSrch_DB_大中小分類_大プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大中小分類_大プルダウン.txt」
 追加「hinagata_ListSrch_DB_大中小分類_中プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大中小分類_中プルダウン.txt」
 追加「hinagata_ListSrch_DB_大中分類_大プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大中分類_大プルダウン.txt」
 追加「hinagata_ListSrch_DB_大中分類_中プルダウンFromTo.txt」
 追加「hinagata_ListSrch_DB_大中分類_中プルダウン.txt」
 追加「hinagata_AmendView_DB_大分類_大プルダウン.txt」
 追加「hinagata_AmendView_DB_大中小分類_小プルダウン.txt」
 追加「hinagata_AmendView_DB_大中小分類_大プルダウン.txt」
 追加「hinagata_AmendView_DB_大中小分類_中プルダウン.txt」
 追加「hinagata_AmendView_DB_大中分類_大プルダウン.txt」
 追加「hinagata_AmendView_DB_大中分類_中プルダウン.txt」
 追加「hinagata_DetailView_DB_分類_小コード値.txt」
 追加「hinagata_DetailView_DB_分類_中コード値.txt」
 追加「hinagata_DetailView_DB_分類_大コード値.txt」
 追加「hinagata_ListSrch_プルダウンFromTo.txt」
 追加「hinagata_ListSrch_郵便番号.txt」

■kaz_PHP自動作成◎自動生成お助けTOOL\.システムphpBasePgm\
 修正「common\AppCheckUtil.php」
 修正「common\AppHtmlUtil.php」
 修正「functions.php」

■kaz_PHP自動作成◎自動生成お助けTOOL\システムBasePgm\
 修正「admin\js\kaz.js」
 修正「js\kaz.js」

■kaz_PHP自動作成◎自動生成お助けTOOL\
 修正「PHP作成マクロ(お助けTOOL).xls」
 修正「テーブル項目一覧などの定義_★お助けTOOL_Sample_110601.xls」

==<<デモ用 追加内容>>==============

■kaz_PHP自動作成◎自動生成お助けTOOL\テーブル項目一覧などの定義_★お助けTOOL_Sample_110601.xls

・「大分類情報」、「中分類情報」、「小分類情報」、「商品情報」シートを追加しました。
 これらをDBから作成したエレメントのデモに使用しています。

・「コード一覧表」シートにデモ用コードID「ary_lrgmidsml_category」(大中小分類があるもの)、
 「ary_lrgmidsml_biztype」(大分類だけのもの)を追加しました。



=== 2011/05/16 自動作成◎自動生成アイディアスケッチ <=自分用メモ start ====

「テーブル項目一覧などの定義_★お助けTOOL_Sample_110601.xls」のテーブルごとのシート
前提:DBから作成したエレメントを指定したとき「項目チェック内容」(K列)の指定は
   "検索・入力プルダウン"、"検索プルダウン・入力半角英数字"
   のどちらかとする。(以外はエラー)

例:E列(D列) J列
  CATEGORY(大分類) 11.selectなど.大分類.ary_lrgmidsml_category
  SUBCATEGORY(中分類) 11.selectなど.中分類.ary_lrgmidsml_category
  EXTRACATEGORY(小分類) 11.selectなど.小分類.ary_lrgmidsml_category

1.J列「コード値」のDBエレメントを収集しエレメントを作成する。(3文字目から”.selectなど.”を対象とする)
 (1)エレメント作成。phpの最初にプログラムする。
  例:「ary_lrgmidsml_category」を
    (同じ「コードID」の組み合わせが複数ある場合は大中小分類の指定が多いもの一つ選ぶ)
    「コード一覧表」シートのB列(コードID)の
    I列(大分類/中分類/小分類)を参照してJ列からO列から
    作成する
  a.収集した物が大分類だけのとき。
    例:
    // 単独項目(大中小の分類がない)のエレメント作成
    creLrgMidSmlCategoryEle("ary_lrgmidsml_category", 
    "m_category", "ca", "category", "catname", "catengname", "deldt");
  
  b.収集した物が大中分類のとき。
    例:
    // 大中分類のエレメント作成
    creLrgMidSmlCategoryEle("ary_lrgmidsml_category", 
    "m_category", "ca", "category", "catname", "catengname", "deldt",
    "m_subcategory", "cs", "category", "subcategory", "subcatname", "subcatengname", "deldt");
  
  c.収集した物が大中小分類のとき。
    例:
    // 大中小分類のエレメント作成
    creLrgMidSmlCategoryEle("ary_lrgmidsml_category", 
      "m_category", "ca", "category", "catname", "catengname", "deldt",
      "m_subcategory", "cs", "category", "subcategory", "subcatname", "subcatengname", "deldt",
      "m_extracategory", "ce", "category", "subcategory", "extracategory", "excatname", "excatengname", "deldt");

 (2)エレメントのjavascript配列値を設定する。viewの最初にプログラムする。
    例:エレメント1つにつき1つ作成する。
    <?=AppHtmlUtil::creJSvarCategory("ary_lrgmidsml_category");?>



2.J列「コード値」のDBエレメントを収集する。(3文字目から”.selectなど.”を対象とする)
  収集する順番は
  管理者側のときはV列「検索後表示項目順」、W列「詳細画面表示項目順」とする。
  ユーザ側のときはAC列「検索後表示項目順」、AD列「詳細画面表示項目順」、AF列「詳細画面入力項目順」とする。
  
  まず、管理者、ユーザ別に、J列に3文字目から”.selectなど.大分類.”がはいっている数を調べる。
  「検索後表示項目順」 での数=>a
  「詳細画面表示項目順」での数=>b
  「詳細画面入力項目順」での数=>c
  
  変数を作成する。
  ・Dim DBコード検索項目Array(a,5,3)
  ・Dim DBコード表示項目Array(b,5,3)
  ・Dim DBコード入力項目Array(c,5,3)

3.J列「コード値」を最後から数えて最初の”.”以降を取得(キーとする)。
 先頭の”.”以前も取得する。
 例:「ary_lrgmidsml_category」、「11」
  これをキーにして12文字目から
  「.大分類.」、「.中分類.」、「.小分類.」
  をチェックしそれぞれの項目名などを設定する。
  
  変数内容:DBコードXX項目Array(X,4,3)
   idx,1,1:「コード一覧表」シートの「№」 例:「11」
   idx,1,2:「コード一覧表」シートの「コードID」 例:「ary_lrgmidsml_category」
   idx,1,3:DUMMY
   idx,2,1:大分類項目ID
   idx,2,2:中分類項目ID
   idx,2,3:小分類項目ID
   idx,3,1:大分類項目名
   idx,3,2:中分類項目名
   idx,3,3:小分類項目名
   idx,4,1:検索項目一致条件.大分類用
   idx,4,2:検索項目一致条件.中分類用
   idx,4,3:検索項目一致条件.小分類用
  プログラムを自動作成◎自動生成するときはこの塊をペアと考える。
 
3.エラーチェック
 (1)「大分類」、「中分類」、「小分類」の順番が崩れた場合エラーメッセージ出力する。
   例:”V列「検索後表示項目順」:J列「コード値」のDBエレメント
     「ary_lrgmidsml_category」指定項目は『「大分類」のみ、「大分類、中分類」の組み合わせ、
     「大分類、中分類、小分類」の組み合わせ』であること。かつ、「大分類」、「中分類」、「小分類」の順に
     並べてください。”

 (2)キー(例:「ary_lrgmidsml_category」)が同じなのに、先頭の”.”以前(例:「11」)が
   違っている場合エラーメッセージ出力する。
   例:”J列「コード値」のDBエレメント「ary_lrgmidsml_category」指定のエレメント番号「99」は
    「11」と違っています。「コード一覧表」シートの設定内容が間違っていると思われます。”

4.全行収集したのち

 (1)チェックロジック(DBエレメントから)作成。phpのチェックロジック。
  a.全行収集した物が大分類だけのとき
    例:
$result = AppCheckUtil::checkLrgCodeValue($o, $errorMessages, "大分類",  $result, "category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);
  
  b.全行収集した物が大中分類のとき
    例:
$result = AppCheckUtil::checkLrgCodeValue($o, $errorMessages, "大分類",  $result, "category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);
$result = AppCheckUtil::checkMidCodeValue($o, $errorMessages, "中分類",  $result, "category", "sub_category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);

  c.全行収集した物が大中小分類のとき
    例:
    
$result = AppCheckUtil::checkLrgCodeValue($o, $errorMessages, "大分類",  $result, "category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);
$result = AppCheckUtil::checkMidCodeValue($o, $errorMessages, "中分類",  $result, "category", "sub_category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);
$result = AppCheckUtil::checkSmlCodeValue($o, $errorMessages, "小分類",  $result, "category", "sub_category", "extra_category", "ary_lrgmidsml_category", true, $o['c_elements_idx'], $test_chk_indelkbn);

 (2)エレメントのselect文を設定する。viewの項目。
  a.全行収集した物が大分類だけのとき
    例:
<?=AppHtmlUtil::getHTMLSelectLrgPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], "category", "--- 以下から選択して下さい。---", $o['c_elements_idx'],'', $test_indelkbn)?>
  
  b.全行収集した物が大中分類のとき
    例:
<?=AppHtmlUtil::getHTMLSelectLrgPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], "category", "--- 以下から選択して下さい。---", $o['c_elements_idx'], "onchange=\"createMidCategorySelection2(this.options[this.selectedIndex].value, sub_category, '--- 以下から選択して下さい。---',ary_lrgmidsml_category, '大分類', " . $o['c_elements_idx'] . ", '" . $test_indelkbn ."');\"", $test_indelkbn)?><br/>
<?=AppHtmlUtil::getHTMLSelectMidPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], $o["sub_category"], "sub_category", "--- 以下から選択して下さい。---", $o['c_elements_idx'], "", $test_indelkbn)?><br/>
  
  c.全行収集した物が大中小分類のとき
    例:
<?=AppHtmlUtil::getHTMLSelectLrgPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], "category", "--- 以下から選択して下さい。---", $o['c_elements_idx'], "onchange=\"createMidCategorySelection1(this.options[this.selectedIndex].value, sub_category, extra_category, '--- 以下から選択して下さい。---',ary_lrgmidsml_category, '大分類', " . $o['c_elements_idx'] . ", '" . $test_indelkbn ."');\"", $test_indelkbn)?><br/>
<?=AppHtmlUtil::getHTMLSelectMidPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], $o["sub_category"], "sub_category", "--- 以下から選択して下さい。---", $o['c_elements_idx'], "onchange=\"createSmlCategorySelection(category.options[category.selectedIndex].value, this.options[this.selectedIndex].value, extra_category, '--- 以下から選択して下さい。---', ary_lrgmidsml_category, '大分類', '中分類', " . $o['c_elements_idx'] . ", '" . $test_indelkbn ."');\"", $test_indelkbn)?><br/>
<?=AppHtmlUtil::getHTMLSelectSmlPlus($ELEMENTS['ary_lrgmidsml_category'], $o["category"], $o["sub_category"], $o["extra_category"], "extra_category", "--- 以下から選択して下さい。---", $o['c_elements_idx'], "", $test_indelkbn)?><br/>

 (3)エレメントのコード値を設定する。viewの項目。
  a.全行収集した物が大分類だけのとき
    例:
    <?=$ELEMENTS['ary_lrgmidsml_category']['lrg'][$o["category"]][$o['c_elements_idx']]?><br/>

  b.全行収集した物が大中分類のとき
    例:
    <?=$ELEMENTS['ary_lrgmidsml_category']['lrg'][$o["category"]][$o['c_elements_idx']]?><br/>
    <?=$ELEMENTS['ary_lrgmidsml_category']['mid'][$o["category"]][$o["sub_category"]][$o['c_elements_idx']]?><br/>

  c.全行収集した物が大中小分類のとき
    例:
    <?=$ELEMENTS['ary_lrgmidsml_category']['lrg'][$o["category"]][$o['c_elements_idx']]?><br/>
    <?=$ELEMENTS['ary_lrgmidsml_category']['mid'][$o["category"]][$o["sub_category"]][$o['c_elements_idx']]?><br/>
    <?=$ELEMENTS['ary_lrgmidsml_category']['sml'][$o["category"]][$o["sub_category"]][$o["extra_category"]][$o['c_elements_idx']]?>

=== 2011/05/16 自動作成◎自動生成アイディアスケッチ <=自分用メモ end ====



2011/05/20 01:00-16:00 バグ発見。多分このロジック作った当時は検索でFromToできる項目は絞ろうと考えていた気がする。
2011/05/21 06:30-11:00 検索FromTo指定でエラーにするもの決めた。「検索ラジオボタン・入力プルダウン」、「検索チェックボックス・入力プルダウン」、「検索・入力ラジオボタン」、「郵便1,郵便2」、「電話1,電話2,電話3」、「携帯1,携帯2,携帯3」、「メールアドレスの書式」のときは、”・・・は検索FromTo指定できません。強制的に完全一致に変更します。”にした。修正終了です。
2011/05/15 05:00-09:30 2、をやっている途中。今回の修正はかなり大きくなりそう。
2011/05/16 15:00-22:30 自動作成◎自動生成アイディアのスケッチ作成。これでhinagataと自動作成◎自動生成ロジックがいけそう。
2011/05/17 08:00-22:00 自動作成◎自動生成VBAに手を加えている。
2011/05/23 10:00-17:00 作成中。なかなかむずかしい。
2011/05/24 08:00-19:00 引き続き作成中。
2011/05/27 13:00-19:00 引き続き作成中。
2011/05/28 07:00-11:00 13:00-14:00 19:00-24:00 引き続き作成中。DBから作ったエレメントの項目チェック内容は「検索・入力プルダウン」または、「検索プルダウン・入力半角英数字」だけにした。そのほかを混ぜると、ロジックわけわからなくなるので。「検索プルダウン・入力半角英数字」があることでselect項目だと思っていた項目がinput項目になる(新規作成のキー項目のとき)。のでkaz.js「createMidCategorySelection1」「createMidCategorySelection2」「createSmlCategorySelection」で「Obj.tagName.toLowerCase() == "select"」を調べるようにした。
2011/05/31 08:00-23:00 大体動いた。しかし、新設した「検索プルダウン・入力半角英数字」はやめることにした。「入力半角英数字」を使ったほうがわかりやすい。
2011/06/01 07:00-10:00 14:00-20:00 完成。明日は、自WEBのデモに反映しよう。
2011/06/02 08:00-15:00 自WEBのデモ(http://kazpgm.ddo.jp/kaz01u/admin/http://kazpgm.ddo.jp/kaz01u/)にのせた。vectorに登録依頼した。
2011/06/04 07:05-07:10 (html select option)をタイトルに追加した。
2011/06/07 11:00-11:40 修正済みver0.1(201106011930)がvectorに載りました。