2010年8月25日水曜日

ExtJS-97 ヘッダを拡張したらスクローラがでなくなった

気がつくと5日から更新してない。
JSは触ってたけどExtJSは触ってなかった。
GoogleMapAPIを触ってみたみたくてそっちで遊んでました。
あとはTwitterAPIで遊んでみたく。
それで慣れたらyouRoomAPIとか。youRoom、メンバーの食いつきはうまいこといったんだけど
その後、うまく展開できなかったから次の策を考えなければ。
あとは。Hyper Estraierってのを@Mt_blue81さんに聞いたのでそちらも。
やりたいことだらけですね。本当に。仕事じゃないから楽しいのかな?仕事でも楽しいんだろうな。

今年も残りわずかなので資格も取らなきゃいけなそう。
ExtJsとも疎遠になってしまうのかな。。
明日は勉強会。
================
さて、ExtJs-56 階層構造のつぶしこみ5ガントチャートのラインとカンレダへっだでやってたことをほじくりかえしたら
スクローラが消えてでないことがわかった。
もう一年前のことをもう一度掘り起こして実装の続きをするってわりときびしいw


このヘッダはロード後のコールバック内で動的にヘッダセル内に構築してて
その際に三行分に拡張するものだからスクローラがそのまま下に下がって
Gridの枠外にでてしまっていた。
仕方ないのでGridViewのコードを引用してヘッダをレンダリングするときに
スクローラを無理やり取得してヘッダ拡張分を引いてやることにした。
もうマジックナンバー埋めちゃってるけどw。

    
//ヘッダの描画
me.hedderRender = function() {
    var me = this,
    Element = Ext.Element,
    grid = me.getView().grid;
    el = Ext.get(grid.getGridEl().dom.firstChild),
    mainWrap = new Element(el.child('div.x-grid3-viewport')),
    mainHd = new Element(mainWrap.child('div.x-grid3-header')),
    scroller = new Element(mainWrap.child('div.x-grid3-scroller'));

    //YMD用カラムへYMDのテーブル構成をAppend
    var headercellElement = me.getView().getHeaderCell((me.config.model.configGenerator.columnModelConfig.length - 1));
   headercellElement.innerHTML = me.ganttManager.generateGanttHeader();

    //水平スクローラが押し出されてしまうのでヘッダ、スクローラともに明示的に再計算する
    headerHeight = mainHd.getHeight();
    scrollHeight = grid.getSize(true).height - ((headerHeight*2)-4);
    scroller.setHeight(scrollHeight);
}

まぁ、でるようになったっていうことで。









ねよ。

2010年8月5日木曜日

sql久しぶりすぎて四苦八苦

もともとSQLではじょいんしてしゅとくしてとか
うにおんしてとか基本的なところをやった程度だった。
で、以前いろいろ調べて参考にさせてもらって作ったものはSSDの事故により紛失。

先日から作り直すことになった。
ほしい情報は
ID、ネストレベル、パス。
なんかうまくかけないし、三つに分かれちゃったけど、
親ID、IDな階層構造を持つテーブルから取得するストアドができたかな。

疲れているときのビールでふらふらしながらコードを書くのは面白い。

元はこちら。

--情報取得

CREATE PROC [dbo].[S_showHierarchy]
(
 @tableName nvarchar(256),
 @parentFieldName nvarchar(256),
 @childFieldName nvarchar(256),
 @rootId int,
 @idpath nvarchar(256) OUTPUT
)
AS
BEGIN
 SET NOCOUNT ON
 --テンポラリテーブル作成
 CREATE TABLE #hierarchy(id int NOT NULL,level int NOT NULL,idpath nvarchar(256))
 
 --呼び出し
 EXEC [dbo].[S_createHierarchyTable]
  @tableName = @tableName,
  @parentFieldName = @parentFieldName,
  @childFieldName = @childFieldName,
  @rootId = @rootId,
  @idpath = @idpath OUTPUT
 
 --最後に返却用にSELECTを実施
 SELECT * FROM #hierarchy
END


--テーブル作成

CREATE PROC [dbo].[S_createHierarchyTable]
(
 @tableName nvarchar(256),
 @parentFieldName nvarchar(256),
 @childFieldName nvarchar(256),
 @rootId int,
 @idpath nvarchar(256) OUTPUT
)
AS
BEGIN
 SET NOCOUNT ON
 DECLARE @minID int, @whereToken nvarchar(1024)

 --指定親ID取得
 SET @whereToken = @childFieldName+' = '+STR(@rootId)
 EXEC dbo.S_getHierarchyMinID @tableName,@childFieldName,@whereToken,@minID OUTPUT
 --ネストパスの生成
 SET @idpath = @idpath + '-' + CONVERT(nvarchar,@minID)
 --PRINT REPLICATE('-', @@NESTLEVEL * 1) + STR(@minID) + STR(@@NESTLEVEL) + @idpath
 PRINT CONVERT(nvarchar,@minID) + '|' + CONVERT(nvarchar,@@NESTLEVEL) + '|' + @idpath
 
 --テンポラリテーブルに挿入
 INSERT INTO #hierarchy VALUES(@minID,@@NESTLEVEL,@idpath)
  
 --■次の階層の準備処理 --
 --指定親ID配下の最小値取得
 SET @whereToken = @parentFieldName+' = '+CONVERT(nvarchar,@rootId)
 EXEC dbo.S_getHierarchyMinID @tableName,@childFieldName,@whereToken,@minID OUTPUT
 --SET @EmpID = (SELECT MIN(EmpID) FROM dbo.Emp WHERE MgrID = @Root)
 
 WHILE @minID IS NOT NULL
 BEGIN
  --再帰
  EXEC dbo.S_createHierarchyTable @tableName,@parentFieldName,@childFieldName,@minID, @idpath
  SET @whereToken = @parentFieldName+' = '+CONVERT(nvarchar,@rootId)+' AND '+@childFieldName+' > '+CONVERT(nvarchar,@minID)
  EXEC dbo.S_getHierarchyMinID @tableName,@childFieldName,@whereToken,@minID OUTPUT
 END
 
END


--最小ID取得

CREATE PROC [dbo].[S_getHierarchyMinID]
(
 @tableName nvarchar(256),
 @childFieldName nvarchar(256),
 @whereToken nvarchar(256),
 @minID int OUTPUT
)
AS
DECLARE @SqlQuery nvarchar(1024)
SET @SqlQuery = '' + 
 'SELECT @minID = MIN('+@childFieldName+')' +
 ' FROM '+@tableName+
 ' WHERE '+@whereToken + ''
--PRINT @SqlQuery
EXECUTE SP_EXECUTESQL @SqlQuery,N'@minID int OUTPUT', @minID OUTPUT

2010年8月3日火曜日

気分だけMac














気分だけMacにしてみた。

キーボードはさっくりと スタート→デバイスとプリンタ→デバイスの追加
でキーボードの電源いればOK。

トラックパッドはこちらのサイトにお世話になりました。
私の場合、64bit版でしたが、とっても丁寧にかかれていたので迷わずできました。

感謝です。

こちらもドライバ入れた後、スタート→デバイスとプリンタ→デバイスの追加から・・・
トラックパッドの電源入れてOKです。

お金、なくなりましたとさ。

2010年8月2日月曜日

気合いが入る


今週は一人暮らし。コード組むぞと気合いいれる。みんな実家だし、環境出しっぱなしでもオーケー。だからキーボードをデスクトップから引っこ抜いてきた。がんばるぞ。

2010年7月30日金曜日

またプロジェクト作り直す

ExtJsを勉強し始めて、そのうち遊びになって
これでもう四回目のプロジェクト作り直し。

よく飽きないもので。。
今年に入ってからの汎化作業は右に左に揺れるはするものの、
エイヤときめて先に進むという方法をとってきたから今回の
プロジェクト作り直しも良い方向に進むんだろうと信じて。

フォルダ構成はこんな感じで行こう。

■フォルダ構成
プロジェクトフォルダ
├App(アプリケーションフォルダ) 
│ ├Client
│ │ └各テーブルごとのフォルダとコンフィグファイル★
│ └Server
│   └各テーブルごとのフォルダとサーバサイドページ★
├App_Code
│ ├BasePage(ページ基底クラス)
│ ├DataTierAP(アプリケーション層DataTier)
│ ├DataTierAutoGenerate(自動生成層DataTier)★
│ ├DataUtil(データ加工ヘルパ)
│ ├JsonUtil(Json用加工ヘルパ)
│ └SQL(自動生成SQL←保管用)★
│ 
├extjs(ExtJs関連フォルダ:ExtJs/Sencha絡み)
│ ├ext(最新版のバージョンを排除して配置)■
│ ├sencha(最新版の-touchXXXXを排除して配置)■
│ ├extWrapper.css(ExtJsラッパ用CSS)
│ └extWrapper.js(ExtJsラッパ用)

├Fwx(ExtJS拡張層)
│ ├Omega(今後ここにomegaがくる予定??)●
│ └Crud(Crudに特化した拡張層)
│  ├Config.js(Configクラスの基底クラス)
│  ├ConfigFactory.js(ConfigFactoryクラスの基底クラス)
│  ├EditorGrid.js(EditorGridクラスの基底クラス【M】)
│  ├Form.js(Formクラスの基底クラス【V】)
│  ├FormControl.js(Formクラスの基底クラス【C】)
│  ├FormModel.js(Formクラスの基底クラス【M】)
│  ├GridContainer.js(Crudのコンテナクラス)
│  ├GridControl.js(Formクラスの基底クラス【C】)
│  └GridModel.js(Formクラスの基底クラス【M】)

├Owx(Apx)(アプリケーション用拡張層:基本的にFwx、ExtWrapperを拡張)
│ ├Controls
│ │└各種システム固有のコントロールクラス群
│ │
│ ├Utils
│ │└各種システム固有のロジッククラス群
│ │
│ └Crud
│  ├Config.js(Configクラスの基底クラス)
│  ├ConfigFactory.js(ConfigFactoryクラスの基底クラス)
│  ├EditorGrid.js(EditorGridクラスの基底クラス【M】)
│  ├Form.js(Formクラスの基底クラス【V】)
│  ├FormControl.js(Formクラスの基底クラス【C】)
│  ├FormModel.js(Formクラスの基底クラス【M】)
│  ├GridContainer.js(Crudのコンテナクラス)
│  ├GridControl.js(Formクラスの基底クラス【C】)
│  └GridModel.js(Formクラスの基底クラス【M】)

├Test(どーすっかなぁ)

└DataTierGeneratorhogehoge.exe(仮称)★

あー3.3だけDLして寝よ。
あっ、コード書いてないorz。。

2010年7月23日金曜日

ExtJs-96 サーバサイドコードを吐き出す

眠くなってさいごはかなりぐだぐだになったけどようやく
吐き出されるコードがそろった。
適当なテーブルをいくつか作って動作検証しなくちゃね。
これで先日のクライアント側のしくみと組で動いてくれればわずらわしい足回りから
ようやく一旦卒業できる。もう少し。もう少し。

2010年7月22日木曜日

埋め込みリソース

先日からサーバサイドの実装に入った。ものすごく久しぶりすぎて書き方忘れていたり。
internalとかでてこられてあれ?なんだっこの修飾子?とか戸惑いながら
ジェネレータのコードを拡張するだけなので楽チンなんだけど、、

フォーマットファイルを埋め込みリソースとして
アクセスしたかったののでやりかたわかんなかったから残しておこう。

Assembly.GetExecutingAssembly().GetManifestResourceStream(name))

これをStreamReaderにかましてReadToEndでよみだすっていう。
らくちんだねぇ。どっとネットって。
ちなみに
埋め込みリソースはファイルへの設定が少し必要で。
ビルドアクションに埋め込まれたリソースってやってやる。それだけ。

あとはリソース内部にちりばめられたキーワードに対してデータをリプレイスすれば
サーバサイドのコードができあがりってわけですね。

CreateFormはできたのであとはチョコっとじっそうしたらOK.

残すはクライアントサイドのConfigクラスのJson生成。

来週くらいには素地はできそうww。たのしみだ。

node + ejs + Socket.io のサンプル

まずい。。 一年間、一回も更新してない!!! つまり、、 趣味の時間がほぼ皆無ということの現れです。 業務と子育てに追われた一年でしたね。。。。。 危なく年をこすところだった。あぶない。なぶあい。 話を変えて。 今月初旬に 社内でちょっとしたプレゼンをする事に...