フック一覧 Central (項目フック) 前の項目フック 次の項目フック

VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)

Central (中央局処理) 項目フックメソッド

役割 (この項目フックメソッドに委託されている処理)

ローカル側の ItemBase のメソッド invokeCentral のパラメタで指定されたオブジェクトをセントラル側で受信し、セントラル側で行うべき処理を実施し、その処理の結果として作成されたオブジェクトをローカル側に送り返す。

なお、ワンピーススタイルの場合は、ローカル・セントラル間の通信がなされないだけで、 ツーピーススタイルの場合と同じように動作する。

配置 (ツーピーススタイルの場合にこの項目フックメソッドをどこに配置できるか)

セントラルピースに配置するか、または配置しない。ローカルピースに配置することは禁止されている。

代表的な書き方 (詳しい構文はフックメソッドの書き方を参照)

VB での書き方:
 Friend Function Central(パラメタ宣言列) As Object
 または
 Friend Function 項目略称_Central(パラメタ宣言列) As Object

パラメタ宣言列の中には、この項目フックメソッド固有のパラメタとして ByVal Rm_Object As Object を含めることができる。

C# での書き方:
 internal object Central(パラメタ宣言列)
 または
 internal object 項目略称_Central(パラメタ宣言列)

パラメタ宣言列の中には、この項目フックメソッド固有のパラメタとして object Rm_Object を含めることができる。

Java での書き方:
 Object Central(パラメタ宣言列)
 または
 Object 項目略称_Central(パラメタ宣言列)

パラメタ宣言列の中には、この項目フックメソッド固有のパラメタとして Object Rm_Object を含めることができる。

Rm_Object には、ローカル側から送り込まれた送付オブジェクトが設定されている。

なお、フック名としては、Central の他に中央局処理を用いることができる。

呼び出される契機 (以下が切っ掛けとなりこのフックメソッドが呼び出される)

普通のフックメソッドは、アプリ操作者の操作・指示を契機として呼び出されるが、このフックメソッドはローカル側の ItemBase のメソッド invokeCentralの呼出しを契機として呼び出される。

すなわち、ローカル側で ItemBase のメソッド invokeCentral が呼び出されると、 ローカル・セントラル間の通信がなされ、セントラル側のCentral フックメソッドが呼び出される。

なお、ワンピーススタイルの場合には、ローカル・セントラル間の通信がなされないだけで、 ツーピーススタイルの場合と同じように動作する。

戻り値の意味とデフォルト動作 (戻り値による ItemBase への伝言)

セントラル側で行うべき処理を実施し、その処理の結果を示すために、オブジェクトを作成して戻り値とするか、または Nothing (null) を戻り値とする。この戻り値がローカル側の呼出し元 invokeCentral の戻り値となる。

代行メッセージ (処理の流れに応じて発せられるメッセージ; カスタマイズ可能)

(関係する代行メッセージなし)

使用上のヒントと注意事項

特定の項目固有のセントラル側の呼出し処理は、画面フックメソッドではなく、この項目フックメソッド Central で行ってください。

このフックメソッドは、ローカル側においてセントラル側からデータを取り寄せる場合に使うことができる。たとえば SList フックメソッドの中でセントラル側から一覧データを取り寄せる場合に使われる。

一つの項目に関して、 2 種類以上の別々の処理を必要とする場合、 パラメタとして Rm_Object (Object 型) の内容によって要求の種類を知ることができる。 つまり、ローカル側とセントラル側で合い言葉を決めておき、その内容によって異なる処理をする仕組みが作れる。

Rm_Object には、ローカル側で呼び出した ItemBase の invokeCentral メソッドに渡したパラメタ (Object 型) の内容が格納されている。

送受信するオブジェクトは、<Serializable()> または [Serializable()] 指定をした Public Class として、ローカル・セントラル双方のソリューションから共に参照できるアセンブリに含めて、ローカルプロジェクトおよびセントラルプロジェクトから参照設定することが必要。したがって、これらを定義したクラスモジュールは、ca プロジェクトに含めるのがお勧め。

送受信するオブジェクトは、java.io.Serializable インターフェースを実装した public クラスとして、ローカル・セントラル双方から共に参照できることが必要。したがって、これらを定義したクラスモジュールは、ca プロジェクトに含めるのがお勧め。

関連事項

RHMI (Remote Hook Method Invocation) に関係するフックメソッドには、 画面フックメソッド Central,項目フックメソッド Central (本フックメソッド),画面フックメソッド Local,項目フックメソッド Local の四つがある。

これらのフックメソッドは、それぞれローカル側の FormBase のメソッド invokeCentral,ローカル側の ItemBase のメソッド invokeCentral,セントラル側の FormBase のメソッド invokeLocal,セントラル側の ItemBase のメソッド invokeLocal の呼出しを契機として呼び出される。

使用例

' フックメソッド Central を呼び出すローカル側のプログラム。
Dim SyohinCdObj As Records.SyohinCd = CType(iB_商品コード.invokeCentral("ForSList"), Records.SyohinCd)
' SList に表示するレコード群をローカル側に返送する (Central)。
Friend Function 中央局処理(ByVal fB As FormBase, ByVal Rm_Object As Object) As Object
    Select Case CType(Rm_Object, String)
        Case "ForSList"
            Dim co As Common = CType(fB.getCommon(), Common)
            Dim SyohinCdObj As Records.SyohinCd = New Records.SyohinCd(co.商品レコード.RecordCount)
            ' 
            co.商品レコード.SetCursorForAllRecords()
            Dim wk_Return As Integer = co.商品レコード.ReadSequential()
            Dim I As Integer = 0
            While wk_Return = 0
                SyohinCdObj.商品コード(I) = co.商品レコード.商品コード
                SyohinCdObj.商品名称(I) = co.商品レコード.商品名称
                SyohinCdObj.商品単価(I) = co.商品レコード.商品単価
                wk_Return = co.商品レコード.ReadSequential()
                I += 1
            End While
            ' 
            Return SyohinCdObj
    End Select
    Return Nothing
End Function ' 中央局処理
// フックメソッド Central を呼び出すローカル側のプログラム。
Records.SyohinCd SyohinCdObj = (Records.SyohinCd)iB_商品コード.invokeCentral("ForSList");
// SList に表示するレコード群をローカル側に返送する (Central)。
internal object 中央局処理( FormBase fB, object Rm_Object ) {
    switch ((string)Rm_Object) {
        case "ForSList":
            Common co = (Common)fB.getCommon();
            Records.SyohinCd SyohinCdObj = new Records.SyohinCd(co.商品レコード.RecordCount);
            // 
            co.商品レコード.SetCursorForAllRecords();
            int wk_Return = co.商品レコード.ReadSequential();
            int I = 0;
            while (wk_Return == 0) {
                SyohinCdObj.商品コード[I] = co.商品レコード.商品コード;
                SyohinCdObj.商品名称[I] = co.商品レコード.商品名称;
                SyohinCdObj.商品単価[I] = co.商品レコード.商品単価;
                wk_Return = co.商品レコード.ReadSequential();
                I += 1;
            }
            // 
            return SyohinCdObj;
        default:
            return null;
    }
} // 中央局処理
// フックメソッド Central を呼び出すローカル側のプログラム。
// Records.SyohinCd SyohinCdObj = (Records.SyohinCd) iB_商品コード.invokeCentral("ForSList");
// SList に表示するレコード群をローカル側に返送する (Central)。
Object 中央局処理( FormBase fB, Object Rm_Object ) {
    if (Rm_Object instanceof String && Rm_Object.equals("ForSList")) {
        Common co = (Common) fB.getCommon();
        Records.SyohinCd SyohinCdObj = new Records.SyohinCd(
                co.商品レコード.RecordCount);
        // 
        co.商品レコード.SetCursorForAllRecords();
        int wk_Return = co.商品レコード.ReadSequential();
        int I = 0;
        while (wk_Return == 0) {
            SyohinCdObj.商品コード[I] = co.商品レコード.商品コード;
            SyohinCdObj.商品名称[I] = co.商品レコード.商品名称;
            SyohinCdObj.商品単価[I] = co.商品レコード.商品単価;
            wk_Return = co.商品レコード.ReadSequential();
            I += 1;
        }
        // 
        return SyohinCdObj;
    } else {
        return null;
    }
} // 中央局処理