フォームに入力した内容をデータベースに登録する

登録フォームに入力した内容をデータベースに登録する手順をご紹介します。

今回は例として、CookBook:スクリプト開発で登録フォームを作成するで作成した登録フォームに入力された内容をデータベースに登録するスクリプトを作成します。データの送信先にマッピングしている cookbook_109004/ajax/ajax.js のinit()関数にコードを記述します。

完成イメージ

<操作方法>

1. フォームに任意の内容を入力します。
2. 「登録」ボタンをクリックします。
3. データベースに登録が成功した場合は「登録に成功しました」と表示されます。
4. データベースに登録が失敗した場合は「登録に失敗しました」と表示されます。

[iframe width="100%" height="281" src="https://dev-portal.intra-mart.jp/imart/im_cookbook/109004/edit?imui-theme-builder-module=headwithcontainer"]

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。
e builder プロジェクト : im_cookbook_109004.zip
imm ファイル : im_cookbook_109004-1.0.0.imm

ローカル環境で表示させる場合は以下のURLにアクセスしてください。
http://localhost:8080/imart/im_cookbook/109004/edit
なおベースURLである以下の部分は環境に合わせて適宜変更してください。
http://localhost:8080/imart

レシピ

  1. リクエストされたデータをデータベースへ登録できる形に設定します。
  2. データベースにデータを登録します。
  3. データベースへの登録結果を画面に表示します。

注意:データベースにデータを登録するにはあらかじめデータベースにテーブルを作成しておく必要があります。
配布しているユーザモジュールを利用する場合、データベースにPostgreSQLを利用していればテナント環境セットアップ時に自動的にテーブルが作成されます。
配布しているユーザモジュールを利用しないで今回のプログラムを作成した場合や、データベースにSQLServerやDB2やOracleを利用されている場合は以下のようなテーブルを作成してからプログラムを実行してください。

テーブル名:cb109004
カラム名 データ型 備考
item_cd 文字列型 20 主キー
item_name 文字列型 100
item_price 数値型 15
comment 文字列型 200

1. リクエストされたデータをデータベースへ登録できる形に設定します。

入力フォームから送られてきた内容をデータベースのテーブルへ登録できる形に設定します。

    var itemData = {
          item_cd    : Identifier.get(),
          item_name  : request.itemName,
          item_price : parseInt(request.itemPrice, 10),
          comment    : request.comment
    };

データを登録するときはオブジェクトの形でデータを渡します。
登録するテーブルのカラム名をキーに設定します。
登録するテーブルは item_cd を主キーとしているので、ユニークなIDを自動生成するAPIであるIdentifier.get()を利用します。
Identifier.get()の詳細はAPIドキュメントIdentifierオブジェクトをご参照ください。
商品名や金額や備考はリクエスト情報から取り出して設定します。金額は数値型に変換が必要なので、parseInt()を利用して変換します。

2. データベースにデータを登録します。

以下のように設定したデータをデータベースに登録します。

    var result = null;
    // トランザクション処理
    Transaction.begin(function() {
        // DBに登録
        result = new TenantDatabase().insert('cb109004', itemData);
        if(result.error) {
            // エラー時はロールバック
            Transaction.rollback();
        }
    });

(1) Transaction.begin()を利用してトランザクション処理を開始します。
Transaction.begin()は関数を受け取ることが出来ます。関数を受け取る場合コミット漏れやロールバック漏れを予防できます。
Transactionオブジェクトの詳細はAPIドキュメントTransactionオブジェクトをご参照ください。

(2) TenantDatabase().insert()を利用してデータをテーブルに登録します。
TenantDatabaseオブジェクトのinsert()メソッドを利用することで、SQLを書くことなく簡単にテーブルにデータを登録することができます。
insert()の第一引数には登録するデータベースのテーブル名を、第二引数には先ほど登録内容を設定したオブジェクトを渡します。
insert()は処理結果が格納されたDatabaseResultオブジェクトを返します。
TenantDatabaseオブジェクトの詳細はAPIドキュメントTenantDatabaseオブジェクトをご参照ください。

(3) 処理に失敗した場合ロールバックします。
データベース処理に失敗した場合、result.errorにtrueが格納されています。
エラー判定がtrueの場合、Transaction.rollback()を利用してロールバックします。
データベース処理に成功した場合はトランザクション終了時に自動的にコミットされます。

3. データベースへの登録結果を画面に表示します。

以下のように呼出元にデータベース処理の結果を返却し、メッセージを表示させます。

    // レスポンスヘッダのコンテンツタイプを設定
    var response = Web.getHTTPResponse();
    response.setContentType('application/json; charset=utf-8');
    // 処理の結果を返却
    response.sendMessageBodyString(
        ImJson.toJSONString({
            error: result.error,
            errorMessage: '登録に失敗しました',
            successMessage: '登録しました'
        })
    );

(1) Web.getHTTPResponse()を利用してHTTPレスポンスオブジェクトを取得します。
Webオブジェクトの詳細はAPIドキュメントWebオブジェクトをご参照ください。

(2) setContentType()を利用してMIMEタイプと文字コードを設定します。ここではMIMEタイプをJSON、文字コードをUTF-8に設定しています。
HTTPResponseオブジェクトの詳細はAPIドキュメントHTTPResponseオブジェクトをご参照ください。

(3) sendMessageBodyString()を利用してメッセージを返却します。
送信データはImJson.toJSONString()を利用してJSON文字列に変換します。
ImJsonオブジェクトの詳細はAPIドキュメントImJsonオブジェクトをご参照ください。
errorにはデータベース処理結果のエラー判定を設定します。
errorがfalseの場合、ページにsuccessMessageが表示されます。
errorがtrueの場合、ページにerrorMessageが表示されます。

以上でデータベースの登録処理の作成は完了です。