本格的にCurlに移行したい場合
では、前ページまでで説明した、画面の作り替えだけでなく、本格的にDeveloperからCurlへと移行したい場合は、どのようにすればよいのでしょうか。
残念ながら、Developerで作成されたプログラムをCurlに移行するための専用のツールはありません。しかし、ちょっとした工夫で比較的簡単に移行できます。
Developer側のロジック
Developerのソースコードは、PL/SQLで作られているため、それらの業務ロジックをOracleのストアドプロシージャに移行させ、Javaにて移行したストアドプロシージャを呼び出すサービスクラスを作成し、Curlより作成したサービスクラスを呼び出す構成にします。こうすれば、スムーズに移行でき、既存資産も活かせます。
-
テキスト項目にコード入力確定時にコードに紐づく名称を表示(テキスト項目のWHEN-VALIDATE-ITEMにて商品マスタから名称を取得するSQL文を実行し、結果を名称項目に設定)
BEGIN //商品マスタから名称を取得する。 SELECT 商品名 INTO :検索条件.商品名 FROM 商品マスタ WHERE 商品コード = :検索条件.商品コード END;
-
検索ボタン押下時に在庫情報を取得し、表示(検索ボタンのWHEN-BUTTON-PRESSEDにてDBから各種情報を取得するためのSQL文(カーソル)を実行し取得結果を明細に設定)
DECLARE CURSOR C_SQL IS SELECT 倉庫コード,….. FROM 倉庫マスタ,…… WHERE 品目コード = …... BEGIN first_record; FOR r_SQL in C_SQL 受注 LOOP //明細行に設定 create_record; :明細.倉庫コード := r_SQL.倉庫コード; ………………………. END LOOP; END;
Curl+ORB側のロジック
-
Curl
APサーバ上のサービスクラスを呼び出し、その結果を該当の画面項目に設定
-
Java(APサーバ)
DBにてテキスト項目のWHEN-VALIDATE-ITEM、検索ボタンのWHEN-BUTTON-PRESSEDを実装したストアドプロシジャを作成し、Java(APサーバ)より実行、その戻り値をJavaのデータクラスに設定するようなサービスクラスを作成
-
DBサーバ
テキスト項目、ボタンに定義しているトリガーのロジックをストアドプロシジャ(※注1)に移行
DECLARE CURSOR C_SQL IS SELECT 倉庫コード,….. FROM 倉庫マスタ,…… WHERE 品目コード = …... BEGIN first_record; FOR r_SQL in C_SQL 受注 LOOP //明細行に設定 create_record; :明細.倉庫コード := r_SQL.倉庫コード; ………………………. END LOOP; END;
BEGIN //商品マスタから名称を取得する。 SELECT 商品名 INTO :検索条件.商品名 FROM 商品マスタ WHERE 商品コード = :検索条件.商品コード END;
※注1 ストアドプロシジャの定義・テキスト項目のWHEN-VALIDATE-ITEM
IN:商品コード
OUT:商品名
・検索ボタンのWHEN-BUTTON-PRESSED
IN:商品コード
OUT:明細行配列
を、NESTED TABLEにて定義します。
業務ロジック・データアクセス部分は全てDB層にて定義しており、APサーバ(Java)層は、ロジックを呼び出すだけのラップサービスです。3層構造ですが、APサーバの役割が小さくてすみます。