Skip to content

UserGuide_IndividualFunctions.ja

daisuke nishino edited this page Jul 22, 2026 · 8 revisions

Open 棟梁 利用ガイド (各機能編)

2026年7月更新版

はじめに

本ドキュメントの対象

  • Open 棟梁を用いたアプリケーション開発を行う、SE・開発者

本ドキュメントの概要

本ドキュメントは、フレームワークの持つ各機能の利用方法について纏めています。

他社所有名称に対する表示

本ドキュメントに記載の会社名・商品名は、各社の商標または登録商標です。

※ API・XML 定義の詳細は付属の「ユーザ利用 API 一覧.xls」「API リファレンス マニュアル.zip」および元資料を参照してください。

目次

1. 共通 API

2. 子画面表示機能

3. 共有情報、メッセージ取得機能

4. 画面遷移制御機能

5. トランザクション制御機能

6. 通信制御機能

7. Ajax 連携機能

8. 制限事項

1. 共通 API

本章では、それぞれの名前空間が実装する共通 API について説明します。概要については付属の「ユーザ利用 API 一覧.xls」「API リファレンス マニュアル.zip」を参照してください。

1.1 Public 名前空間

表 1.1 Public 名前空間の共通 API(主なクラス/メソッド)

機能 クラス 主なメソッド
ファイルの読み込み ResourceLoader / EmbeddedResourceLoader ファイル/埋め込みリソースの読み込み
ログ出力処理 LogIF DebugLog、InfoLog、WarnLog、ErrorLog、FatalLog
コンフィグからのパラメタ取得 GetConfigParameter GetConfigValue (appSettings)、GetConnectionString (connectionStrings)
エンコーディング処理 CustomEncode [1] StringToByte、ByteToString、HtmlEncode [2]、UrlEncode [3]、ToBase64String、FromBase64String
JIS2004 チェック処理 JIS2k4Checker CheckSurrogatesPairChar、DeleteSurrogatesPairChar、CheckCharAddedWithJIS2k4、DeleteCharAddedWithJIS2k4
文字列編集処理 StringConverter / StringChecker / FormatConverter / FormatChecker 全半角・平片仮名変換、各種チェック、西暦和暦変換、郵便・電話番号チェック 等

1.2 Framework 名前空間

表 1.2-1 Framework 名前空間の共通 API - P層フレームワーク(主なメソッド)

機能 クラス 概要・分類 主なメソッド
子画面表示機能 [4] BaseController メッセージ ダイアログ表示 ShowOKMessageDialog、ShowYesNoMessageDialog
Yes・No メッセージ ダイアログの後処理を実装 UOC_YesNoDialog_X/Yes/No_Click
業務モーダル ダイアログ表示 ShowModalScreen、GetScriptToShowModalScreen
業務モーダル ダイアログを閉じる CloseModalScreen(_NoPostback/_WithAllParent)
業務モーダル ダイアログの後処理を実装 UOC_ModalDialog_End
業務モードレス ダイアログ表示 ShowNormalScreen、GetScriptToShowNormalScreen
セッション管理機能 [5] BaseController (業務モーダル ダイアログの)親画面別セッション領域系 SetDataToModalInterface、GetDataFromModalInterface、DeleteDataFromModalInterface
ブラウザ ウィンドウ別 セッション領域系 SetDataToBrowserWindow、GetDataFromBrowserWindow、DeleteDataFromBrowserWindow
サブシステムID別 セッション領域系 SetSubsysInformation、GetSubsysInformation、DeleteSubsysInformation
ユーザ情報用セッション領域系 SetUserInformation、GetUserInformation、DeleteUserInformation
画面遷移機能 BaseController 画面遷移制御機能を利用しない場合 FxTransfer (Server.Transfer)、FxRedirect (Response.Redirect)
画面遷移制御機能を利用する場合 ScreenTransition(メソッド)、TransitionMethod (ON・OFF判別プロパティ)
その他 BaseController コントロール取得ユーティリティ・メソッド GetFxWebControl、GetMasterWebControl、GetContentWebControl
ユーティリティ メンバ変数 RootMasterPageFileNoEx、ContentPageFileNoEx、CurrentScriptManager、AjaxExtensionStatus、IsClientCallback

表 1.2-2 Framework 名前空間の共通 API - B、D層フレームワーク(主なメソッド)

機能 クラス 概要・分類 主なメソッド
B層フレームワーク BaseLogic Dam管理 SetDam、GetDam
Transaction管理...(5章参照) GetTransactionPatterns、InitDam
D層フレームワーク BaseDao Dam管理 BaseDao (コンストラクタ)、GetDam
クエリ設定 SetSqlByFile、SetSqlByFile2、SetSqlByCommand、SetParameter、GetParameter、SetUserParameter
データ アクセス ExecSelectFill_DT、ExecSelectFill_DS、ExecSelect_DR、ExecSelectScalar、ExecInsUpDel_NonQuery

表 1.2-3 Framework 名前空間の共通 API - その他

機能 クラス 主なメソッド
共有情報取得 (3 章参照) GetSharedProperty GetSharedPropertyValue
メッセージ取得 (3 章参照) GetMessage GetMessageDescription
通信制御 (6 章参照) クライアント側 CallController メソッド:Invoke、プロパティ:Context、ProxyUrl、NetworkCredentialToProxy、NetworkCredentialToWAS
通信制御 (6 章参照) サーバ側(サービス・インターフェイス) ASPNETWebService.FxController、WCFService.WCFTCPSvcForFx

2. 子画面表示機能

2.1 利用準備

P 層の子画面表示機能では、JavaScript 関数を利用して、フレームワークの用意する子画面を起動します。子画面の利用準備として、サンプル付属の「OK メッセージ ダイアログ」(myOKMessageDialog.aspx(.cs))、「YES・NO メッセージ ダイアログ」(myYesNoMessageDialog.aspx(.cs)) の実装を参考にします。モジュール名称を変更した場合は、web.config の「FxYesNoMessageDialogPath」「FxOKMessageDialogPath」パラメタの値を変更する必要があります。

2.2 利用方法

  • OK メッセージ ダイアログ:「ShowOKMessageDialog」メソッドを P 層のイベント処理から呼び出す。引数:messageID、message、iconType、dialogName、dialogStyle (オプション)。
// メッセージ表示
this.ShowOKMessageDialog("メッセージID", "メッセージ:" + msg,
  FxEnum.IconType.INFORMATION, "ダイアログ表示テスト");
// メッセージ表示(オーバーロード)
this.ShowOKMessageDialog("メッセージID", "メッセージ:" + msg,
  FxEnum.IconType.INFORMATION, "ダイアログ表示テスト",
  "dialogWidth:450px;dialogHeight:250px;status:no;");

図2.2.1 OKメッセージ ダイアログの表示

  • YES・NO メッセージ ダイアログ
    • 「ShowYesNoMessageDialog」メソッドを呼び出す。引数:messageID、message、dialogName、dialogStyle (オプション)。
// メッセージ表示
this.ShowYesNoMessageDialog(
  "メッセージID", "メッセージ",
  "ダイアログ表示テスト");
// メッセージ表示(オーバーロード)
this.ShowYesNoMessageDialog(
  "メッセージID", "メッセージ",
  "ダイアログ表示テスト", "dialogWidth:640px;dialogHeight:480px;status:no;");
  • [YES]・[NO]・[×] ボタンに対応した後処理は「UOC_YesNoDialog_Yes/No/X_Click」メソッドを「画面コード クラス」でオーバーライドして実装する。
/// <summary>「YES」・「NO」メッセージ・ダイアログの「×」が押され閉じられた場合の処理を実装する。</summary>
/// <param name="parentFxEventArgs">親画面側のボタンのイベントハンドラの共通引数</param>
protected override void UOC_YesNoDialog_X_Click(FxEventArgs parentFxEventArgs)
{
 // 「YES」・「NO」メッセージ・ダイアログの「×」が押され閉じられた場合の処理を実装
 // TODO:
 // switch文
}
/// <summary>「YES」・「NO」メッセージ・ダイアログの「YES」が押され閉じられた場合の処理を実装する。</summary>
/// <param name="parentFxEventArgs">親画面側のボタンのイベントハンドラの共通引数</param>
protected override void UOC_YesNoDialog_Yes_Click(FxEventArgs parentFxEventArgs)
{
 // 「YES」・「NO」メッセージ・ダイアログの「YES」が押され閉じられた場合の処理を実装
 // TODO:
 // switch 文
}
/// <summary>「YES」・「NO」メッセージ・ダイアログの「NO」が押され閉じられた場合の処理を実装する。</summary>
/// <param name="parentFxEventArgs">親画面側のボタンのイベントハンドラの共通引数</param>
protected override void UOC_YesNoDialog_No_Click(FxEventArgs parentFxEventArgs)
{
 // 「YES」・「NO」メッセージ・ダイアログの「NO」が押され閉じられた場合の処理を実装
 // TODO:
 // switch文
}
  • 引数の「親画面のボタン履歴情報」(parentFxEventArgs.ButtonID) をスイッチ文で判別して後処理を実装する。ボタン履歴情報記録機能(buttonHistoryRecorder パラメタ)が[off]に設定されている場合、parentFxEventArgs.ButtonID の値は常に"dummy"となるので注意する。
// スイッチ文の実装例:スイッチ文には次のようなコードを実装する。
switch (parentFxEventArgs.ButtonID)
{
  case "btnXXXX":
    // btnXXXXボタンで開いた[YES]・「NO」メッセージ・ダイアログの[YES]ボタンを押した時の後処理
    break;
  case "btnYYYY":
    // btnYYYYボタンで開いた[YES]・「NO」メッセージ・ダイアログの[YES]ボタンを押した時の後処理
    break;
  default:
    break;
}
  • 業務モーダル ダイアログ
    • サーバ側イベントからは「ShowModalScreen」、クライアント側イベントからは「GetScriptToShowModalScreen」を使用する (引数:screenURL、dialogStyle)。
// 画面表示
this.ShowModalScreen("URL");
// 画面表示(オーバーロード)
this.ShowModalScreen("URL", "dialogWidth:640px;dialogHeight:480px;status:no;");
// 画面表示
this.GetScriptToShowModalScreen("URL");
// 画面表示(オーバーロード)
this.GetScriptToShowModalScreen("URL", "dialogWidth:640px;dialogHeight:480px;status:no;");
// スタイル指定なし
this.btnShowModalScreen1.OnClientClick = "return " + this.GetScriptToShowModalScreen("URL") + ";";
// スタイル指定あり
this.btnShowModalScreen2.OnClientClick = "return " + this.GetScriptToShowModalScreen("URL", "STYLE") + ";";
  • 閉じるには「CloseModalScreen」「CloseModalScreen_NoPostback」を使い分ける (閉じた後の動作が異なる)。
/// <summary>
/// 現在の画面を閉じる。親画面に戻った際に、
/// ポストバックを実行し後処理を実行する。
/// </summary>
protected void CloseModalScreen()
/// <summary>
/// 現在の画面を閉じる。
/// 親画面に戻った際に、ポストバックをせず後処理を実行しない。
/// </summary>
protected void CloseModalScreen_NoPostback()
  • 後処理は「UOC_ModalDialog_End」に実装する。
/// <summary>業務モーダル画面の後処理を実装する。</summary>
/// <param name="parentFxEventArgs">業務モーダル画面を開いた(親画面側の)ボタンのボタン履歴</param>
/// <param name="childFxEventArgs">業務モーダル画面を閉じた(一番最後に押された子画面側の)ボタンのボタン履歴</param>
protected override void UOC_ModalDialog_End(FxEventArgs parentFxEventArgs, FxEventArgs childFxEventArgs)
{
  // 業務モーダル画面の後処理を実装
  // TODO:
  // switch文
  switch (parentFxEventArgs.ButtonID)
  {
    case "btnXXXX":
      // btnXXXXボタンで開いた業務モーダル ダイアログの
      switch (childFxEventArgs.ButtonID)
      {
        case "btnAAAA":
          // btnAAAAボタンを押して画面を閉じた時の後処理break;
        case "btnBBBB":
          // btnBBBBボタンを押して画面を閉じた時の後処理break;default:
          break;
      }
      break;
    case "btnYYYY":
      // btnYYYYボタンで開いた業務モーダル ダイアログの
      switch (childFxEventArgs.ButtonID)
      {
        case "btnAAAA":
          // btnAAAAボタンを押して画面を閉じた時の後処理break;
        case "btnBBBB":
          // btnBBBBボタンを押して画面を閉じた時の後処理break;default:
          break;
      }
      break;default:
      break;
  }
}

フレームワークの仕様では、前述の「YES・NO メッセージ ダイアログ表示処理の後処理」「業務モーダル ダイアログ画面表示処理の後処理」を、「画面コード親クラス2 」上の「マスタ ページ上のコントロールの共通イベント処理」に実装できない。これは、どの「マスタ ページ」・「コンテンツ ページ」の「ボタン履歴」であるかを「画面コード親クラス2」上の「マスタ ページ上のコントロールの共通イベント処理」で判別できないためである。

  • 業務モードレス画面:「ShowNormalScreen」メソッドを呼び出す (引数:screenURL、screenStyle)。
// 画面表示
this.ShowNormalScreen("testScreen.aspx");
// 画面表示(オーバーロード)
this.ShowNormalScreen("testScreen.aspx", "width=960,height=700;");
  • 親画面と業務モーダル ダイアログとの情報受け渡しには 4 種類のメソッドを使用します(図2.3)。受け渡しの情報を保持する領域は「親画面別セッション領域」となるため、セッションの重複 (競合) を考慮する必要はありません。利用後は必ず消去するか、大きなデータを格納しないようにしてメモリ リークを防ぎます。
/// <summary>受け渡しデータの設定</summary>
/// <param name="name">キー名</param>
/// <param name="value">値</param>
protected void SetDataToModalInterface(string name, object value)
/// <summary>受け渡しデータの取得</summary>
/// <param name="name">キー名</param>
protected object GetDataFromModalInterface(string name)
/// <summary>受け渡しデータの削除(キー毎)</summary>
/// <param name="name">キー名</param>
protected void DeleteDataFromModalInterface(string name)
/// <summary>受け渡しデータの削除(全て)</summary>
protected void DeleteDataFromModalInterface()

3. 共有情報、メッセージ取得機能

  • 共有情報取得機能:XML 定義ファイルに「キー」「共有情報」を定義し、API から「キー」を指定して「共有情報」を取得するオプション機能。
  • メッセージ取得機能:XML 定義ファイルに「メッセージ ID」「メッセージ」を定義し、API から「メッセージ ID」を指定して「メッセージ」を取得するオプション機能。

3.1 XML 定義

  • 共有情報取得機能SharedProp タグの key 属性にキー、value 属性に共有情報を定義します。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE SPD[
 <!ELEMENT SPD (SharedProp*)>
 <!ELEMENT SharedProp EMPTY>
 <!ATTLIST SharedProp
 key ID #REQUIRED
 value CDATA #REQUIRED>
]>
<!-- key(id)の先頭には、数字を使用できない。 -->
<SPD>
 <SharedProp key="ConnectionString1" value="てすと1"/>
 <SharedProp key="ConnectionString2" value="てすと2"/>
 <SharedProp key="HostName1" value="てすと3"/>
 <SharedProp key="HostName2" value="てすと4"/>
</SPD>
  • メッセージ取得機能Message タグの id 属性にメッセージ ID、description 属性にメッセージを定義します (フォーマットの詳細は DTD に従う)。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE MSGD[
 <!ELEMENT MSGD (Message*)>
 <!ELEMENT Message EMPTY>
 <!ATTLIST Message
 id ID #REQUIRED
 description CDATA #REQUIRED>
]>
<!-- idの先頭には、数字を使用できない。 -->
<!-- 先頭Eは異常系、先頭Iは正常系など -->
<MSGD>
 <Message id="E0001" description="~メッセージ記述1(異常系)~"/>
 <Message id="E0002" description="~メッセージ記述2(異常系)~"/>
 <Message id="E0003" description="~メッセージ記述3(異常系)~"/>
 <Message id="E0004" description="~メッセージ記述4(異常系)~"/>
 <Message id="E0005" description="~メッセージ記述5(異常系)~"/>
 <Message id="I0001" description="~メッセージ記述1(正常系)~"/>
 <Message id="I0002" description="~メッセージ記述2(正常系)~"/>
 <Message id="I0003" description="~メッセージ記述3(正常系)~"/>
 <Message id="I0004" description="~メッセージ記述4(正常系)~"/>
 <Message id="I0005" description="~メッセージ記述5(正常系)~"/>
</MSGD>

図 3.1 XML 定義ファイル

3.2 外部パラメタ

  • 共有情報取得機能:app.config の FxXMLSPDefinition パラメタにファイルへのパスを指定する。
<!-- メッセージ定義へのパス -->
<add key="FxXMLSPDefinition" value="C:\root\files\resource\Xml\SPDefinition.xml"/>
  • メッセージ取得機能:app.config の FxXMLMSGDefinition パラメタにファイルへのパスを指定する。(図3.2-2)
<!-- メッセージ定義へのパス -->
<add key="FxXMLMSGDefinition" value="C:\root\files\resource\Xml\MSGDefinition.xml"/>
  • クライアント側で利用する場合は、XML 定義ファイルを埋め込みリソースとしてコンパイルし、ファイル名を「名前空間 + ファイル名」で指定する。
<!--埋め込まれたリソースの場合-->
<add key="FxXMLXXXDefinition" value="(プロジェクトの名前空間).XXXDefinition.xml"/>

なお、FxXMLSPDefinition、FxXMLTMProtocolDefinition パラメタが指定されていない場合、XML 定義ファイルは空のデータで初期化される。

3.3 メソッド

  • 共有情報取得:「GetSharedProperty」クラスの「GetSharedPropertyValue」メソッド。
// メッセージを取得する。
 string message = GetSharedProperty.GetSharedPropertyValue("(共有情報キー)");
  • メッセージ取得:「GetMessage」クラスの「GetMessageDescription」メソッド。(図3.3-2)
 // メッセージを取得する。
 string message = GetMessage.GetMessageDescription("(メッセージ ID)");

4. 画面遷移制御機能

画面遷移制御機能は、XML 定義ファイルに画面遷移を定義し、定義した画面遷移ラベルにより画面遷移をするオプション機能です。画面遷移チェック機能を有効にすると、定義されない画面遷移をエラーにできます。

図 4.1 画面遷移例

4.2 XML 定義

  • Screen タグ:value 属性に当該画面の仮想パス、directLink 属性に直リン (Get) の許可 (allow)・不許可 (deny) を指定する。
  • Transition タグ (Screen の子要素):value 属性に遷移先画面の仮想パス、label 属性に「画面遷移ラベル」(API に渡す)、mode 属性に画面遷移方法 (T:Transfer、R:Redirect) を指定する。
  • CmnTransition タグ (Screen と同列):共通的な遷移を定義する。value・label・mode 属性を持つ。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE SCD[
<!ELEMENT SCD (Screen*, CmnTransition*)> <!ELEMENT Screen (Transition*)>
<!ELEMENT Transition EMPTY> <!ELEMENT CmnTransition EMPTY>
<!ATTLIST Screen value CDATA #REQUIRED directLink (allow|deny) "allow">
<!ATTLIST Transition value CDATA #REQUIRED label CDATA #REQUIRED mode (T|R) #IMPLIED>
<!ATTLIST CmnTransition value CDATA #REQUIRED label ID #REQUIRED mode (T|R) #IMPLIED>
]>
<!--Screenタグの現画面の仮想パスはIDにできるが、「/」を含むため、XMLのIDとしては利用できない。-->
<SCD>
<Screen value="/Aspx/start/login.aspx" directLink="allow"></Screen>
<Screen value="/Aspx/start/menu.aspx" directLink="allow"></Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm0.aspx" directLink="allow">
 <Transition value="/Aspx/testScreenCtrl/WebForm1.aspx" label="0→1" mode ="T"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm2.aspx" label="0→2" mode ="R"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm3.aspx" label="0→3" mode ="T"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm4.aspx" label="0→4" mode ="R"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm5.aspx" label="0→5" mode ="T"/>
</Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm1.aspx" directLink="deny">
 <Transition value="/Aspx/testScreenCtrl/WebForm2.aspx" label="1→2" mode ="R"/>
</Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm2.aspx" directLink="deny">
 <Transition value="/Aspx/testScreenCtrl/WebForm3.aspx" label="2→3" mode ="T"/>
</Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm3.aspx" directLink="allow">
 <Transition value="/Aspx/testScreenCtrl/WebForm4.aspx" label="3→4"/>
</Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm4.aspx" directLink="deny">
 <Transition value="/Aspx/testScreenCtrl/WebForm1.aspx" label="4→1"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm5.aspx" label="4→5"/>
</Screen>
<Screen value="/Aspx/testScreenCtrl/WebForm5.aspx" directLink="deny">
 <Transition value="/Aspx/testScreenCtrl/WebForm1.aspx" label="5→1"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm2.aspx" label="5→2"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm3.aspx" label="5→3"/>
 <Transition value="/Aspx/testScreenCtrl/WebForm4.aspx" label="5→4"/>
</Screen>
<CmnTransition value="/Aspx/testScreenCtrl/WebForm0.aspx" label="WebForm0"/>
<CmnTransition value="/Aspx/testScreenCtrl/WebForm3.aspx" label="WebForm3"/>
<CmnTransition
value="http:/www.google.co.jp/search?sourceid=navclient-ff&amp;ie=UTF-8&amp;rlz=1B3GGGL_jaJP268JP
268&amp;aq=t" label="google" mode ="R"/>
</SCD>

図4.2 画面遷移制御機能のXML定義ファイル

※ value 属性値は Query String を含めて定義できるが、XML 中では「&」を &amp; とエスケープする必要がある。

4.3 外部パラメタ

<!-- 画面遷移方法を指定(T:Transfer、R:Redirect、off) -->
<add key="FxScreenTransitionMode" value="off"/>
<!-- 画面遷移チェック機能のon・off -->
<add key="FxScreenTransitionCheck" value="off"/>
<!-- 画面遷移定義へのパス -->
<add key="FxXMLSCDefinition" value="C:\root\files\resource\Xml\SCDefinition.xml"/>

図4.3 画面遷移制御機能のConfig定義

  • FxScreenTransitionMode:機能の有効・無効と既定の画面遷移方法 (T or R) を指定。OFF で機能無効。
  • FxScreenTransitionCheck:画面遷移チェック機能の有効・無効。ON で未定義の画面遷移をエラーにできる。機能が OFF の場合はチェックも OFF。
  • FxXMLSCDefinition:XML 定義ファイルへのパス。(図4.3)

4.4 メソッド

  • 画面遷移制御機能を使用する場合は「BaseController」クラスの「ScreenTransition」メソッドを使用
 // ラベル
 string label = "(Label文字列)";
 // 画面遷移制御部品を使用して画面遷移
 this.ScreenTransition(label);

図4.4-1 画面遷移制御のAPI

  • 指定する Label 文字列には Query String を含められる。

指定方法:"(Label文字列)?aaa=AAA&bbb=BBB&ccc=CCC"

  • 機能を使用しないで画面遷移する場合は「FxTransfer」「FxRedirect」メソッドを使用
 // ラベル
 string url = "(URL文字列)";
 // フレームワーク管理下の画面遷移(Transfer)
 this.FxTransfer(url);
 // フレームワーク管理下の画面遷移(Redirect)
 this.FxRedirect(url);

図4.4-2 画面遷移のAPI

  • 指定する URL 文字列には Query String を含められる。

指定方法:"(URL文字列)?aaa=AAA&bbb=BBB&ccc=CCC"

5. トランザクション制御機能

トランザクション制御機能は、XML 定義ファイルにトランザクション パターンを定義し、定義したパターンでデータ アクセス制御クラス (以降 DAM) を初期化するオプション機能です。複数の DAM を初期化する場合は、トランザクション グループで複数パターンをグループ化できます。

5.1 XML 定義

TransactionPattern タグの id 属性にパターン ID、connkey 属性に接続する DB の Connection String を取得するキー [11]、isolevel 属性に分離レベルを指定します。TransactionGroup タグの id 属性にグループ ID、value 属性にパターンのカンマ区切りリストを指定します(図5.1)。

isolevel 属性の値:nc (コネクションしない)、nt (ノー トランザクション)、uc (リード アン コミット)、rc (リード コミット)、rr (リピータブル リード)、sz (シリアライザブル)、ss (スナップ ショット)、df (デフォルト)。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TCD[
 <!ELEMENT TCD (TransactionPattern*, TransactionGroup*)>
 <!ELEMENT TransactionPattern EMPTY>
 <!ELEMENT TransactionGroup EMPTY>
 <!ATTLIST TransactionPattern id ID #REQUIRED connkey CDATA #IMPLIED
 isolevel (nc|nt|uc|rc|rr|sz|ss|df) "rc">]>
 <!ATTLIST TransactionGroup id ID #REQUIRED value CDATA #REQUIRED>
<!-- idの先頭には、数字を使用できない。 -->
<TCD>
 <!-- トランザクションパターンを定義 -->
 <TransactionPattern id="SQL_NT" connkey="ConnectionString_SQLSvr" isolevel="nt"/>
 <TransactionPattern id="SQL_UC" connkey="ConnectionString_SQLSvr" isolevel="uc"/>
 <TransactionPattern id="SQL_RC" connkey="ConnectionString_SQLSvr" isolevel="rc"/>
 <TransactionPattern id="SQL_RR" connkey="ConnectionString_SQLSvr" isolevel="rr"/>
 <TransactionPattern id="SQL_SZ" connkey="ConnectionString_SQLSvr" isolevel="sz"/>
 <TransactionPattern id="SQL_SS" connkey="ConnectionString_SQLSvr" isolevel="ss"/>
 <TransactionPattern id="SQL_DF" connkey="ConnectionString_SQLSvr" isolevel="df"/>
 <TransactionPattern id="NC" isolevel="nc"/>
 <!-- トランザクショングループを定義 -->
 <TransactionGroup id="SQLSvr" value="SQL_NT,SQL_UC,SQL_RC,SQL_RR,SQL_SZ,SQL_SS,SQL_DF"/>
</TCD>

5.2 外部パラメタ

app.config の FxXMLTCDefinition パラメタにファイルへのパスを指定します。

<!-- トランザクション制御定義へのパス -->
<add key="XMLTCDefinition" value="C:\root\files\resource\Xml\TCDefinition.xml"/>

図5.2 Transaction制御機能のXML定義ファイルへのパスを定義

5.3 メソッド

定義したパターンで Dam を初期化するには、BaseLogic クラスの「InitDam」メソッドを使用します。

 // Dam用ワーク
 BaseDam damWork;
 // Damを生成
 damWork = new DamSqlSvr();
 // Damを初期化
 BaseLogic.InitDam("SQL_RC", damWork);
 // Dam を BaseLogic クラスの「SetDam」メソッドにより、フレームワークの管理下に置く。
 this.SetDam(damWork);

図 5.3-1 Dam の初期化(サンプル コード)

トランザクション グループで複数の Dam を初期化するには「GetTransactionPatterns」でパターンを取得し「InitDam」で初期化します。

 // トランザクション・パターンを取得する。
 string[] transactionPatterns;
 BaseLogic.GetTransactionPatterns("SQLSrv", out transactionPatterns);
 // Dam用ワーク
 BaseDam damWork;
 // トランザクションパターンを使用してDamを初期化する。
 foreach (string transactionPattern in transactionPatterns)
 {
   // Damを生成
   damWork = new DamSqlSvr();
   // Damを初期化
   BaseLogic.InitDam(transactionPattern, damWork);
   // フレームワークの管理下へ置く
   this.SetDam(transactionPattern, damWork);
 }

図 5.3-2 複数の Dam の初期化(サンプル コード)

5.4 属性の利用

通信制御などでサービス化する場合は、トランザクション・パターンを、属性ベース プログラミングの作法に習い「業務コード クラス」に属性 (属性クラス) として持たせる方式が良いです。属性クラスとして [Touryo].Infrastructure.Business.Util 名前空間の「MyAttribute」クラスを使用します。クラスに設定された属性クラスを取得するには MyAttribute.GetCustomAttributes(this) メソッドを使用します。

/// <summary>LayerB の概要の説明です</summary>
[MyAttribute(TransactionPatternID = "SQL_RC")]
public class LayerB : MyBaseLogic
{
 public MyAttribute GetAttr()
 {
   return MyAttribute.GetCustomAttributes(this);
 }

図5.4 属性ベース プログラミングのサンプル

6. 通信制御機能

通信制御機能は、XML 定義ファイルに「サービス論理名」に対応する「呼び出し先 (プロトコル、アドレス)」と「呼び出しモジュール (アセンブリ、クラス)」を定義し、定義した「サービス論理名」で処理を呼び出し実行するオプション機能です。

6.1 サービス インターフェイスの準備

通信制御機能における呼び出し先の大分類として、インプロセスと、サービス インターフェイスがあります。サポートされるサービス インターフェイスのプロトコルは、ASP.NET Web API、WCF (TCP/IP) です。テンプレートは ~\root\programs\C#\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService に配置されている ASPNETWebService.FxControllerWCFService.WCFTCPSvcForFx で、ココにコンテキスト情報・引数情報の .NET オブジェクト化の処理、およびサーバ側の認証処理を実装する必要がある。

6.2 業務処理の実装

6.2.1 アセンブリの分割方法

業務処理は従来の B/D 層と同じ方法で実装可能です。ポイントは、クライアント側・サーバ側の両方で必要となる引数・戻り値の「型情報」を個別のアセンブリとしてビルドするため、プロジェクトを分割しておくことです。「型情報」は、クライアント プログラム・サービス インターフェイス・B/D 層プログラムのそれぞれで参照可能にしておく必要があります。

図 6.2.1 型情報専用のプロジェクトを作成

6.2.2 アセンブリの配置方法

クライアント プログラムからインプロセス呼び出しする場合、フレームワーク類・型情報アセンブリは参照設定、B/D 層アセンブリはレイトバインドでデプロイします (配置先はクライアントの種別による)。

図 6.2.2-1 クライアントでのインプロセス呼び出し(Web アプリケーション、Web サービス)

図 6.2.2-2 クライアントでのインプロセス呼び出し(Windows/Console アプリケーション)

図 6.2.2-3 サービス インターフェイス経由でのインプロセス呼び出し

6.3 XML 定義

通信制御機能には 2 つの XML 定義ファイルがあります。

  • 「呼び出し先 (プロトコル、アドレス)」の名前解決定義Transmission タグの id 属性に「サービス論理名」、protocol 属性にインプロセス (1)・ASP.NET Web Service (2) を指定。インプロセス以外は url・timeout 属性を定義。Url タグ・Prop タグで URL と接続オプション情報を定義。(図6.3.1、接続オプションは表6.3.1 参照)

表 6.3.1 接続時のオプション情報(主なもの)

項番 プロパティ 説明
認証資格情報 (UserName/Password/Domain) WAS [13] 認証の資格情報
プロキシ情報 (ProxyUrl/PUserName/PPassword/PDomain) プロキシ経由の要求とプロキシ認証
クライアント証明書 (CertFile/CertPassword) Authenticode X.509 v.3 証明書 (複数指定不可)
Compression HTTP 圧縮の有効・無効 (true/false)
UserAgent ユーザ エージェント ヘッダの値
ConnGroupName 使用する接続グループの名前
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
<!ELEMENT TMD (Prop*, Url*, Transmission*)>
<!ELEMENT Url EMPTY><!ELEMENT Prop EMPTY><!ELEMENT Transmission EMPTY>
<!ATTLIST Url id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Prop id ID #REQUIRED value CDATA #REQUIRED>
<!ATTLIST Transmission id ID #REQUIRED protocol (1 | 2) #REQUIRED
 url CDATA #IMPLIED url_ref IDREF #IMPLIED timeout CDATA #IMPLIED prop_ref IDREF #IMPLIED>
]>
<!-- idの先頭には、数字を使用できない。 --><!-- protocol:1=InProcess、2=WebService -->
<TMD>
<!-- マスタ データ -->
 <!-- 接続オプション(プロパティ:必要に応じて) -->
 <Prop id="prop_a" value="aaa=AAA;bbb=BBB;ccc=CCC;"/>
 <!-- 接続オプション(URL:必要に応じて) -->
 <Prop id="url_a" value="http://xxx/Service.asmx "/>
<!-- 接続先 データ -->
 <!-- インプロセス -->
 <Transmission id="testInProcess" protocol="1"/>
 <!-- Webサービス -->
 <Transmission id="testWebSrv1" protocol="2" url="http://xxx/Service.asmx" timeout="60" />
 <Transmission id="testWebSrv2" protocol="2" url_ref="url_a" timeout="60" prop_ref="prop_a" />
</TMD>

図6.3.1 「呼び出し先(プロトコル、アドレス)」の名前解決定義のXML定義ファイル

  • 「呼び出しモジュール (アセンブリ、クラス)」の名前解決定義Transmission タグの id 属性に「サービス論理名」、assemblyName 属性にアセンブリ名、className 属性にクラス名 (完全限定名) を指定。(図6.3.2)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TMD[
 <!ELEMENT TMD (Transmission*)> <!ELEMENT Transmission EMPTY>
 <!ATTLIST Transmission id ID #REQUIRED assemblyName CDATA #REQUIRED className CDATA #REQUIRED>
]>
<!-- idの先頭には、数字を使用できない。 -->
<TMD>
 <Transmission id="testInProcess" assemblyName="WSServer_sample"
 className="WSServer_sample.Business.LayerB" />
<Transmission id="testWebService" assemblyName="WSServer_sample"
 className="WSServer_sample.Business.LayerB" />
</TMD>

図6.3.2「呼び出しモジュール(アセンブリ、クラス)」の名前解決定義のXML定義ファイル

配置先:「呼び出し先」の定義はクライアント プログラム、「呼び出しモジュール」の定義はクライアント (Web アプリケーション) とサーバ (サービス インターフェイス) に配置し、app.config の FxXMLTMProtocolDefinition (呼び出し先)、FxXMLTMInProcessDefinition (呼び出しモジュール) パラメタにパスを指定します。(図6.4)

<!-- 名前解決定義へのパス -->
<add key="FxXMLTMProtocolDefinition" value="C:\root\files\resource\Xml\TMProtocolDefinition.xml"/>
<add key="FxXMLTMInProcessDefinition" value="C:\root\files\resource\Xml\TMInProcessDefinition.xml"/>

図6.3.3 トランザクション制御機能のXML定義ファイルへのパスを定義

6.6 メソッド

定義した「サービス論理名」で処理を呼び出し実行するには「CallController」クラスの「Invoke」メソッドを使用します(図6.5-1)。通信制御機能を利用した場合も、開発者編 4.2 節の「業務コード クラス」のメソッド呼び出し処理と殆ど違いがありません。「CallController」には Context、ProxyUrl、NetworkCredentialToProxy、NetworkCredentialToWAS プロパティ (書き込み専用) を指定でき、実行時はこちらの値が優先されます(図6.5-2)。

 // 引数クラスを生成
 TestParameterValue testParameterValue = new TestParameterValue(
   "(任意のmethodName値)", this.ContentPageFileNoEx, fxEventArgs.ButtonID,
   "(任意のactionType値)", this.UserInfo.UserName, Request.UserHostAddress);

 // 戻り値
 TestReturnValue testReturnValue;

 // 呼び出し制御部品
 CallController cctrl = new CallController(this.UserInfo);

 // Invoke
 testReturnValue = (TestReturnValue)cctrl.Invoke(
 this.ddlCmctCtrl.SelectedValue, testParameterValue);

 // 結果表示するメッセージ エリア
 Label label = (Label)this.GetMasterWebControl("Label1");
 label.Text = "";
 if (testReturnValue.ErrorFlag == true)
 {
   // 結果(業務続行可能なエラー)
   label.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\n";
   label.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\n";
   label.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\n";
 }
 else
 {
   // 結果(正常系)
   label.Text = testReturnValue.Obj.ToString();
 }

図6.5-1「サービス論理名」で処理を呼び出し実行する。

 // 呼び出し制御部品
 CallController cctrl = new CallController(this.UserInfo);
 // コンストラクタでも指定している、コンテキスト情報
 cctrl.Context = this.UserInfo;
 // プロキシ経由のアクセスをする場合のプロキシURL
 cctrl.ProxyUrl = "(プロキシへのURL)";
 // プロキシ認証用の認証情報
 cctrl.NetworkCredentialToProxy = new NetworkCredential("ユーザID", "パスワード", "ドメイン");
 // WAS認証用の認証情報
 cctrl.NetworkCredentialToWAS = new NetworkCredential("ユーザID", "パスワード", "ドメイン");

図6.5-2 呼び出しオプション情報の設定

7. Ajax 連携機能

Ajax 連携機能は、Client Callback や ASP.NET 2.0 AJAX Extensions などの Ajax 機能と連携する機能です (いずれも aspx のポストバックとして動作します)。

7.1 Client Callback

サンプル コードを参考に Client Callback 機能を利用できます(図7.1-1〜7.1-3)。

/// <summary>ClientCallbackのテスト画面(P層)</summary>
public partial class testClientCallback : MyBaseController,
 System.Web.UI.ICallbackEventHandler // 注意:System.Web.UI.ICallbackEventHandlerの実装のため必要になる。
{
 /// <summary>ページロードのUOCメソッド(個別:初回ロード)</summary>
 /// <remarks>実装必須</remarks>
 protected override void UOC_FormInit()
 {
   // クライアント コールバックを有効にする
   // Init、PostBackの双方で都度実行する必要がある。
   string CallServerScript = this.InitClientCallback();
   // イベント(ロスト フォーカス)にWebForm_DoCallbackを仕掛ける。
   // スクリプトの編集
   CallServerScript = CallServerScript.Replace("$SvrParam$", "this.value");
   CallServerScript = CallServerScript.Replace( "$ClientCallbackReceiveEventHandler$", "CCREH_MethodName");
   CallServerScript = CallServerScript.Replace("$CliParam$", "this.name");
   // スクリプトの設定
   ((TextBox)this.GetMasterWebControl("TextBox1")).Attributes.Add("onblur", CallServerScript);
   ((TextBox)this.GetContentWebControl("TextBox1")).Attributes.Add("onblur", CallServerScript);
 }

 /// <summary>ページロードのUOCメソッド(個別:ポストバック)</summary>
 /// <remarks>実装必須</remarks>
 protected override void UOC_FormInit_PostBack()
 {
   // フォーム初期化(ポストバック)時に実行する処理を実装する
   // TODO:
   // クライアント コールバックを有効にする
   // Init、PostBackの双方で都度実行する必要がある。
   string CallServerScript = this.InitClientCallback();
 }

 /// <summary>クライアント コールバックを有効にする。</summary>
 private string InitClientCallback()
 {
   //// 第1引数:サーバの画面インスタンス
   //// 第2引数:WebForm_DoCallback(サーバ呼び出し)関数への引数 getElementById(javascript) + Control.ClientIDなどを併用することもある。
   //// 第3引数:コールバック関数
   //// 第4引数:コールバック関数への引数 getElementById(javascript) + Control.ClientIDなどを併用することもある。

   // 第2, 3, 4引数は可変にする。
   return this.ClientScript.GetCallbackEventReference(this, "$SvrParam$", "$ClientCallbackReceiveEventHandler$", "$CliParam$");

図 7.1-1 Client Callback の利用準備

 // 処理結果を記憶する変数
 private string CallbackResult = "";

 /// <summary>ClientCallbackにおいて、処理を実行するイベント ハンドラ</summary>
 /// <param name="eventArgument"></param>
 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
 {
   // ~ 処理 ~

   // 処理結果を設定する。
   this.CallbackResult = sbr.ToString(); ;
 }

 /// <summary>ClientCallbackにおいて、値を戻すイベント ハンドラ</summary>
 /// <returns>処理結果</returns>
 string ICallbackEventHandler.GetCallbackResult()
 {
   // 処理結果を値を戻す。
   return this.CallbackResult;
 }
}

図7.1‐2 サーバ処理の実装

 <input type="text"
   id="ctl00_ContentPlaceHolder1_TextBox1" name="ctl00$ContentPlaceHolder1$TextBox1"
   onblur="WebForm_DoCallback('__Page', this.value, CCREH_MethodName, this.name)"
   style="color:Black;font-family:MS ゴシック;font-size:12pt;" />
 <script type="text/javascript">
   function CCREH_MethodName(arg, context)
   {
     // argはサーバ側の処理結果、
     // contextは第四引数で指定したコールバック関数への引数
   }
 </script>

図7.1‐3 クライアント処理の実装

ポイントは、サーバ側の処理関数の入り口は 1 つしか用意できないという点です (クライアント側の結果受信関数は処理区分毎に複数用意できる)。「PageLoad」イベントなどでは this.IsClientCallback プロパティで、通常のポストバックか Client Callback によるものかを判別できます。

7.2 ASP.NET 2.0 AJAX Extensions

Extensions では、イベントハンドラを P 層フレームワークのイベント処理機能と同じ実装方法で実装可能です。利用するには、マスタ ページ上にスクリプト マネージャを配置し (図7.2-1)、必要であればコンテンツ ページ上にスクリプト マネージャ プロキシを配置します (図7.2-2)。

<form id="form1" runat="server">
 <asp:ScriptManager ID="MasterScriptManager" runat="server"
 AsyncPostBackErrorMessage="サーバ側エラー(MasterScriptManagerに定義)" AsyncPostBackTimeout="10">
 </asp:ScriptManager>

図7.2‐1 スクリプト マネージャ

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
 <asp:ScriptManagerProxy ID="ContentsScriptManagerProxy" runat="server"></asp:ScriptManagerProxy>

図7.2‐2 スクリプト マネージャ プロキシ

Extensions の対象とするコントロールをアップデート パネルで囲みます (図7.2-3〜7.2-5)。

<asp:UpdatePanel ID="MasterUpdatePanel" runat="server">
 <ContentTemplate>
 <cc1:WebCustomButton ID="btnMButton1" runat="server" Text="Ajaxボタン" Width="180px" /><br />
 <asp:contentplaceholder id="ContentPlaceHolder1" runat="Server"></asp:contentplaceholder>
 </ContentTemplate>
 <Triggers>
 <asp:AsyncPostBackTrigger ControlID="btnMButton1" EventName="Click" />
 </Triggers>
 </asp:UpdatePanel>

図7.2‐3 アップデートパネルで囲む

<asp:UpdatePanel ID="MasterUpdatePanel" runat="server">
 <ContentTemplate>
 <cc1:WebCustomButton ID="btnMButton1" runat="server" Text="Ajaxボタン" Width="180px" /><br />
 </ContentTemplate>
 <Triggers>
 <asp:AsyncPostBackTrigger ControlID="btnMButton1" EventName="Click" />
 </Triggers>
 </asp:UpdatePanel>
 <asp:contentplaceholder id="ContentPlaceHolder1" runat="Server"></asp:contentplaceholder>

図7.2‐4 アップデートパネルで囲む(マスタ ページ側)

<asp:UpdatePanel ID="ContentUpdatePanel" runat="server">
 <ContentTemplate>
 <cc1:WebCustomButton ID="btnButton1" runat="server" Text="Ajax ボタン" Width="180px" /><br />
 </ContentTemplate>
 <Triggers>
 <asp:AsyncPostBackTrigger ControlID="btnButton1" EventName="Click" />
 </Triggers>
 </asp:UpdatePanel>

図7.2‐5 アップデートパネルで囲む(コンテンツ ページ側)

コード ビハインドでは、スクリプト マネージャ (this.CurrentScriptManager) を使用してコントロールをポストバック対象 ⇔ Extensions 対象に変更できます (図7.2-6)。

 // RegisterPostBackControlメソッドで、「btnButton1」「ddlDropDownList1」を非Ajax化する。
 // ※ 逆の動作は、RegisterAsyncPostBackControlになる。
 this.CurrentScriptManager.RegisterPostBackControl(this.GetContentWebControl("btnButton1"));
 this.CurrentScriptManager.RegisterPostBackControl(this.GetContentWebControl("ddlDropDownList1"));

図7.2‐6 ポストバック対象 ⇔ Extension対象の変更

現在の要求が通常のポストバックか Extensions のものかは、this.CurrentScriptManager.IsInAsyncPostBackthis.AjaxExtensionStatus プロパティで判別できます。AjaxExtensionStatus (FxEnum.AjaxExtStat) は、IsNotAjaxExtension (通常のポストバック)、IsAjaxExtension (Extensions のポストバック)、NoAjaxExtension (Extensions をサポートしない画面) の 3 状態を判別できます。

8. 制限事項

  • モダンブラウザ対応(ダイアログ表示機能 [16]):「ダイアログ表示機能」のOKモーダル・ダイアログ、Yes/Noモーダル・ダイアログから使用される window.showModalDialogを、Floating divに置き換えて、 ダイアログ表示機能のモダンブラザ対応を行った。業務モーダル・ダイアログは window.showModalDialog から window.open メソッドに置き換えられ、BaseController.CloseModalScreen_WithAllParent()メソッドはサポートを終了しました。
  • 画面遷移関連:ページ間ポスティング [17] はサポートしていない。Transfer 使用時は Form 情報などの引継ぎを行わない (推奨の情報受け渡し方法は Transfer:HTTP コンテキスト、Redirect:HTTP セッション)。フレームワーク提供のメソッドを使用せずに画面遷移する場合は「ウィンドウ別セッション領域」を使用できない。

脚注

  1. エンコーディングに関する処理。
  2. HTML エンコーディング。
  3. URL エンコーディング。
  4. 子画面表示機能 (メッセージ ダイアログ、業務モーダル/モードレス画面)。
  5. セッション管理機能。
  6. .NET WSB (Web サービス ブリッジ) 用。
  7. 表示する業務モーダル ダイアログの URL。
  8. DTD を変更すれば directLink のデフォルト値を deny に変更できる。
  9. 画面遷移チェック機能を OFF にするとチェック処理を実行しない。
  10. 画面遷移制御機能のメソッド。
  11. connectionStrings セクションのキー。
  12. 接続時のオプション情報を文字列で指定する。
  13. WAS (Web Application Server)。
  14. コントロールをポストバック対象に変更する。
  15. コントロールを Extensions 対象に戻す。
  16. ページ間ポスティング (Cross-Page Posting)。

-以上-

Clone this wiki locally