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アクセスロジックと同様です。
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]を格納するためのデータクラスです。
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;
}
}
サーバサイドで作成するロジックは以上です。

