フォトアルバム

2011年10月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

なかのひと

373news.com

google Search

  • Google
    blog.ganymean.org
    WWW

Google Analytics

« MG:Unityジェネリック・データ・メッセージ(GDMs) | メイン | MG2:Unity Using modelglue.GenericList »

MG2:Unity Using modelglue.GenericCommit

今日は、ジェネリック・データベース・メッセージ(GDM)のうち、GenericCommitについて、紹介します。(原文タイトル:Using modelglue.GenericCommit)

modelglue.GenericCommit
このメッセージがブロードキャストされると、DataControllerは与えられたテーブルにレコードを保存しようとします。

その実行プロセスは以下のとおりです。

1.アップデートするために既存レコードをロードするか、criteriaで指定されたものにマッチするものがない場合は、挿入するために新規レコードをクリエイトします。
2.レコードのフィールド値をアップデートします。 デフォルトでは、viewstate(FORMとURLスコープの組み合わせ)に対応するフィールドはどれもviewstateの値で設定されます。

  このことは、所与のcontactテーブルに関して、"firstname"というフォーム入力の値が、contactレコードのFirstnameの値に自動的に永続化されることを意味します。

  デフォルトで、DataControllerはすべてのフィールドに対してviewstate内の同一プロパティ名の値で永続化しようとします。どのプロパティを永続化するかをコントロールするために、以下に示される「properties」引数を使用してください。

3.Validate()メソッドと呼ぶことによって、レコードを検証します。

4.レコードが検証されると、DataControllerはデータベースにデータを保存します。

5.最後に、DataControllerは、2つの結果"commit"か"validationError"のいずれかの1つを加えます。これらのresult名をもつresultマッピングの追加は、他のresultマッピングとも同様に動作します。

このmodelglue.genericCommitメッセージは、次の<argument>タグを使用することによって構成されます:

1.Object (必須) -Commitするレコードオブジェクトのテーブル名

2.Criteria (必須) -フィルタとして使用するviewstate値のリスト
ターゲットテーブル中のカラム名にマッチする名前の値リストが、クエリーの'WHERE'節で使用するフィルタとして使用されます。
通常は、テーブルのプライマリーキーのリストに設定されます。ヌルだと、新しいレコードが作成されます。 所与のレコードが、指定されたCriteriaに合致すると、レコードはアップデートされます。さもなければ、新しいレコードが挿入されます。

3.RecordName (任意) -レコードデータセットを格納するviewstate名
デフォルトは、Object&"Record"です。

4.ValidationName (任意) -検証エラー時のメッセージコレクションを格納するviewstate名
デフォルトは、Object&"Validation"です。

5.Properties (任意) -viewstate内の同一名の値から永続化しようとするRecordのフィールド名
デフォルトでは、全てのレコードフィールドが対象となります。

例)基本的なGenericCommit

Contactテーブルで基本的なGenericCommitを実行するために、次のように<event-handler>タグに<message>タグを追加できます:

<message name="modelglue.GenericCommit">
    <argument name="object" value="Contact" />
    <argument name="contactId" value="Contact" />
</message>

ビューで次のコードを実行することによって、レコードを<cfdump>できます:
<cfdump var="#viewstate.getValue("ContactRecord") />

ビューで次のコードを実行することによって、検証メッセージを<cfdump>できます:
<cfdump var="#viewstate.getValue("ContactValidation") />

イベントハンドラ名を"contact.commit"として、以下のURLでこのイベントハンドラーを呼び出すと、'ContactId=42'の'firstname'を'Fred'にアップデートする結果を得るでしょう。
index.cfm?event=contact.commit&contactId=42&firstname=Fred

Viewstate値の引数リストをカスタマイズする。

Contactテーブルに基本的なGenericCommitを実行し、レコードと検証の両方を格納するviewstate名を指定するためには、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericCommit">
    <argument name="object" value="Contact" />
    <argument name="contactId" value="Contact" />
    <argument name="recordName" value="myCommittedContact" />
    <argument name="validationName" value="validationForContact" />
</message>

ビューで次のコードを実行することによって、レコードを<cfdump>できます:
<cfdump var="#viewstate.getValue("myCommittedContact") />

ビューで次のコードを実行することによって、検証メッセージを<cfdump>できます:
<cfdump var="#viewstate.getValue("validationForContact") />

イベントハンドラ名を"contact.commit"として、以下のURLでこのイベントハンドラーを呼び出すと、'ContactId=42'の'firstname'を'Fred'にアップデートする結果を得ます。
index.cfm?event=contact.commit&contactId=42&firstname=Fred

特定のプロパティをコミットする。

Firstnameだけ更新されるようにContactテーブルに基本的なGenericCommitを実行するには、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericCommit">
    <argument name="object" value="Contact" />
    <argument name="contactId" value="Contact" />
    <argument name="properties" value="Firstname" />
</message>

ビューで次のコードを実行することによって、レコードを<cfdump>できます:
<cfdump var="#viewstate.getValue("ContactRecord") />

ビューで次のコードを実行することによって、検証メッセージを<cfdump>できます:
<cfdump var="#viewstate.getValue("ContactValidation") />

イベントハンドラ名を"contact.commit"として、以下のURLでこのイベントハンドラーを呼び出すと、'ContactId=42'の'firstname'のみ'Fred'にアップデートし、Lastnameは"finklebuster"にアップデートしない結果を得ます。
index.cfm?event=contact.commit&contactId=42&firstname=Fred&lastname=Finklebuster

トラックバック

このページのトラックバックURL:
http://app.synapse-blog.jp/t/trackback/190195/6193478

MG2:Unity Using modelglue.GenericCommitを参照しているブログ:

コメント

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。

ログイン

  • コントロールパネルへのログイン
    アカウント:

    パスワード:

更新ブログ

最近のトラックバック

Google

ブログ powered by TypePad
Member since 04/2005