Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

目次

Developerの内部仕様

 前ページの画面仕様をDeveloperにて実現する場合、次のような作業が必要となります。

  • ウィンドウ、キャンバスを定義
  • データブロックを定義(ヘッダ部、明細部)
  • 明細部のデータブロックに対して、テーブル[HINMK_TBL]を結びつける
  • 明細部に項目(HINMK_CD、HINMK_NM)を定義
  • ヘッダ部のデータブロックに項目(検索ボタン)を定義
  • 検索ボタン押下時に、明細部へ遷移するように定義(WHEN-BUTTON-PRESSEDトリガーに go_block('明細部')と書く)
  • 明細部に遷移時、execute_queryを実行するように定義(WHEN-NEW-BLOCK-INSTANCEトリガーに execute_queryと書く)

 ロジックと呼べるものはほとんどなく、プロパティの設定で実装可能なのが特徴です。

Curl+ORBで実装する場合

 Curl+ORBで実装する場合は、サーバ側とクライアント側の各々での定義が必要です。データアクセスをサーバ側(Java)で、画面コントロールをクライアント側(Curl)で実装します。Developerはデータアクセスロジックと画面コントロールロジックが融合して実装されていることが多いため、移行する場合はまず「データアクセスロジック」と「画面コントロールロジック」に分割する必要があります。

サーバ側

 サーバ側はJavaで実装します。検索ボタン押下時の処理として、サービスクラスに以下のロジックを定義します。

  • JDBCを用いて、Oracle DBに対してSQLを実行
  • 実行した結果をデータクラスに設定

クライアント側

 クライアント側はCurlで実装します。

  • RecordGrid(名細部)とボタン(検索部)を定義
  • 検索ボタンに対して、ボタン押下時にサーバ側のサービスクラスを実行するように定義
  • サーバ側から返却された結果をRecordGridに定義

 Curl Developer Centerに掲載されている「Curl ORB for Java」の関連記事も併せて参照ください。

サーバ側の実装

 まず、サーバ側の実装を見て行きましょう。実際に定義するプログラムは「HinmkLst.java」「Hinmk.java」の2つです。

HinmkLst.java

 サービスクラスです。品目一覧画面をコントロールするための[HinmkLst]クラスを定義し、検索ボタン押下時の処理として、[kensaku]メソッドを定義します。JDBCを用いて、Oracle DBに対してSQLを実行し、結果をデータクラス(Hinmk)に設定します。クライアントにCurlを使っていることを意識させない、一般的なJavaでのDBアクセスロジックと同様です。

HinmkLst.java
package sample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import com.curlap.orb.security.RemoteService;

/**
 * HttpSession sample
 */
@RemoteService
public class HinmkLst  {

    public ArrayList<Hinmk> kensaku(String pi_cd) throws Exception{

        //クライアントには、配列(ArrayList)型で返却する。
        ArrayList<Hinmk> hinmklist = new ArrayList<Hinmk>();
        
        try
        {
            /* 初期処理 */
            // Oracle JDBC Driverのロード
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // Oracle に接続
            Connection conn = DriverManager.getConnection
            ("jdbc:oracle:thin:@dbhosts:1521:instancename", "user", "user");
            // ステートメントを作成
            Statement stmt = conn.createStatement();

            /* 主処理 */
            /////SQLを実行する
            ResultSet rs  = stmt.executeQuery("SELECT hinmk_cd,hinmk_nm FROM hinmk_tbl");
            //取得結果をセット
            rs.next();
            while(rs.next())
            {
                Hinmk hinmk = new Hinmk();                      //データクラスの生成
                hinmk.setHinmk_cd(rs.getString("hinmk_cd"));    //HINMK_CDの値を設定
                hinmk.setHinmk_nm(rs.getString("hinmk_nm"));    //HINMK_NMの値を設定
                
                hinmklist.add(hinmk); //1行分のデータとして配列へ設定する。
            }

            /* 終了処理 */
            rs.close();
            stmt.close();

            /////////////////////////////////////////////////////////////////////////////////////////////
            conn.close();

        }catch(Exception wl_excp)
        {
            throw new Exception(wl_excp) ;
        }
        return hinmklist;
    }

    public Object echo(Object v) {
        return v;
    }
}

Hinmk.java

 テーブル[HINMK_TBL]を格納するためのデータクラスです。

Hinmk.java
package sample;

/**
 * データクラス(HINMK_TBLの結果を格納する)
 */
public class Hinmk implements java.io.Serializable {
 
 private static final long serialVersionUID = -5592465168071966675L;

 /* フィールド */
 private String hinmk_cd;   //HINMK_CD
 private String hinmk_nm;  //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;
 }
 
}

 サーバサイドで作成するロジックは以上です。


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

著者プロフィール

バックナンバー

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

もっと読む

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