« エクセルファイルの作成2 | メイン | テーマ毎に画像ファイルを切り替え »

2007年06月29日

仕事の周辺 » .NET

Webインターフェースとのシステム連携

何をやっているかというと、既存のWebインターフェースのシステムに、DBから読んだ値を自動で貼り付けられないかと。
JavaScriptでウインドウ名をつけて子ウインドウをオープンし、値を送りつけるか、.NETでブラウザになりすますか、くらいしか思いつかなかったのですが、JavaScriptでWindowオープンの方は、子ウインドウに読み込むページが同じサーバーなら問題なく動きますが、別のサーバーにあると値の貼り付けも取得も「アクセスが拒否されました」のエラーになってしまいます(同じサーバーにあったら直接DB読むっちゅうねん)。
ブラウザなりすましは、Webシステムから返ってくるエラーを全部チェックし、完全自動化しない限り通常のブラウザ表示に切り替えたとたんセッション切れそうなので試してもいません。今回のケースは書類からの手入力部分もあり、完全自動化はどうしても不可能なので。
「セキュリティ関連の仕様のため不可能です」でパシッと返したのですが、「じゃあ最後の手段でキーボード直接叩け」と古いVBのスクリプト付きで思わぬリターンが(^^;)。
お陰で本日一日SendKeysに翻弄されました。
メモです。
SendKeysで別のアプリにキーボードから値を送るのにはその前にAppActivateでウインドウをアクティブにする必要があります。C#の場合はこの機能がないので、using Microsoft.VisualBasic;する必要があります(参照追加も忘れずに)。
Interaction.AppActivate(タイトル); タイトルはHTMLタグのヘッダのtitle部分を指定します。タイトルがShift_JISの日本語でも大丈夫でした。(ちなみにIEは自分で立ち上げてもらいます。認証が必要な場合はログインしておいてもらいます。一番最初の値をペーストするテキストボックスをクリックし、カーソルを移動しておいてもらいます(^^;)。)

Clipboard.SetDataObject(値, false) ; //値をクリップボードに保存
SendKyes.SendWait("^v");  //値をペースト
SendKyes.SendWait("{TAB}"); //タブキーで次のテキストボックスに移動

を必要なだけ繰り返すわけですが、それぞれ間にSleepを入れて調整してあげる必要がありそうです。しかもSleepの間隔は個人で調整できるようにしておいた方がいいような気もします。CPU二つんだ贅沢仕様の開発用のマシンでは問題なく動いていますが、リリースしたとたん「うまくいかん!」というお問い合わせが来そうで怖い。
結構既製品のシステムも入っているので、今まで連携は無理と思っていたこともこのやり方なら幾つかクリアできそうなところもありますが、あまり流行らせたくないなあ(^^;)。

投稿者 idic : 2007年06月29日 22:24

コメント

コメントしてください

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?