「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>アプリケーション設計のポイント]] *目次 [#m24a9a7b] #contents *概要 [#j2b309e7] **Web [#n266dafe] Open棟梁を適用したシステムに於けるオンライン処理の処理シーケンスについて説明します。 #ref(OnlineSequence.png,left,nowrap,Webオンライン処理シーケンス) **リッチクライアント [#vb35ca6a] Open棟梁を適用したシステムに於けるWindows Formsの2層C/Sのオンライン処理の処理シーケンスについて説明します。 #ref(OnlineSequence2.png,left,nowrap,リッチクライアント・オンライン処理シーケンス) *初期化イベント処理の詳細(Web) [#z1de9dce] **ASP.NET Web Formsのイベント発生順 [#pf7bb7ef] [[ASP.NET Web Formsのイベント発生順 - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp:443/index.php?ASP.NET%20Web%20Forms%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%99%BA%E7%94%9F%E9%A0%86]] **[[クラス構造]]と初期化イベント [#c0d81d35] -[[ベースクラス1]]では1-ⅰ,3-ⅰの初期化イベントを使用する。 -[[ベースクラス2]]では、1-ⅱ,3-ⅱの初期化イベントを使用する。 -[[画面コード クラス>クラス構造#o82e79db]]では、1-ⅲ,3-ⅲの初期化イベントを使用する。 **処理内容 [#d48c3487] ***コンストラクタ [#aceaa106] [[ベースクラス1]]の「コンストラクタ」では、~ 「Page.Loadイベント」のイベント ハンドラを登録する処理が実行される。 ***Page.Initイベント [#r1ab10fb] 実装無し。 ***Page.Loadイベント [#ce7105a5] 「[[ベースクラス1]]」の「Page.Loadイベント」では、順番に以下の処理が実行される。 -初期処理 --マスタ ページ情報の初期化 --Ajaxの状態を確認(ASP.NET Ajax、ClientCallback) --セッション スコープ ロック用オブジェクトを生成 --[[Sessionタイムアウト検出機能]] --各種HIDDENコントロールの取得 -[[二重送信防止機能]]の実行 -[[不正操作防止機能]]の実行 -「[[画面遷移制御機能]]」 --「ブラウザ・ウィンドウGUID」の生成処理(画面遷移後は、「ブラウザ・ウィンドウGUID」が引き継がれる ので、新規生成しない)~ ※ 「ブラウザ・ウィンドウGUID」の生成時、「[[ブラウザ・ウィンドウ別Session領域]]」のスコープの「[[Session領域の自動削除機能]]」を実行する。 --「[[画面遷移チェック機能>画面遷移制御機能#h7cda6a7]]」の実行 -「[[ボタン履歴情報記録機能]]」 --「画面GUID」の生成処理(「子画面」 には、Query Stringで「画面GUID」が引き継がれる ので、新規生成しない。)~ ※ 「画面GUID」の生成時、「[[親画面別Session領域]]」のスコープの「[[Session領域の自動削除機能]]」(後述)を実行する。 ※ 「画面GUID」の生成時、「[[親画面別Session領域]]」のスコープの「[[Session領域の自動削除機能]]」を実行する。 --「[[ボタン履歴情報>ボタン履歴情報記録機能]]」をメンテする。 ---初回 : ダミーの「[[ボタン履歴情報>ボタン履歴情報記録機能]]」をプッシュする。 ---初回以降 :~ 古い「[[ボタン履歴情報>ボタン履歴情報記録機能]]」をポップし、~ 新しい「[[ボタン履歴情報>ボタン履歴情報記録機能]]」をプッシュする。 -「[[イベント処理用UOCメソッド>P層イベント処理機能]]」の呼出準備 --FindControlメソッドを使用して、コントロール オブジェクトを取得する。 --取得したコントロール オブジェクトのイベント プロパティに、~ 「コントロール イベント毎の共通イベント ハンドラ」を設定する。 -「[[ベースクラス2]]」の「共通の初期処理UOCメソッド」を呼び出す。 --WebFormsの共通の「初回のLoad処理」(UOC_CMNFormInit) --WebFormsの共通の「PostBackのLoad処理」(UOC_CMNFormInit_PostBack) -「[[ベースクラス1]]」の「[[ベースクラス2]]」の「イベント・ハンドラ設定処理」を実行。~ これにより、各コントロールに「コントロール イベント毎の共通イベント ハンドラ」が設定される。 -「[[ダイアログ表示機能]]」 --HIDDENフィールドとJavaScriptを使用して、ダイアログ表示する。 --「[[ベースクラス1]]」の「Page.Loadイベント」では、~ 「子画面」を閉じた際のポストバックの場合、後処理を実行する。 -「Page.Loadイベント処理の最終処理用UOCメソッド」を呼び出す(UOC_Finally)。 ***コントロール イベント [#q18e2c54] 「イベント・ハンドラ設定処理」により「コントロール イベント」が呼び出され、以下の処理が実行される。~ ※ 「Page.Loadイベント」の後、ASP.NETがポストバックのHTTPリクエストを評価し、コントロールのイベント発生を検出する。 -コントロールのイベントが発生していた場合「[[ベースクラス1]]」の「コントロール イベント毎の共通イベント ハンドラ」が呼び出される。 -「コントロール イベント毎の共通イベント ハンドラ」では、次の処理が実行される。 --「イベント処理の開始処理用UOCメソッド」(UOC_PreAction)を呼び出す。~ ユーザが実装した「イベント処理の開始処理」を実行する。 --「イベント処理用UOCメソッド」を呼び出す。 ---ユーザが実装した「イベント処理」を実行する。 ---UOC_(コントロール名)_(イベント名)メソッドというメソッド名 ---「コントロール イベント毎の共通イベント ハンドラ」から~ レイト バインドで呼び出されるので、オーバーライドでは実装しない。 --「イベント処理の終了処理用UOCメソッド」を呼び出す(UOC_AfterAction)。~ ユーザが実装した「イベント処理の終了処理」を実行する。 --「イベント処理後の画面遷移処理の実装用UOCメソッド」を呼び出す(UOC_Screen_Transition)。~ ユーザが実装した「イベント処理」が「パス」を戻した場合、~ その「パス」に対して「画面遷移する処理」を実行する。 ユーザが実装した「イベント処理」が「パス」を戻した場合、その「パス」に対して「画面遷移する処理」を実行する。 --「コントロール イベント処理の最終処理用UOCメソッド」を呼び出す(UOC_Finally)。~ ユーザが実装した「イベント処理の最終処理」を実行する。 **補足 [#g58c93be] -情報の引継ぎ方法~ 画面遷移方式により、情報の引継ぎ方法が異なる。 --Server.Transferの場合は、HTTP Contextを使用する。 --Response.Redirectの場合は、Query Stringを使用する。 -子画面 --ココでは、モーダル ダイアログ画面などを「子画面」と表現する。 --なお「親画面」は、当該するモーダル ダイアログ画面を起動した、~ モードレス画面にあたる。情報の引継ぎには、Query Stringを使用する。 *参考 [#b63d5d83] 処理シーケンスの詳細は[[利用ガイド(共通編)>https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/1_User_Guide(Common).doc]]を参照のこと。 >通信制御部品を使用した場合、P層 → B層間にサービス インターフェイス(サーバ エンドポイント)とサービス プロキシ(クライアント エンドポイント)が挿入される。 IP:202.246.252.97 TIME:"2018-02-02 (金) 17:21:39" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=%E5%87%A6%E7%90%86%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"