フォトアルバム

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

« 2006年6月 | メイン | 2006年8月 »

軽くなった’シナプスぶろぐ’

シナプスぶろぐが、今朝のバージョンアップでたいぶ軽くなった。

ブログの表示は、体感的にサクサクって感じ。
投稿は、この結果次第だけど、軽くなっていることを期待して、エイッ!

MG2:Unity Action Packs

ちょっと古い記事(6/12)ですが、Joe Rinehartが"Model-Glue:Unity ActionPacks"を彼のブログで紹介していました。今後のために、意訳してみます。

私がModel-Glueに関して聞いた1つの批評は、既存のアプリケーションに「ぶら下がれる」機能モジュールを作成する簡単な方法が全くないということでした。

私は、フォーラムアプリケーションを書くのが楽しくないので、「これをModel-Glueアプリケーションに追加してくださいか?」とただただ言うだけです。

さて、Model-Glue:Unityには、まさしくこれを可能にする新しいタグがあります:
<modelglue>の子としての<include>タグです。しばらくその批評に耐えてきましたが、<include>タグが正常に動作して、Model-Glueフレームワークにとても素晴らしい機能が追加できたと思います。

この機能追加は、どんなModelGlue.xmlファイルも他のModel-Glue.xml形式のファイルになリ得るし、そして、"子"ファイルでは、それ自身の<controllers>と<event-handlers>を定義できることです。

さらに、"部品化"されたModel-Glue XMLファイルでは、Viewマッピングに使用する追加ディレクトリはもちろん、ColdSpringにロードする追加XMLファイルを宣言するための<setting>タグを使用できます。

例)
以下は、Wiki.xml用"部品"ファイルに、mgwikiに必要なすべてを宣言できることを意味します:

<modelglue>
    <config>
      <!-- Add the wiki /views dir to the viewmappings -->
      <setting name="viewMappings" setting="/mgwiki/views" />
    </config>
 
    <controller name="wikiController" type="mgwiki.WikiController">
      <message-listener message="wiki.page" function="getPage" />
      <!--- other listeners... --->
    </controller>
 
    <event-handlers>
      <event-handler name="wiki.displayPage">
        <broadcasts>
          <message name="wiki.page" />
        </broadcasts>
        <views>
          <include name="body" template="dspWikiPage.cfm" />
        </views>
        <results>
          <result do="view.template" />
        </results>
      </event-handler>
 
      <!--- More event handlers... --->
    </event-handlers>
 
</modelglue>

次に、Wiki機能を他のModel-Glueアプリケーションに加えたいなら、Wiki"部品"を含むように、ModelGlue.xmlファイルを以下のように変更すればいいのです:


<modelglue>
    <include template="/mgwiki/config/Wiki.xml" /> 
 
    <!--- Application stuff...--->
  </modelglue>

<include>の危険性

<include>を使用することに、全く危険がない訳ではありません:<include>タグが、既存のイベントハンドラーやコントローラーを上書きする可能性も有り得ます。"wiki"部品を親アプリケーション定義の前に置いたのはその理由に拠ります:-)。


"ActionPacks?"

Model-Glue:Unity(2.0)の正式リリースに向けて、"ActionPacks"と呼ぶ2、3のModel-Glue部品のリリースを計画しています。ひとつ目は、使いやすく、構成変更可能なe-mailサービスです。他に、ロールベース兼行レベルのセキュリティ対策、ユーザプロファイル管理及びユーザ管理用のインタフェースを提供する予定です。

これらの"ActionPacks"は、Model-Glueフレームワークに少しの変化も必要とせず、まさしくModel-Glue XML部品であるので、誰でも自由にModel-Glueコミュニティに貢献できます。もし誰かがその開発に興味を持ったなら、私は可能な範囲で手伝う
ことに満足するでしょう。そして、Action Packsの選定(多分フォーラムアプリがそうなるでしょうけど)のために、それをModel-Glueの開発に追加するでしょう。

MG2:Unity Customizing Scaffold .XSL Files

今回は、Scaffoldのテンプレートで使用される.XSLファイルのカスタマイズ方法について紹介します(原文タイトル:Customizing Scaffold .XSL Files)

■Scaffold.xslファイルをカスタマイズする。

scaffoldタグが生み出すView CFMLを変えることは、全く可能です。全ては、.XSLファイルを編集することから始まります。xslファイルの編集は、このガイドの範囲外です。しかし、全く難しいわけではありません。

.XSLファイルをカスタマイズするには、3つの方法があります。

□デフォルト.XSLファイルを直接編集する方法

/ModelGlue/unity/xslティレクトリを参照すると、アプリケーションにscaffoldを追加する際に生成されるためにCFMLを定義したいくつかの.XSLファイル(edit.xsl, list.xsl, view.xsl)を見出すでしょう。

全Model-Glueアプリケーションの振る舞いを変更するためには、直接これらのファイルを編集してください。

□新しく.XSLファイルを作成する

自分用の.XSLファイルを作成することによっても、全Model-Glueアプリケーションの振る舞いを変更できます。所与のscaffoldにカスタムXSLファイルを使用するように教えてあげるために、以下のことを行います。

1./ModelGlue/unity/config/Configuration.xmlを開きます。
2."eventHandlerFactory"ビーンを探します。
3.EventHandlerTypesのコンストラクタ引数を定義する<map>タグにある.xslファイルの場所を示すxslキーをカスタム.XSL用に変更します。
  以下、list.xslの例を抜粋します。

    <constructor-arg name="EventHandlerTypes">
       <map>
         <entry key="eventhandler">
           <map>
             <entry key="scaffold"><value>false</value></entry>
             <entry key="class"><value>ModelGlue.unity.eventhandler.EventHandler</value></entry>
             <entry key="views"><list /></entry>
           </map>
         </entry>
         <entry key="list">
           <map>
             <entry key="scaffold"><value>true</value></entry>
             <entry key="class"><value>ModelGlue.unity.eventhandler.scaffold.List</value></entry>
             <entry key="views">
               <list>
                 <map>
                   <entry key="name"><value>List</value></entry>
                   <entry key="xsl"><value>/ModelGlue/unity/xsl/list.xsl</value></entry>
                   <entry key="prefix"><value>dsp</value></entry>
                   <entry key="suffix"><value>List.cfm</value></entry>
                 </map>
               </list>
             </entry>
           </map>
         </entry>

全Model-Glueアプリケーションの振る舞いを変更するために、直接これらを編集します。

□アプリケーション固有の.XSLファイルを編集する方法

特定のModel-Glueアプリケーションで使用される.XSLファイルを変更するには、/ModelGlue/unity/config/Configuration.xml内のEventHandlerFactoryビーン全体を適用したいアプリケーションのColdspring.xmlにコピーします。

そして、"新しく.XSLファイルを作成する"内のインストラクションに従い、/ModelGlue/unity/config/Configuration.xmlファイルの代わりにColdspring.xmlファイル内EventHandlerFactoryセッティングを編集します。

MG2:Unity Customizing Generated CFML

今回は、Scaffoldによって生成されたCFMLをカスタマイズする方法について紹介します。
(原文タイトル:Customizing Generated CFML)

■生成されたHTMLをカスタマイズする

Scaffoldタグは、list機能、View表示とEditフォームなど関連ファイルを必ず生成します。これらの生成されたコードは、ColdSpring.xml内のModelGlueConfigurationBeanのScaffoldPathのプロパティによって管理されるディレクトリに入れられます。

拡張メモ:このセッティング値は、ViewMappingsセッティングに追加され、inculdeタグに遭遇した際に、最後にサーチしたディレクトリを作成します。

デフォルトで、以下の.CFMテンプレートは、scaffoldされたテーブルに対して各々生成されます:

1.dspTableList.cfm - テーブルからレコードリストを表示

2.dspTable.cfm - テーブルから単一レコードを表示

3.frmTable.cfm - テーブルから単一レコードに対する編集フォームを表示

生成されたCFMLをカスタマイズするために、直接これらのファイルを編集することができません。フレームワークが再ロードされる次のとき、これは上書きされるからです。

Viewを編集するために、アプリケーション内の/viewディレクトリに前述のファイルをコピーします。その時点で、コピーされたファイルは上書きされることはなくなります。データベースのコラムを追加された場合、新しいコラムのCFMLをコピー&ペースト可能な資源として生成されたコードを使用できます。

拡張メモ:ViewMappingsセッティングにリストされたどのディレクトリにでも、コピーできます。

MG2:Unity Using Broadcasts, Results and Views in Scaffolds

今回は、Scaffoldタグで、Broadcasts、Results、Viewsタグを使用することについてご紹介します。

■Scaffoldsで、Broadcats, Results及びViewを使用する

"Scaffoldを追加する"で見てきたように、単なるscaffoldタグは複数のイベントハンドラーを定義するだけです。Model-Glue XMLフォーマットを容易に学習するために、scaffoldタグはイベントハンドラーと同じ子タグ(broadcasts, views, and results)をサポートします。

scaffoldタグ配下に追加されたbroadcasts, views, もしくは resultsタグは、与えられたscaffoldが作成する全てのイベントハンドラーに適用されます。(broadcasts, views, 及び resultsの作成方法を学習するには、クイックスタートガイドを参照してください。)

このことによって、よりパワフルにScaffold機能を拡張できます。

たとえば、Model-Glue Application Templateから、所定のScaffoldから作成される全てのイベントハンドラーにサイト全般のテンプレートを使用するためには、単にresultタグを追加するだけです。

<scaffold object="Contact">
    <results>
        <result do="view.template" />
    </results>
</scaffold>

同一オブジェクトに対して、複数のscaffoldタグを作成し、scaffoldのTYPE属性で分割することによって、メッセージのブロードキャストを特定のscaffoldが生成するイベントハンドラーに適用することもできます。

誰でもcontacsを参照可能で、管理者だけがcontactを更新可能なアプリケーションがある場合、非認証アクセスからEdit、Commit及びDeleteイベントハンドラーを保護するため、ModelGlue.xml内に次のXML(セキュリティ機能と果たす"UserMustBeAdministrator"というメッセージをリスンし、イベントへの不正アクセスに対して"SecurityViolation"と呼ぶresult結果を追加する)を使用します。

<scaffold object="contact" type="list,view" />
    <scaffold object="contact" type="edit,commit,delete">
        <broadcasts>
            <message name="UserMustBeAdministrator" />
        </broadcasts>
        <results>
            <result name="SecurityViolation" do="SecurityViolation" redirect="true" />
        </results>
    </scaffold>

MG2:Unity Adding Specific Event Handlers

今回は、Scaffoldタグに特定のイベントハンドラーを追加する方法を紹介します。
(原文タイトル:Adding Specific Event Handlers)

■特定のイベントハンドラーを追加する。

デフォルトで、<scaffold>タグは、5つのイベントハンドラー:table.list, table.view, table.edit, table.commit, table.deleteを追加します。

しかしながら、デフォルトで追加されるこれらのイベントハンドラーの全てを必要としないともあるでしょう。自動的に生成されるscaffoldsのイベントリストを調整するために、ColdSpring.xml内のModelGlueコンフィグいーンのデフォルトScaffoldsプロパティの値リストを変更します。

<property name="defaultScaffolds"><value>list,view</value></property>

Edit, Commit及びDelete Scaffoldsは、まだ利用できますが、scaffoldsタグのTYPE属性を指定する必要があります(以下、参照)。

■TYPE属性を使用する

所与のscaffoldタグにTYPE属性を使用することによって、作成するイベントハンドラーのリストを指定できます。

例えば、誰でもcontacsを参照可能で、管理者だけがcontactを更新可能なアプリケーションがある場合、非認証アクセスからEdit、Commit及びDeleteイベントハンドラーを保護するため、ModelGlue.xml内に次のXML(セキュリティ機能と果たす"UserMustBeAdministrator"というメッセージをリスンし、イベントへの不正アクセスに対して"SecurityViolation"と呼ぶresult結果を追加する)を記述します。

<scaffold object="contact" type="list,view" />

<scaffold object="contact" type="edit,commit,delete">
    <broadcasts>
        <message name="UserMustBeAdministrator" />
    </broadcasts>
    <results>
        <result name="SecurityViolation" do="SecurityViolation" redirect="true" />
    </results>
</scaffold>

MG2:Unity How To Add A Scaffolds

今回は、Scaffoldsの追加方法を紹介します。(原文タイトル:How To Add A Scaffolds)

■Scaffoldsを追加する。

1.データベースにテーブルを追加します。
  現時点では、このテーブル(及びリレーションシップで使用するどのテーブルも)は、プライマリキーとして動作する1つのカラムだけを有しているものとします。

2.テーブルが、1対多や多対多の形態で他のテーブルと結合している場合、そのリレーションシップを<objects>、<hasMany>、<hasOne>及び関連するタグを使ってReactor.xmlファイルに追加します。

3.ModelGlue.xmlに以下のタグを追加します。

      <scaffold object="contact" />

そうすると、次のようなイベントハンドラーを作成します。

1.Contact.List -contactテーブルの全リストを表示
2.Contact.View -特定レコードを読み出し専用で表示
3.Contact.Edit -contactレコードの編集用フォームの提供
4.Contact.Commit -contactレコードのデータベースへの保存
5.Contact.Delete -所定のcontactレコードの削除

MG2:Unity How To Use Scaffolds

前回までModel-Glue:UnityのGDMを紹介してきましたが、今回からScaffoldsを紹介していきます。
(原文:How To Use Scaffolds)

■Scaffoldsの使用方法

・Scaffoldsは、データベースアクセス用基本ユーザインタフェースをとても簡単に作成できるツールです。

*Display a "master list" of records in a table
テーブルのマスターリストレコードの表示

*Display an editing form capable of editing both a record's data and its relations to other tables (one-to-many and many-to-many)
レコードデータと他のテーブルとのリレーションシップ(1対多、多対多)を編集可能な編集フォームの表示

*Display a read-only view of a record
レコードの読み出し専用ビューの表示

*Update a record's data
レコードデータを更新

*Delete a record
レコードの削除

Scaffoldsを使用し、Scaffoldsが生み出すコードの修正することを適切に学習することによって、データベース制御タスクの開発時間を大幅に削減できます。

MG2:Unity Using modelglue.GenericDelete

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

modelglue.GenericDelete

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルから特定のレコードを削除しようとします。

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

1.Object (必須) -レコードを削除したいテーブル名
2.Criteria (必須) -フィルタとして使用するviewstateプロパティリストです。ターゲットテーブル中のカラム名にマッチする名前の値リストが、クエリーの'WHERE'節で使用するフィルタとして使用されます。

例)基本的なGenericRead

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

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

イベントハンドラ名を"contact.delete"として、以下のURLでこのイベントハンドラーを呼び出すと、'ContractId'が'42'であるcontactテーブルの削除結果を得るでしょう。
index.cfm?event=contact.delete&contactId=42

MG2:Unity Using modelglue.GenericRead

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

modelglue.GenericRead

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルから特定のレコードを読み出そうとします。

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

1.Object (必須) -レコードを読み出したいテーブル名
2.RecordName (任意) -レコードデータセットを格納するviewstate名
デフォルトは、Object&"Record"です。
3.Criteria (任意) -フィルタとして使用するviewstateプロパティリストです。ターゲットテーブル中のカラム名にマッチする名前の値リストが、クエリーの'WHERE'節で使用するフィルタとして使用されます。

例)基本的なGenericRead

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

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

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

注:Criteriaを全く指定していないので、新しく空のレコードを返します。

■Viewstate名をカスタマイズする

Contactテーブルに基本的なGenericReadを実行し、Viewstateに特定名をセットするために、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericRead">
    <argument name="object" value="Contact" />
    <argument name="recordName" value="myContact" />
</message>

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

注:Criteriaを全く指定していないので、新しく空のレコードを返します。

■特定のレコードを読み出す

Contactテーブルに基本的なGenericReadを実行し、ViewstateのContactId値でフィルタリングするために、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericRead">
    <argument name="object" value="Contact" />
    <argument name="criteria" value="ContactId" />
</message>

イベントハンドラ名を"contact.read"として、以下のURLでこのイベントハンドラーを呼び出すと、'ContractId'が'42'であるcontactテーブルの読み出し結果を得るでしょう。
index.cfm?event=contact.read&contactId=42

MG2:Unity Using modelglue.GenericList

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

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

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

1.Object (必須) -リストアップするテーブル名
2.QueryName (任意) -クエリー結果を格納するviewstate名
 デフォルトは、Object&"Query"です。
3.Criteria (任意) -フィルタとして使用するviewstateリストです。ターゲットテーブル中のカラム名にマッチする名前リストが、クエリーの'WHERE'節で使用するフィルタとして使用されます。
4.OrderBy (任意) -クエリーをソートするための単一カラム名
5.Accending (任意) -真(true)の場合、昇順になります。偽(false)の場合、降順になります。

例)基本的なGenericList

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

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

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

■Viewstateのをカスタマイズする

Contactテーブルに基本的なGenericListを実行し、Viewstateに特定名をセットするために、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericList">
    <argument name="object" value="Contact" />
    <argument name="queryName" value="aListOfContacts" />
</message>

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

■フィルターを適用する

Contactテーブルに基本的なGenericListを実行し、ViewstateのFirstname値でフィルタリングするために、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericList">
    <argument name="object" value="Contact" />
    <argument name="criteria" value="Firstname" />
</message>

イベントハンドラ名を"contact.list"として、以下のURLでこのイベントハンドラーを呼び出すと、'firstname'が'Fred'であるSELECT結果を得るでしょう。
index.cfm?event=contact.list&firstname=Fred

■ソート

Lastnameを昇順でソートされたContactテーブルの基本的なGenericListを実行するには、次のように<message>タグを<event-handler>タグに追加します:

<message name="modelglue.GenericList">
    <argument name="object" value="Contact" />
    <argument name="orderBy" value="Lastname" />
</message>

降順にするには、次の引数を追加します:
<argument name="ascending" value="false" />

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

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

MG:Unityジェネリック・データ・メッセージ(GDMs)

今回は、ジェネリック・データベース・メッセージ(GDM)の使用方法について、紹介します。(原文タイトル:How To Use Generic Database Messages)

Model-Glue:Unityの最も無視できない特徴の1つは、自動化されたデータベース能力です。Reactorフレームワークを使用することによって、Model-Glue:Unityは、一般的なデータベースタスクの創造-単一テーブルCRUD(Create、read、update、delete)と実行を自動化します。

Reactorフレームワークは、"Generic Database Messages" (GDMs)をリスンするコントローラ("DataController")を自動的にロードすることによって、このことを達成します。GDMsは、ModelGlue.xmlの中で自動的に呼び出し可能なコマンドセットです。

また、GDMsは、<scaffold>タグを通して作成されるイベントハンドラに対するすべてのデータ・アクセス機能を提供します。

DataControllerがリスンするように構成されている4つのGDMsは、以下の通りです:

1.modelglue.GenericList

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルからレコードをリストアップしようとします。

2.modelglue.GenericRead

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルから特定レコードの読み出しようとします。

3.modelglue.GenericCommit

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

4.modelglue.GenericDelete

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

MG:Unity カスタムコンフィグレーションの追加方法

今日から数回に分けて、Model-Glue:Unity(MG2:Unity)のマニュアルのうち、Ver1.1から大きく変更・追加されたところを紹介していきます。

第一回目は、ColdSpring.xmlを利用したカスタムコンフィグレーション方法についてです。
(原文タイトル:How To Add Custom Configuration)
メールサーバの情報を、Coldspring.xmlにbean定義し、メッセージリスナー内でこれを呼び出す方法を紹介しています。

アプリケーションでは、しばしばデータソース名かメールサーバなどの何らかの構成情報を知る必要があります。 例として、アプリケーションで<cfmail>タグを使用する必要があり、ファイル中にサーバ名、ユーザ名およびパスワードを、ソースコードの外部に保存する場合を仮定しましょう。このことは、とても良い習慣です。

(1.xからのアップグレードでない)どのModel-Glue: Unityアプリケーションには、全てのアプリケーション構成情報を集中管理するためのColdSpring.xmlがあります。

このColdsping.xmlファイルは、数組の<bean>タグで構成されています。 各々のbeanは、Model-Glueアプリケーション内で問い合わせ可能なCFCを表しています。

Model-Glue:Unityには、一般的な構成の雑事に適したbean(ModelGlue.Bean.CommonBeans.SimpleConfig)があります。そのbeanは、setConfig()ファンクションを通して構造体をセット可能な単一プロパティ(のコンフィグ)を持っています。 この構造は、アプリケーション構成情報を「登録」するのに役立ちます。beanのgetConfigSetting()ファンクションに検索するプロパティ名を与えることによって、各々の設定値にアクセスできます。

これをメールサーバのシナリオに適用するために、ColdSpring.xmlに以下を加えます:

<bean id="mailConfiguration" class="ModelGlue.Bean.CommonBeans.SimpleConfig">
    <property name="config">
        <!-- In Coldspring, a "map" represents a struct -->
        <map>
            <entry key="mailserver">
                <value>mail.mydomain.com</value>
            </entry>
            <entry key="username">
                <value>smtpUsername</value>
            </entry>
            <entry key="password">
                <value>smtpPassword</value>
            </entry>
        </map>
    </property>
</bean>

このXMLベースの構成情報をColdSpring.xmlに追加した後に、この構成設定を使用するのは簡単です。以下に、<cfmail>タグで構成設定を使用する例のリスナー機能を示します:

<cffunction name="sendEmail" access="public" returnType="void" output="false">
    <cfargument name="event" type="any">

    <cfset var message = arguments.event.getValue("message") />
    <cfset var subj = arguments.event.getValue("subj") />
    <cfset var to = arguments.event.getValue("to") />

    <!--- Get mail configuration --->
    <cfset var mailCfg = getModelGlue().getBean("mailConfiguration") />

    <!--- Use the mail configuration to send mail --->

    <cfmail
        to="#to#"
        subject="#subject#"
        server="#mailCfg.getConfigSetting("mailserver")#"
        username="#mailCfg.getConfigSetting("username")#"
        password="#mailCfg.getConfigSetting("password")#"
        >
        #message#
    </cfmail>

</cffunction>

ログイン

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

    パスワード:

更新ブログ

最近のトラックバック

Google

ブログ powered by TypePad
Member since 04/2005