クライアント側の実装
続いて、クライアント側の実装を説明します。実際に定義するプログラムは「sample1.curl」「Hinmk.curl」の2つです。
sample1.curl
画面プログラムです。最も魂をこめて作成する部分ですが、ご覧のようにとてもシンプルです。一般的なWebシステムの場合、サーバサイドから返却されたデータを取得する部分が煩雑になりがちですが、Curl+ORBで実現するととてもシンプルな構成となります。
{curl 6.0, 7.0, 8.0 applet}
{curl-file-attributes character-encoding = "utf8"}
{applet manifest = "manifest.mcurl", {compiler-directives careful? = true}}
{import * from SAMPLE}
||--
{let staff:RecordSet = {RecordSet
{RecordFields
{RecordField "HINMK_CD", domain = String},
{RecordField "HINMK_NM", domain = String}
}
}
}
{let rv:RecordView = {RecordView staff}}
||--明細部(RecordGrid)
{let rg:RecordGrid = {RecordGrid
record-source = rv,
height = 10cm,
width = 7.5cm,
display-navigation-panel? = false
}
}
||--検索部(検索ボタン)
{def cb1 = {CommandButton
label = "検索",
width = 7.2cm,
||--ボタン押下時のイベント
{on Action do
||--サーバにアクセスする
def search-service = {HinmkLst server-url = {url "http://curl-svr:8080/curl-orb-server/"}}
||--Javaで作成したサービスクラスを呼び出す。(result-listに結果が返却される)
def result-list:#{Array-of any} = {search-service.kensaku ""}
||--サービスクラスからの結果をRecordGridに設定します。
{if-non-null result-list then
{rg.records.delete-all}
||--サーバから返却されたresult-listの件数分Recordに設定します。
{for item in result-list do
{type-switch item
case item:Hinmk do
def r = {rv.new-record}
set r["HINMK_CD"] = item.hinmk_cd
set r["HINMK_NM"] = item.hinmk_nm
{rg.records.append r}
}
}
{rg.records.commit}
}
{search-service.destroy-instance}
}
}
}
{value {spaced-vbox cb1, rg}}
Hinmk.curl
サーバ側で定義したデータクラス(Hinmk)と同じ定義を行います。以下のソースコードは、ORBのツールにて自動生成できるのでコーディングは不要です。
package sample;
/**
* データクラス
*/
public class Hinmk implements java.io.Serializable {
private static final long serialVersionUID = -5592465168071966675L;
private String hinmk_cd;
private String hinmk_nm;
public String getHinmk_cd() {
return hinmk_cd;
}
public void setHinmk_cd(String hinmk_cd) {
this.hinmk_cd = hinmk_cd;
}
public String getHinmk_nm() {
return hinmk_nm;
}
public void setHinmk_nm(String hinmk_nm) {
this.hinmk_nm = hinmk_nm;
}
}
HinmkLst.curl
サーバ側で定義したサービスクラス(HinmkLst)と同じ定義を行います。こちらのソースコードもHinmk.curlと同様、ORBのツールにて自動生成できるのでコーディングは不要です。
|||
||| Curl ORB for java (version 0.8)
||| This code was generated by the Curl code generator automatically.
||| package name : SAMPLE
||| generated date : 2011-10-31 10:31:36.836000
|||
{import * from COM.CURLAP.ORB}
{define-class public HinmkLst {inherits HttpSessionClient}
{constructor public {default server-url:#Url = null}
{construct-super.HttpSessionClient "sample.HinmkLst", server-url = server-url}
}
{method public {echo v0:any}:any
{return {self.invoke "echo", arguments = {FastArray v0}}}
}
{method public {kensaku v0:String}:#Array
{return {self.invoke "kensaku", arguments = {FastArray v0}} asa #Array}
}
}
サーバ(Java側)で作成されたデータクラスをクライアント(Curl側)で受け取って表示しています。サーバ側とクライアント側のデータクラスを同じ定義とすることで、JavaとCurlで異なる言語にも関わらず、それを意識する必要がありません。
Hinmk.curl、HinmkLst.curlの自動生成の詳細は、Curl Developer Centerのコード生成ツール・マニュアルを参照ください。

