CodeZine(コードジン)

特集ページ一覧

Oracleの「Developer」で作成された画面をCurlで実装!

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

クライアント側の実装

 続いて、クライアント側の実装を説明します。実際に定義するプログラムは「sample1.curl」「Hinmk.curl」の2つです。

sample1.curl

 画面プログラムです。最も魂をこめて作成する部分ですが、ご覧のようにとてもシンプルです。一般的なWebシステムの場合、サーバサイドから返却されたデータを取得する部分が煩雑になりがちですが、Curl+ORBで実現するととてもシンプルな構成となります。

sample1.curl
{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のツールにて自動生成できるのでコーディングは不要です。

Hinmk.curl
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のツールにて自動生成できるのでコーディングは不要です。

HinmkLst.curl
|||
||| 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で異なる言語にも関わらず、それを意識する必要がありません。

Curl ORB for Javaのソースコード自動生成機能について

 Hinmk.curl、HinmkLst.curlの自動生成の詳細は、Curl Developer Centerのコード生成ツール・マニュアルを参照ください。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:CurlデベロッパーセンターPick Up

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5