実践 3『登録画面（紐付け）』を作成する

事前確認
手順
手順は実践 2 とほとんど同じです。紐付け部分が違うので、紐付け箇所を中心に作成箇所を確認します。
実践 1 の手順で『REST 一覧画面』を作成します。
その後実践 3 で『REST 登録画面（紐付け）』を作成します。

確認

クライアント側

サーバー側

アップデートSQL

Ruby

画面の確認

Html

データセット

削除チェックプログラム名変更

ER図の確認CSS

バリデーション

デリート削除プログラムのコピー

Appspec

トランJSON

アップデート更新

セレクトSQLJSON

インサート新規

画面の確認する『REST 登録画面』［画面・REST 一覧］［画面・REST 登録訂正/照会］

実践 3 で作成するのはこの登録画面です。

実践 2 と手順はほとんど同じですが、点線内が紐付け画面で追加されている機能です。
ここを実践 3 で作成します。
紐付けしたい行のチェックを行うと右のテーブルのデータのどれを紐付けるのかを選択でき、実行をクリックすると DB へ紐付けた内容が登録されます。

ER 図を確認する
作成する画面の『REST』テーブルを中心に ER 図を確認。
紐付けは『REST』画面から『システム機能』と紐付けをおこないます。
上記 2 つのテーブルの間に『システム機能_入出力要素』テーブルがあります。
ここに紐付けしたデータが入ります。
このテーブルは REST 以外のテーブルからもシステム機能へ紐付けデータを残すため、どれを紐付けたか仕分けが必要になり、『入出力要素区分』でどのテーブルの入出力要素ｎｏなのかを仕分け管理しています。
ＳＱＬを作成するときは入出力要素区分にきをつけて作成します。
（コピー元のままで作成いてしまうとデータが混ざってしまう為）「シーケンス ＝サロゲートキーとは」記で使用している［入出力要素ｎｏ］はシーケンスになります。
このレコードはデータが増えた時に自動でナンバーを作ってくれる役割です。

ｎｅｘｔｖａｌ ＝ 自動的にＮＯを作ってくれるｋｅｙ （今持っているＮＯに+1 追加していく）
ポスグレを開き、てーぶるを確認すると下記図の様に nextval があります。

ここでも確認できます。シーケンスの中で確認できる。

自動的に NO を作成する様子が SQL ビューで確認できます。
スタートに今までカウントしている件数がわかります。
次に入れたデータは 5 になります。

インサート時はプラス 1 でｎｏを作成
アップデート時は 4 は 4 のままで内容だけを更新できる。

プログラムのコピー「紐付け登録画面を作成する。プログラム名は DG_620R と DG_630U です。
DG_620R は一覧画面作成と同じ。DG_630U は登録画面の紐付け機能付きです。」
1.紐付け画面の雛型［DG_600R］から［DG_620R］をコピーする
2.紐付け画面の雛型［DG_610U］から［DG_630U］をコピーする

DG_620R は実践 1 を参考に作成します。
DG_630U を実践 3 で作成します。

※コピーの手順は実践 1 に記載済

クライアント側を作成する
Html

紐付け部分のクライアント側を確認します。
※他は実践 1 と同じ手順で作成

紐付け部分があるためテーブルが 2 つに分かれて作られています。
［テーブル 1 の Html］

［テーブル 2 の Html］

点線内が紐付けを作成しています。
※コピー元と同じの為項目名の変更箇所だけ作成で OK です

CSS※実践 1 と同じ幅を調節します。

Appspec
紐付け機能の動きを確認します。
※コピー元と同じの為そのままで OK です。

onchange 紐づけ選択/実行が作成される。
これをコントローラで利用します。

コントローラ
DG_630U のコントローラを開きます。
ここには同じ紐づけの指示がありません。
コピー元など複数の画面で同じ操作を行う為、共通の mixin に指示が書かれています。
ここで利用している mixin の確認方法は点線内の書かれています。

図のライブラリーを開きます。
mixin はｊｓフォルダーの中に保管されています。

共通の mixin を開くと［on change 紐づけ選択/実行］があります。
※ここは触らないこと。変えてしまうとこの mixin を使う画面すべてに影響します。

サーバー側を作成する
データセットＪＳＯＮ※実践 2 と同様コピー元と違う部分の項目名を作成します。
主にテーブル 1 の作成のため、［id：detail1］を Html と合わせて作成します。

バリデーションＪＳＯＮ※実践 2 と同様
➀データセットを確認し、項目名を作成します。
②ポスグレで文字数を確認して［min］と［max］を作成します。

トランＪＳＯＮ※実践 2 と同様同様にデータセットから項目名を作成する。
トランはセレクトとアップデート 2 つあります。

セ レ ク ト

selectＳＱＬＪＳＯＮ※実践 2 と同じ
➀アウトプットをデータセットから作成②AS をアウトプットから作成③SQL を作成※ER 図を確認するで確認した入出力要素区分の作成に注意する④ジェネレート SQL の場合、［field/table/funct］が必要な場合は作成するアップデート

updateSQLＪＳＯＮ
アップデート SQL は実践 2 とほとんど同じですが、紐付け部分が違うので確認します。
下記図の紐付けが追加されています。

※アウトプットなし ＝ インプットで DB へ入れるため※アウトプットあり ＝ 更新した DB からデータを出すため［紐付けの仕組み］［画面と ER 図］

［照会処理を作成］➀アウトプットを作成する（ジェネレート SQL 時は［field/table/funct］注意）②［Funct］は freesql の為内容に注意
入出力要素区分がコピー元と違う為、ER 図を確認して［R］を作成する。

［削除処理を作成］➀

［更新処理を作成］

［紐付けテーブルの処理を作成］※入出力要素区分を作成忘れないように注意する➀［紐付けテーブルの紐付けデータを削除する］

②［紐付けテーブルへ紐付けデータを更新］

［新規処理を作成］

RubyupdateSQL の before に書かれていた Ruby を確認する。モデル ruby を開きます。
➀Ruby の中のプログラム名がコピー元のままで変換されない為、プログラム名［DG_630U］を作成します。
②Mixin を読み込んでいるため、内容を確認します。
［DG_630U_model.rb］

［updateSQL の before 一覧］
下記を確認すると 4 種類の ruby が使われていることがわかる➀“comment": "ｒｅｓｔ

削除処理","id": "delete1","before": "setDeleteDataOfDrmTools('detail1', 'delete1', '入出力要素ＮＯ')",②"comment": "システム機能_入出力要素

削除処理","id": "delete2","before": "setDeleteDataOfDrmTools('detail1', 'delete2', '入出力要素ＮＯ')",③"comment": "ｒｅｓｔ

更新処理","id": "update","before": "setUpdateDataOfDrmTools('detail1', 'update', '入出力要素ＮＯ')",④"comment": "システム機能_入出力要素

削除処理","id": "delete_IO","before": "setUpdateDataOfDrmTools('detail1', 'delete_IO', '入出力要素ＮＯ')",⑤"comment": "システム機能_入出力要素

登録処理","id": "insert_IO","before": "setInsert システム機能_入出力要素 OfDG_630U('detail1', 'insert_IO')",⑥"comment": "システム機能_入出力要素

登録処理","id": "insert_IO","before": "setInsert システム機能_入出力要素 OfDG_630U('detail1', 'insert_IO')",⑦ "comment": "ｒｅｓｔ

新規処理","id": "insert","before": "setInsertDataOfDrmTools('detail1', 'insert', '入出力要素ＮＯ')",［model.rb を開く］
［def］に続き、指定のプログラムがある
下記は⑤⑥の sql で使われている ruby です。
プログラム名・項目名を作成します。

［共通の mixin.rb を開く］

※共通の mixin は触らないので確認のみ。
削除データを設定
下記は➀②の sql で使われている ruby です。

更新データを設定
下記は③④の sql で使われている ruby です。

登録データを設定
下記は⑦の sql で使われている ruby です。