サーバへのデータの送信
この章では、Zen Mojo ページからサーバにデータを送信する方法について説明します。項目は以下のとおりです。
概要は、第 1 章の “データの送信” を参照してください。
サーバへのデータの送信
ページからサーバにデータを送信できるようにするには、以下の手順を実行します。
-
テンプレート・クラスで、送信オブジェクトをサーバに送信するメソッドを定義します。このメソッドで、以下の操作を実行します。
-
必要な値をページから取得します。コントロールの値を取得するには、getControlValue() を使用します。“レイアウト・オブジェクトとの対話操作” の章も参照してください。
-
送信オブジェクトを作成します。このオブジェクトは、送信するデータを保持する JSON オブジェクトです。このオブジェクトには、必要なプロパティを指定できます。
-
送信オブジェクトを引数として使用し、ページ・メソッド submitData() を呼び出します。
このメソッドには、以下のシグニチャがあります。
ClientMethod submitData(key, data, notify) [ Language = javascript ]
以下はその説明です。
-
key — サーバにデータを送信する際に使用するキー。
-
data — サーバに送信するデータを保持する JSON オブジェクト。送信するデータがない場合には、この引数を省略できます。つまり、空のオブジェクトを含める必要はありません。
-
notify — null または関数のどちらか。この引数が関数の場合は、ページからサーバに対してデータが (同期的ではなく) 非同期的に送信されます。その後、データが送信されると、ページはこの引数によって指定された関数を実行します。
このメソッドはテンプレート・クラスの %OnSubmitData() メソッドを呼び出します。次の箇条書き項目を参照してください。
-
-
必要に応じて、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
}