2009年3月22日日曜日

ExtJs-33 ComboBoxのデータ

転職活動でばたばたで参加してなかった
ものすごく久々にExtJS勉強会に参加しました。
-----
WorkShopにもそろそろ復活しようかと。
-----
さて、今日はビール片手にえらく久々にExtJSをさわってまして、
今日はComboboxを。DBから持ってきた値で実装。と、例のごとくです。
ユーザ情報のマスタとプロジェクト情報のマスタと二つほど
Comboboxコントロールを作ってました。
先日買った本をよんで、ふむふむ。と。
で、
-----

Commboboxのコンフィグで

displayField
valueField

なんてあるから

あ、表示はdisplayField
で選択されたデータの紐付けは
valueField
で、これでサブミットされる値はOK。ですな。

なんて、早とちり。。
実際、サブミットされるのはtype=textになってて選択
表示されているテキストになってた。
で、あれれ?選択されたIDをサブミットしたいんだけど?
となるわけですが、

http://extjs.com/forum/showthread.php?p=296133

こちらでちゃんと解説していただいてました。。。
hiddenNameにサブミットする名前を設定しないといけないみたいです?

valueField
はサブミットする際の値となるフィールドを指定する。
が正解なようで。

//----------------------------------------
// record
//----------------------------------------
System.Common.Form.ProjectComboBoxRecord = [
{name: 'id', mapping: 'ID' },
{name: 'name', mapping: 'プロジェクト名' },
{name: 'summary', mapping: 'プロジェクト名' }
];
//----------------------------------------
// store
//----------------------------------------
System.Common.Form.ProjectComboBoxStore = new ExtWrapper.Store(
{
proxy: new ExtWrapper.Proxy({
url:'/PersonalGardenSolution/SystemClasses/readControlsData.aspx'
}),
reader: new ExtWrapper.Reader({
root: 'rows',
totalProperty: 'rowsCount',
id: 'ID'
},
System.Common.Form.ProjectComboBoxRecord
)
});
//----------------------------------------
// combo実装
//----------------------------------------
System.Common.Form.ProjectComboBox = Ext.extend( System.Common.Form.ComboBox,
{
tpl: '
{name}
',
typeAhead: true,
store : System.Common.Form.ProjectComboBoxStore,
initComponent : function()
{
this.valueField = 'id';
this.displayField = 'name';
System.Common.Form.ProjectComboBox.superclass.initComponent.call( this );
this.store.load({
params:{category:'SystemCommonFormProjectComboBox'}
});
}
});
Ext.reg('SystemCommonFormProjectComboBox', System.Common.Form.ProjectComboBox );

で、使用するほうでは、
{ xtype : 'SystemCommonFormProjectComboBox', fieldLabel:"XXXX", hiddenName: "XXXX", width:265 }

みたいな。
おお、できたぞ。

2009年3月13日金曜日

まいくろそふとなまうす

会社を辞めるときに
会社の先輩からグレイとなマウスをもらった。

本当にうれしかった。
ので記載。

先日買ったFILCOのキーボードの青色LEDとあう。
画像はまた今度。

とったので掲載。


ExtJs-32 DataTierGenerator(設定について)

DB周りを
DAAB化するってことで入れたのだけど、
実際の設定がわからん。
ぐぐったら@ITでヒット。
やってみた。

EnterPriselibraryConfigurationを起動
(XMLクリエータ的な感じなのかな。。。)
でApplicationを追加して
Applicationツリー配下にDAABを追加して。
ConnectionStringを編集して(これはいままで使用していたやつを。。)

保存。

ここからが
かなりいけてない作業のだが
動かすことを最重要目的としているため、
出来上がったXMLファイルの内容を
一つ一つ丁寧に
webConfig.xml
に移植した。

このあたり、もとのConfig周り含めて仕様をぜんぜん理解してないな。
だからこんな泥臭いことをやってる。
よろしくない。

おいといて。
で、参照の追加で.NETタブのなかにいろんなApplicationBlockが
あるのでDAAB、DAABデザイナを登録しておく。
デザイナがひつようかどうかのきりわけはしてない。し、
これはとりあえず後日。

でDataTierGeneratorで作成されたストアドも登録して。。
実行。。

おー、動いた。

ツールのプロトタイプがかなり立ち上がり早くなります。
よかった。
ってことでDAAB系列についてはいろいろ掘り下げる必要ありだけど
いったん収束で。
Gird+編集用Dlgのパターン実装におけるCRUDは
これでおおむねOKラインとして終えます。
いままで旧バージョンでセコセコしてたのがかなーり便利に。
DataBaseクラスのおかげで自力実装部分もかなり減った(闇に葬られた)し。
メンテが楽で。

いつになるかわからないけど次はLoggingのAplicationBlockをやろう。。
よりいっそうツール作成意欲がわいた。

でも時間が本当にとれないなぁ。。

ExtJs-32 DataTierGenerator(文字コード)

結局ニューバージョンでstreamWriter.WriteLine部分でも
てこ入れしなけりゃいけない。
UTF-8ボム無しになるのはなんとかならんものか。。。と。
デフォルトコンストラクタだとBOMなしなので。。。
結局StreamWriterのコンストラクタを変更してUTF8指定してBOM付で
吐き出すように変更して使用させてもらった。
これでソースはOK。

2009年3月8日日曜日

ExtJs-31 DataTierGenerator(DBの照合順序)

で、いよいよ
DataTierGeneratorでじぇねレートしなおうそうと。。
するとだね。
---------------------------

---------------------------
equal to 操作の "Latin1_General_CI_AI" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。
---------------------------
OK
---------------------------

なんて出るんです。。
なんのこっちゃと思い、Collationの確認するも、masterDBや自分の作ったDBも"Japanese_CI_AS"よ。
うーんと。。と、なるのですが、
テーブル情報を取得するSQL文の中で
INFORMATION_SCHEMA.TABLES

FN_LISTEXTENDEDPROPERTYで作成した拡張情報を
LEFT JOINしてる部分において(equal to)って言ってるからそう判断しただけですが
どうやらFN_LISTEXTENDEDPROPERTYのCollationがLatin1_General_CI_AIで作成されている?
ようで、
COLLATEでキャストしました。ら、うまくいった。

ちなみに確認用に抜粋してみてやったものはこちら。

select * from INFORMATION_SCHEMA.TABLES
LEFT JOIN ::FN_LISTEXTENDEDPROPERTY('ProgrammaticAlias', 'user', 'dbo', 'table', default, default, default) AS ExtendedProperty ON INFORMATION_SCHEMA.TABLES.TABLE_NAME = ExtendedProperty.objname COLLATE Japanese_CI_AS

「COLLATE Japanese_CI_AS」
これね。
ちなみに
ジェネレートする際のSQL文についても同様。に
「COLLATE Japanese_CI_AS」を。



#追記(ぱっと見わからなかったのでまよったため)
・ソリューション構成のSQLフォルダ内にある、
・テーブル情報を取得するSQLの末尾に
「△COLLATE△Japanese_CI_AS」を追記する。

ExtJs-30 DataTierGenerator(EnterpriseLiblary)

で、
そういやDataTierGeneratorってバージョンアップしとらんのじゃんろうか?
と具具って見たら。。。
してました。

2.1.1.スナップショット見たら。VB.net対応してらっしゃる。
自前でやろうかと思ってたところだったから。
というか、
2006年12月って。
俺のバージョンドンだけ古いんだ?
まぁ、もともと引っ張りだしてきた自宅の引き出しがふるかったからなぁ。

で、

EnterPriseLiblary仕様になっててこれまたグレイト。
早速、2008向けのEnterPriseLiblaryをインストール。
いよいよEeePCも本格装備になってきた。
http://www.microsoft.com/downloads/thankyou.aspx?familyId=90de37e0-7b42-4044-99be-f8ecfbbc5b65&displayLang=en

ExtJs-29 DataTierが古かった

いろいろあってDataTierGeneratorのバージョンをアップした。
のでそのいきさつを。


古いバージョンでやってたころ、下記のようなことが起きていた。
日本語テーブル名、フィールド名を使用しできるように
メンバを_で。
と、
自前のSQLAccessクラスに変更したものの、
これは以前のVSの環境で、2003時代だった。

で、生成されたものを2008環境(EeePCは2008)
ではコンパイルできず。
あれれ?
UTF-8だろうがよー。
何でだよー。
とおもい
テキストエディタでも確認。
確認?すると?おや。
BOMなしジャンよ。。
VS2008だとどうやらBOM付でないとこんぱいるしてくれないのか。。

ってことはDataTierGeneratorのStreamWriterに文字コード指定してやらねばいかん。

セコセコと作って
自前のDBアクセスクラスで。、、、

で、そんな面倒なことやってられるか。
やはりDAABでやるべきなんだ。
と。

2009年3月7日土曜日

ExtJs-28 DateField

formatぱらめーたに Y/m/d
で、
実データはDateTimeのToStringでもどすため、 Y/m/d G:h:s
となる。

ので反映されない。formatにY/m/d G:h:s
って書くと 2008/12/31 0:00:00となってしまうし、..
これを自力でフォーマットするのはあほくさい。
調べたら。
あった。
altFormatぱらめーた。
これにY/m/d G:h:sを指定してOK!!
よかったー。