ラベル VB の投稿を表示しています。 すべての投稿を表示
ラベル VB の投稿を表示しています。 すべての投稿を表示

2012年7月16日月曜日

Javaって意外に不便

今のプロジェクトでたまたまJavaを使う機会があったのだが、
普段使用しているC#(というよりは .NetFramework)と比べて機能が少ないと感じてしまう。


文字列関係でも、Right、Left、Midにがいとうするのはないし、
ファイルのコピーも自分で実装しないとだめだし、
で結構不便。
あとはLINQと同様の機能ってないのかな。

.NetFrameworkにあるメソッドをJavaで作っていくことが多くなりそう。
余裕ができたら、そんな個人ライブラリを充実させていこう。

2012年3月3日土曜日

TransactionScopeのComplete

TransactionScopeって便利だなーと思って使用していたら、
予想とは違う動作をしたので、焦って調べ直した。


勘違いポイント
<Complete=コミットではない>
Completeはあくまでも、コミットする準備ができたと明示的に書くだけであり、
コミットするのはUsing句を終了するときである。
コミットできないときはUsing句の終了で例外が発生する。
よって、TransactionScopeはtry&catchで囲む必要性が高そうだ。


            using (var tran = new TransactionScope())
            {
                try
                {
                    //
                    // データアクセス関連の処理
                    //


                    tran.Complete();


                }
                catch (Exception)
                {
                    // 例外処理
                    throw;
                }
            }



よりは




            try
            {
                using (var tran = new TransactionScope())
                {
                    //
                    // データアクセス関連の処理
                    //


                    tran.Complete();


                }
            }
            catch (Exception)
            {
                // 例外処理
                throw;
            }

のほうが現実的な気がする。

2011年12月17日土曜日

VBでIEを操作する方法に対するメモ


今まで、いくつかVB.NETでIEのオブジェクトを作成して
ページ遷移していくプログラムを作成した。
その時に、コントロールを操作する方法がいくつかあることは分かった。
正直なところ、VBS、VBA、VB.NET、JavaScript等色々
ごちゃまぜになっていてまだ整理しきれいていない。

①objIE.document.body.all("id")
対象コントロールのidが既知の場合は、
これで直接コントロールを触ることができる。一番手っ取り早い。
ことが多い。
※nameでも大丈夫だった気がする(未確認)

②objIE.Document.getElementById("id")
①とほぼ同じ。

③objIE.Document.getElementsByTagName("a")(i)
これはすべての対象タグを探して、目的となるものを探す方法。
注意すべきは、一意になるようにIf文を書くことぐらい。

例:innerhtmlが"一覧"のaタグを探す例。
For i = 1 To objIE.Document.getElementsByTagName("a").Length -1
If objIE.Document.getElementsByTagName("a")(i).innerhtml = "一覧" Then
Exit For
End If
Next

同じようなことが
getElementsByClassName
getElementsByName
でも可能なはず。

④objIE.Document.Forms(0).Item("id")
formが一つしかない場合は①とほぼ同じ。
複数ある場合は、インデックス注意。
※nameでも大丈夫だった気がする(未確認)


とまー色々な手段で対象コントロールにアクセスすることができるのだが、
適切に操作できるかは別問題。
色々試してみるのが一番。

この前submitがうまくいかないことがあった。
<input type="submit" name="submit" value="検索" type="button">
といったタグがあるとする。
普通は
objIE.Document.forms(0).submit()
で問題ない。
通常はポストパラメータにtype="submit"コントロールのnameが渡されるのだが
上のコードだと、そのnameが渡されなかったということがあった。

次に
objIE.document.body.all("submit").click()
で試してみたら、clickはメンバーにないという旨の例外が発生。

最終的に
objIE.document.getElementsByTagName("input")(i).click()
で解決できたので良かったんだが、
この手段をすっかり忘れていたので、その時は非常に焦った。

という訳で、ダメなときはいろいろな方法を試してみるに限るというのがオチ。

でも、なんでページによって違いがあるのかがよく分からん。