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?

サーバへのデータの送信

この章では、Zen Mojo ページからサーバにデータを送信する方法について説明します。項目は以下のとおりです。

概要は、第 1 章の “データの送信” を参照してください。

サーバへのデータの送信

ページからサーバにデータを送信できるようにするには、以下の手順を実行します。

  • テンプレート・クラスで、送信オブジェクトをサーバに送信するメソッドを定義します。このメソッドで、以下の操作を実行します。

    1. 必要な値をページから取得します。コントロールの値を取得するには、getControlValue() を使用します。“レイアウト・オブジェクトとの対話操作” の章も参照してください。

    2. 送信オブジェクトを作成します。このオブジェクトは、送信するデータを保持する JSON オブジェクトです。このオブジェクトには、必要なプロパティを指定できます。

    3. 送信オブジェクトを引数として使用し、ページ・メソッド submitData() を呼び出します。

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

      ClientMethod submitData(key, data, notify) [ Language = javascript ]
      

      以下はその説明です。

      • key — サーバにデータを送信する際に使用するキー。

      • data — サーバに送信するデータを保持する JSON オブジェクト。送信するデータがない場合には、この引数を省略できます。つまり、空のオブジェクトを含める必要はありません。

      • notify — null または関数のどちらか。この引数が関数の場合は、ページからサーバに対してデータが (同期的ではなく) 非同期的に送信されます。その後、データが送信されると、ページはこの引数によって指定された関数を実行します。

      このメソッドはテンプレート・クラスの %OnSubmitData() メソッドを呼び出します。次の箇条書き項目を参照してください。

    4. 必要に応じて、submitData() によって返される応答オブジェクトに含まれるデータを使用します。

  • テンプレート・クラスで %OnSubmitData() メソッドを定義します。このメソッドには、以下のシグニチャがあります。

    ClassMethod %OnSubmitData(pKey As %String, 
                              pID As %String, 
                              pSubmitObject As %RegisteredObject, 
                              ByRef pResponseObject As %RegisteredObject) As %Status
    

    このメソッドは、参照によって pResponseObject を返します。

  • ページ・クラスの適切なイベント・ハンドラまたはコールバック内で、最初の箇条書き項目で作成したメソッドを呼び出します。

以下に、送信オブジェクトをサーバに送信するメソッドの簡単な例を示します。

ClientMethod myMainViewSelect(key, value) [ Language = javascript ]
{
    var mainView = zen('mainView');

    switch(key) {
    case 'submitEdits':
        var controlvalue1=mainView.getControlValue('enterName');
        var controlvalue2=mainView.getControlValue('enterCity');
        var submitobject={name:controlvalue1,city:controlvalue2};
        var response = zenPage.submitData('submitEdits',submitobject);
        if (response && response.message) {
            zenPage.showMessage(response.message);
        }
        mainView.updateLayout('fade');
        break;
    }

テンプレート・クラスで、以下のように %OnSubmitData() メソッドを定義します。

ClassMethod %OnSubmitData(pKey As %String, pID As %String, pSubmitObject As %RegisteredObject, 
                          ByRef pResponseObject As %RegisteredObject) As %Status
{
    Set tSC = $$$OK
    Try {
        if pKey="submitEdits"{
            set id=1
            set tPerson           = ##class(Sample.Person).%OpenId(id)
            set tPerson.Name      = pSubmitObject.name
            set tPerson.Home.City = pSubmitObject.city

            Set pResponseObject = ##class(%ZEN.proxyObject).%New()
            Set tSC = tPerson.%Save()
            If $$$ISERR(tSC) { 
                Set pResponseObject.message = "Your changes were not successfully saved"
                Quit}

            Set pResponseObject.message = "Your changes have been successfully saved"
        }
    }
    Catch(ex) {
        Set tSC = ex.AsStatus()
    }
    Quit tSC
}
FeedbackOpens in a new tab