JScriptからIEを操作し、Yahoo!JAPANで"ほどよくしっかり"を検索させてみました。
ちゃんと、このブログが先頭に表示されました。
JScriptからIEを操作できるということは、標準入力と標準出力を使ってIEを操作できるということで、諸々の自動化が捗るかもしれないということです。興味深い。
以下、コードです。
2014年9月15日月曜日
2014年9月8日月曜日
.NETで改行を含む文字列を組み立てるならStringWriterがおすすめ
プログラムの実行時に文字列を組み立てるなら、StringBuilderクラスを使うのが定石です。しかし、改行で区切った文字列を組み立てようとすると、どうにも見苦しくなってしまいます。
そんなときはStringWriterクラスを使うのがお勧めです。
コードがスッキリ見やすくなりました。
参照
StringWriterクラス
StringBuilderクラス
var sb = new StringBuilder() .Append("select *").Append(Environment.NewLine) .Append(" from Table1").Append(Environment.NewLine) .Append(" where Column1 = @Value1").Append(Environment.NewLine);
そんなときはStringWriterクラスを使うのがお勧めです。
var sw = new StringWriter(); sw.WriteLine("select *"); sw.WriteLine(" from Table1"); sw.WriteLine(" where Column1 = @Value1");
コードがスッキリ見やすくなりました。
参照
StringWriterクラス
StringBuilderクラス
2014年9月1日月曜日
ADO.NETのData ProviderでRDBへの依存をカプセル化するにはDbProviderFactoryを使う
これまでに経験したシステム開発では、DBを決めずに開発が始まることはなかったので、必要になる場面はなかなかないと思いますが、DbProviderFactoryを使えばRDBに依存しないコードが書けます。
次に例を示します。
class Class1 { private readonly DbProviderFactory factory; private readonly string connectionString; public Class1(DbProviderFactory factory, string connectionString) { this.factory = factory; this.connectionString = connectionString; } public List<object> Method1() { using (var conn = factory.CreateConnection()) using (var command = factory.CreateCommand()) { conn.ConnectionString = connectionString; conn.Open(); command.Connection = conn; command.CommandText = "select * from Table1 where ID = @ID"; var param = factory.CreateParameter(); param.ParameterName = "ID"; param.Value = "ID1"; command.Parameters.Add(param); var reader = command.ExecuteReader(); var result = new List<object>(); while (reader.Read()) { var arr = new object[reader.FieldCount]; reader.GetValues(arr); result.Add(arr); } return result; } }
実際にはSQLもRDBに合わせてコーディングしないといけないので、DbProviderFactoryだけでは不十分と思います。
2014年8月25日月曜日
ASP.NET開発を始めるにあたって参考にした記事3つ
ASP.NETアプリケーション開発に取り組んで1ヶ月になりました。
開発も終盤にさしかかってきたので、忘れないうちに開発スタート時に参考にした記事を3つ紹介します。
@IT プログラミングASP.NET
ASP.NETについて、基本から解説してあります。(連載なので、正確には1記事ではないかも)
全体を把握するのにおすすめです。特に重要だと感じたキーワードを挙げておきます。
ASP.NET Page Life Cycle Overview
ASP.NETプログラミングの特徴のひとつに、イベントドリブン方式で実装することがあります。この特徴を活用するには、イベントの順番を把握しなければなりません。この記事ではそれが紹介されています。
今回のプロジェクトで主に使用したイベントと、用途を紹介します。
ASP.NET Application Life Cycle Overview for IIS 7.0
上で紹介したライフサイクルよりも、大きなサイクルについての記事です。アプリケーションやセッションの初期処理を組み込もうとするときに参考になります。
これまで食わず嫌いでASP.NETには手をつけてこなかったのですが、実際に開発をしてみるとすんなり進められました。今後は、ASP.NET案件にも積極的に取り組んでいこうと思います。
開発も終盤にさしかかってきたので、忘れないうちに開発スタート時に参考にした記事を3つ紹介します。
@IT プログラミングASP.NET
ASP.NETについて、基本から解説してあります。(連載なので、正確には1記事ではないかも)
全体を把握するのにおすすめです。特に重要だと感じたキーワードを挙げておきます。
- ポストバック
- ビューステート
- データバインド
ASP.NET Page Life Cycle Overview
ASP.NETプログラミングの特徴のひとつに、イベントドリブン方式で実装することがあります。この特徴を活用するには、イベントの順番を把握しなければなりません。この記事ではそれが紹介されています。
今回のプロジェクトで主に使用したイベントと、用途を紹介します。
- Page_Init…ページやコントロールのフィールドを初期化する。オブジェクトをセッションから取得するなど。
- Page_Load…コントロールの初期化をする。ドロップダウンリストの項目をセットするなど。
- Button_Click…ユーザーの入力値を受け取る。入力値をもとに業務ロジックを呼び出して結果を受け取る。
- Page_PreRender…業務ロジックの結果をコントロールへ反映する。
ASP.NET Application Life Cycle Overview for IIS 7.0
上で紹介したライフサイクルよりも、大きなサイクルについての記事です。アプリケーションやセッションの初期処理を組み込もうとするときに参考になります。
これまで食わず嫌いでASP.NETには手をつけてこなかったのですが、実際に開発をしてみるとすんなり進められました。今後は、ASP.NET案件にも積極的に取り組んでいこうと思います。
2014年8月18日月曜日
Javaでクラス図を書いてみた
Javaでクラス図(1クラスだけ!)を書いてみたの続きになります。
クラス同士の関連を出力できるようにしました。
クラス同士の関連を出力できるようにしました。
上の図が出力に使用したプログラムを出力したものです。
ざっくりとしたイメージを把握する程度の要求は満たせるかな、という感じです。
2014年8月11日月曜日
ASP.NETでJavaScriptからポストバックを発生させる方法
ASP.NETアプリケーションをコーディングしていて、JavaScriptからポストバックしたいというケースがあります。例えば、検索結果の一覧をテーブルで表示しており、任意のセルをクリックした時に詳細を表示する画面へ遷移するケースなどです。
こういう状況に対応できるのが、次のクラスとインターフェイスです。
IPostBackEventHandler
こういう状況に対応できるのが、次のクラスとインターフェイスです。
まず、JavaScriptのイベントハンドラに対して、ClientScriptManager.GetPostBackEventReferenceで取得した文字列を呼び出すように実装します。このとき、引数として渡した文字列が、次で実装するポストバックイベントハンドラの引数になります。ClientScriptManagerオブジェクトは、Page.ClientScriptから取得できます。
class MyPage : Page { protected void Page_PreRender(object sender, EventArgs e) { var args = "xxx"; // 例えば、詳細情報を表示するためのプライマリキー var js = ClientScript.GetPostBackEventReference(this, args); Table1.Rows[0].Cells[0].Attributes.Add("onclick", js); } }
次に、ポストバックを受けるクラスが、IPostBackEventHandler.RaisePostBackEventを実装します。
// 上のクラスへIPostBackEventHandlerを実装 class MyPage : Page, IPostBackEventHandler { ... public void RaisePostBackEvent(string eventArgs) { // 例えばセッションへeventArgsをセットして詳細ページへ遷移する Session.Add("key", eventArgs); var detail = ResolveUrl("~/MyDetailPage.aspx"); Server.Transfer(detail); } }
以上でJavaScriptからのポストバックが機能します。私が最初に思いついたのは、CSSで非表示にしたボタンをJavaScriptからクリックするという方法でした。しかし、こちらのほうが何倍もスマートだと思います。
ClientScriptManagerには、他にも様々なメソッドがあります。まだまだ便利な機能がありそうです。
参考:
ClientScriptManagerIPostBackEventHandler
2014年8月4日月曜日
ASP.NETアプリケーションの起動時にWeb.configファイルを読み込むには
ASP.NETアプリケーションの起動時に設定ファイルを読み込み、システムの初期設定をしたいというケースがあると重います。
設定ファイルを読み込むための、WebConfigurationManager.OpenWebConfigurationメソッドには、引数として設定ファイルの仮想パスが必要です。仮想パスの取得方法として、ASP.NET Web プロジェクトの仮想パスに手順が記載されていますが、アプリケーションの起動時には適用できません。なぜなら、紹介されている方法ではHttpRequestクラスを使用するのですが、アプリケーション起動時には、HttpRequestオブジェクトが使える状態にないからです。
そこで、代わりに使用するのが、HttpRuntimeクラスです。このクラスの、AppDomainVirtualPathプロパティから、アプリケーションの仮想パスを取得できるので、あとはファイル名を結合するだけです。結合には、VirtualPathUtilityクラスを使うとベターでしょう。
仮想パスをいい加減に扱うと、サーバーへインストールしたら動かなくなることがあります。HttpRuntimeクラスを使い、環境の変化に強いコードを書きましょう。
設定ファイルを読み込むための、WebConfigurationManager.OpenWebConfigurationメソッドには、引数として設定ファイルの仮想パスが必要です。仮想パスの取得方法として、ASP.NET Web プロジェクトの仮想パスに手順が記載されていますが、アプリケーションの起動時には適用できません。なぜなら、紹介されている方法ではHttpRequestクラスを使用するのですが、アプリケーション起動時には、HttpRequestオブジェクトが使える状態にないからです。
そこで、代わりに使用するのが、HttpRuntimeクラスです。このクラスの、AppDomainVirtualPathプロパティから、アプリケーションの仮想パスを取得できるので、あとはファイル名を結合するだけです。結合には、VirtualPathUtilityクラスを使うとベターでしょう。
var path = VirtualPathUtility.Combine(HttpRuntime.AppDomainVirtualPath, "Web.config"); var conf = WebConfigurationManager.OpenWebConfiguration(path);
仮想パスをいい加減に扱うと、サーバーへインストールしたら動かなくなることがあります。HttpRuntimeクラスを使い、環境の変化に強いコードを書きましょう。
登録:
投稿 (Atom)