2011年5月27日金曜日

JavaScript、CSSファイルをまとめて読込み

1つのJavaScriptファイルの読込みで、複数のJSファイル、CSSファイルを
まとめて読込む方法


 サンプル例:
  親PGのHEADタグ内で、aaa.jsを読み込み指定
   ⇒ aaa.js内で、bbb.js、ccc.js、xxx.css、yyy.cssを読み込み

---------------------------------------------------------------------
【親PG】

 <script type="text/javascript" src="aaa.js"></script>

---------------------------------------------------------------------
【aaa.js】
 function include(stFile)
 {
  var script = document.createElement('script');
  script.src = stFile;
  script.type = 'text/javascript';
  script.defer = true;
  document.getElementsByTagName('head').item(0).appendChild(script);
 }
 include('bbb.js');
 include('ccc.js');

 document.write('xxx.css');
 document.write('yyy.css');
 

2011年5月25日水曜日

ユーザーコントロール:runat=server を含む form タグの内側に置かなければ成りません。

ユーザーコントロールにコントロールを入れると表題のようなエラーが発生することがある。
エラー回避のために下記コードを追記すればOK。

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)

End Sub

ユーザ-コントロールの動的追加

ユーザーコントロールを動的に作成する

Dim usrcontrol As hogehoge = CType(LoadControl("hogehoge.ascx"), hogehoge)
Page.Controls.Add(usrcontrol)

コントロールにIDを指定することも可能
usrcontrol.ID = id

2011年5月20日金曜日

ASP.NET NPOI セルの書式設定を行う上での注意点

NPOIというライブラリを使用すると、サーバーサイドでのExcelファイルの作成が簡単に出来る(NPOIについてはこちらを参照 NPOI使用方法 。Javaで作られたPOIの.NET版)。

おそらくPOIにもいえることだが、セルの書式設定をする際には注意が必要。

同じ書式のセルのCellStyleは同一とみなされる模様

同じ書式が設定されているセルのCellStyleは同じオブジェクトとなる。例えば、同じ色のついているセルのうち、ある一箇所にだけ罫線をつけたいといった場合、下記のようにすると同じ色の付いている全セル(同じスタイルの全セル)に罫線がついてしまう
'※targetCellはHSSFCellオブジェクト
Dim boarderdCellStyle As CellStyle = targetCell.CellStyle
boarderdCellStyle.BorderBottom = CellBorderType.THIN
'→targetCellだけでなく、同じ色のセル全てに罫線が付く

これを回避するには、以下のようにする必要がある

'※hssfはHSSFWorkbookオブジェクト
Dim boarderdCellStyle As CellStyle = hssf.CreateCellStyle
boarderdCellStyle.CloneStyleFrom(targetCell.CellStyle)
boarderdCellStyle.BorderBottom = CellBorderType.THIN
'→新しいCellStyleを作成し、既存のスタイル設定をコピーする。その後に書式を設定

CellStyleの適用はこうしないと既存のスタイルが上書きされるか、他の同一スタイルのセルがダメージを受けることになるので、注意が必要。
※ただ、作りすぎるとExcelを開く際「書式が多すぎます」といったようなエラーになる。いったん作成した書式は使いまわしたほうが吉(Dictionary(Of String,CellStyle)というような感じで格納しておくなど・・・)。

なお、なぜかFontについてはCloneのメソッドが存在しない?ため、手動でCloneに当たる操作(プロパティをコピーしていく)を行う必要がある。

ASP.NET サイト内のページのURLを作成する

サイト内のページ(aspxファイル)のhttpアドレスを作成したい場合は以下のようにする。
ファイル出力をする際リンクを埋め込みたい、などといった場合などに使用できる


Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped) + _
ResolveUrl("./hoge.aspx")

前半部分でhttp://サーバー名・・・を作成していて、後の部分でサイト内ページのアドレスを作成している。
※ASP.NET MVCではまた違う可能性がある(というよりControlerでルーティングするはずなので)また違う可能性アリ

2011年5月17日火曜日

VBScriptでメール送信 - Microsoft Collaboration Data Objects

Microsoft Collaboration Data Objects を利用することで、VBScriptからメール送信する機能を簡単に実現することが可能

メール通知によるプッシュ型の業務プロセス向け


<サンプル>

'---定数---
Const MSCDOCONF = "http://schemas.microsoft.com/cdo/configuration/" '固定URI
Const SMTPSRV = "xxx.xxx.xxx.xxx" 'SMTPサーバ:IP or FQDNで指定
Const SMTPPORT = 25 'ポート番号

'---メール送信---
function cdo_mail_send( _
byVal stSubject,byVal stFrom,byVal stTo,byVal stCc,byVal stBcc,byVal stBody,byVal stTempfile)
  on error resume next

  Set oCDO = CreateObject("CDO.Message") '「Collaboration Data Objects」作成

  oCDO.Subject = stSubject '件名
  oCDO.From = stFrom '送信元アドレス
  oCDO.To = stTo '送信先アドレス(複数指定はセミコロン区切り)

  if stCc <> "" then oCDO.Cc = stCc 'Ccアドレス
  if stBcc <> "" then oCDO.Bcc = stBcc 'Bccアドレス

  oCDO.TextBody = stBody '本文:テキスト形式
  'oCDO.HTMLBody = stBody '本文:HTML形式

  if stTempfile<>"" then oCDO.AddAttachment(stTempfile) 'ファイル添付(物理パス指定)

  with oCDO.Configuration.Fields
   .Item( MSCDOCONF & "sendusing" ) = 2 '固定値:SMTPポートに接続して送信
   .Item( MSCDOCONF & "smtpserver" ) = SMTPSRV
   .Item( MSCDOCONF & "smtpserverport" ) = SMTPPORT
   .Update
  end with

  oCDO.Send 'メール送信

  Set oCDO = Nothing '破棄

  if err.number <> 0 then
   '(エラー処理)
  end if

end function

2011年5月12日木曜日

ASP.NET デバッガが機能しない(ブレークポイントは、現在の設定ではヒットしません。)

いつの間にか起こる悪魔のエラー。設定したブレークポイントが無効になり止ってくれなくなる。
そこには、「ブレークポイントは、現在の設定ではヒットしません・・・」という謎のメッセージ。

一応この現象を解消することが出来たので、やったことをメモ。
・Webサイトのビルド
→意味無し
・VisualStudio再起動
→意味無し
・PC再起動(おまじないのようなものだが・・・)
→意味無し
・開いているファイルを一旦全て閉じ、VisualStudio再起動後再度開く
→再び機能するようになった!


どうやらファイルのバージョンが古いということを言っているようなので、一旦ファイルを閉じて
開くのは効果があるようだ。

2011年5月10日火曜日

ASP.NET jQueryでラジオボタンリストの選択されている値を取得

ASP.NETのラジオボタンリストのコントロールは非常に扱いづらい形でHTML出力されるため、JavaScript側でその値を取得するには非常に骨が折れる。

ASP.NET上
<asp:RadioButtonList ID="rbltest" CssClass="xxxx" >

実際のHTML

<span id="rbltest" class="xxxx">
  <input id="rbltest_0" type="radio" name="(配置場所で変化?)$rbltest" value="1"     /><label for="rbltest_0">①<label>
  <input id="rbltest_1" type="radio" name="(配置場所で変化?)$rbltest" value="2" /><label for="rbltest_1">②<label>
  <input id="rbltest_2" type="radio" name="(配置場所で変化?)$rbltest" value="3" /><label for="rbltest_2">③<label>
</span>

→SPANタグで囲われ、しかもCssはそのSAPNにしかつかない。idは個別に設定され、nameも不定になるようなので、チェックされているものの値の取得が非常に困難(場合によってはnameは使えるかも)。


jQueryでの値の取得
$("span[id='rbltest'] > :input[type='radio']").each(function () {
                if ($(this).attr("checked") == true) {
                    alert($(this).val(););
                }
            });

→SPANをまず検索し、その子要素であるラジオボタンについて、チェックがついているものを取得する

function化したものを追記・・・

function getCheckedRadioButtonList(id){
 var val = "";
 $("span[id='" + id + "'] > :input[type='radio']").each(function () {
  if ($(this).attr("checked") == true) {
      val = $(this).val();
  }
 });
 return val;
}

-------------------------------------------------------------
追記
実はRadioButtonListはVerticalとHorizontalで出力される方法が異なり、HorizontalはTableタグ
で囲まれるため上記方法では対応できない。
そのため、最終的には以下のようにした


function getCheckedRadioButtonList(id) {
    var val = "";
    $("#" + id).find(":radio").each(function () {
        if ($(this).attr("checked") == true) {
            val = $(this).val();
        }
    });
    return val;
}

Oracle PL/SQL XMLデータをFunctionで受け取る2

前回はXMLDOMを使用した形式だったが、Xpathを使用しての処理も可能。


・特定ノードの件数を取得(件数をlvCountに設定・XMLTYPEのデータをpvXmlとする)
 SELECT count(*) INTO lvCount FROM TABLE(XMLSequence(pvXml.extract('/STUDENTS/STUDENT')));
  各要素へは以下のようにアクセス可能
FOR i IN 1 .. lvCount LOOP
  pvXml.extract('/STUDENTS/STUDENT['|| i || ']');
END LOOP;

・テキストノードの値取得(注意事項あり。他記事参照)
pvXml.extract('/STUDENTS/STUDENT/NAME/text()').getStringVal();
・属性値の取得
pvXml.extract('/STUDENTS/STUDENT/@ID').getStringVal();
※なお、単純なextractの結果はXMLTYPEとして扱われる。複数の形式のデータが混在する場合は、これを使用し切り分けることが可能
xmlTeacher := pvXml.extract('/PEOPLE/TEACHERS');
xmlStudent := pvXml.extract('/PEOPLE/STUDENTS');








2011年5月6日金曜日

Google AJAX Feed API - Dynamic Feed Control Wizard

RSSフィードの検索~自サイト設置用のソース生成まで出来て便利!

http://www.google.com/uds/solutions/wizards/dynamicfeed.html


生成されたソースは、オプションをいじることでカスタマイズ可

var options = {
numResults : 12, // ①
displayTime : 3000, // ②
fadeOutTime : 2000, // ③
pauseOnHover : true, // ④
linkTarget : google.feeds.LINK_TARGET_BLANK, // ⑤
stacked : true,
horizontal : false,
title : "RSS feed"
}

①1サイトあたりの表示件数
②1つの記事を表示する時間(ミリ秒)
③記事の表示切替時間(ミリ秒)
④マウスオーバーで記事切替を停止する/しない
⑤記事クリック時の表示先Window(自分自身:google.feeds.LINK_TARGET_SELF)

2011年5月2日月曜日

Oracle ソース内の全文検索方法

プロシージャ、ファンクション等のソース内を、指定した単語で全文検索する方法

【例】
「あいうえお」と記述しているソース名、オブジェクトタイプ、行番号、ソース行内容を一覧表示

 select name,type,line,text   from user_source
  where text like '%あいうえお%'   order by 1,2,3;