Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

古い Ensemble Web サービスの相違点

前のリリースでは、Ensemble Web メソッドから直接 SendRequestSync()SendRequestAsync()、または SendDeferredResponse() を呼び出すことはできませんでした。別の方法が必要でした。この付録では、この別の方法を使ったコードを維持する場合の利点について詳細に説明します。

概要

前のリリースでは、Ensemble Web メソッドから直接 SendRequestSync()SendRequestAsync()、または SendDeferredResponse() を呼び出すことはできませんでした。代わりに、このドキュメントで前述した要件のほかに、Ensemble Web サービスに対する 2 つの要件がありました。

  • 各 Web メソッドは、必要に応じて ProcessInput() メソッドを呼び出し、適切な要求 Ensemble メッセージを渡して、Ensemble 応答メッセージを受信しなければなりませんでした。

  • Web サービス・クラスでは、OnProcessInput() コールバック・メソッドを定義する必要がありました。このメソッドでは、SendRequestSync()SendRequestAsync()、または SendDeferredResponse() を呼び出します。

以下の図は、このシナリオでの要求メッセージの全体的なフローを示しています。

generated description: web service

OnProcessInput() メソッドの実装

OnProcessInput() メソッドには、以下のシグニチャがあります。

Method OnProcessInput(pInput As %RegisteredObject,
                      ByRef pOutput As %RegisteredObject,
                      ByRef pHint As %String) As %Status

ここで、

  1. pInput は、送信する Ensemble 要求メッセージです。

  2. pOutput は、返信として送信される Ensemble 応答メッセージです。

  3. pHint は、Ensemble 要求の処理方法を決定するために使用できるオプション文字列です。詳細は、“pHint 引数の使用” の項を参照してください。

以下に例を示します。

Method OnProcessInput(pInput As %RegisteredObject, ByRef pOutput As %RegisteredObject) As %Status
{
    set sc= ..SendRequestSync("Lookup",pInput,.pOutput)
    Quit sc
}

pHint 引数の使用

Web サービスに複数のメソッドが定義されている場合で、それらをプロダクション内の異なる宛先に送信する必要がある場合、次のように ProcessInput() および OnProcessInput() メソッドのオプションのヒント引数を使用していました。

  1. ProcessInput() を呼び出すときに、この呼び出しを行った Web メソッドを示すヒント引数の値を使用していました。以下に例を示します。

    Method GetCustomerInfo(ID As %Numeric) As ESOAP.SOAPResponse [ WebMethod ]
    {
        //create Ensemble request message with given ID
        set request=##class(ESOAP.CustomerRequest).%New()
        set request.CustomerID=ID
    
        //send Ensemble request message
        //ProcessInput() calls OnProcessInput(), which actually
        //sends the message
        set sc=..ProcessInput(request,.response,"GetCustomerInfo")
    ...
    
        quit soapresponse
    }
    
    
  2. OnProcessInput() 内で、ヒント引数を使用してフローを決定していました。以下に例を示します。

    Method OnProcessInputAlt(pInput As %RegisteredObject,
    ByRef pOutput As %RegisteredObject, pHint As %String) As %Status
    {
        if pHint="GetCustomerInfo"{
            set sc= ..SendRequestSync("GetCustomerInfoBO",pInput,.pOutput)
            }
        elseif pHint="GetStoreInfo" {
                set sc= ..SendRequestSync("GetStoreInfoBO",pInput,.pOutput)
        }
        Quit sc
    }
FeedbackOpens in a new tab