こちらの結果を踏まえて、次に実際にデータを取得してきて、ドミノのデータベースに保管する、ということを行なってみましょう。
データベースに文書を保管するためにはフォームが要りますので作成します。
以下のようにごく簡単なフォームを作成しました。上3つのフィールドがテキストで、最後のフィールドが数値です。

例えば一番上の「CustID」フィールドです。他の文字フィールドも同じです。

「Sales」フィールドです。「数値」にして、形式を「通貨」にしています。

次にエージェントを作成します。
テスト用のエージェントの時と手順はまったく同じです。
内容は以下のようになっています。
今までも何回か使用してきている EOL/400 の得意先マスターから、顧客番号、顧客名、顧客住所、当年売上高を全件選択して結果セットに格納します。
結果セットから一件ずつ取り出して、ノーツ文書として一件ずつ保管します。
replaceItemValue メソッドで、ノーツ文書のフィールドの値を指定するのですが、2つの引数が Object であるため、数値の場合はいったん Double などのオブジェクトを結果セットからの値取得時に作成して指定してやるようにします。
import lotus.domino.*;
import java.sql.*;
import com.ibm.db2.jdbc.app.*;
public class JavaAgent extends AgentBase {
DB2Connection con = null;
int num = 0;
// String addr = null;
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
Database database = agentContext.getCurrentDatabase();
connectToAS400();
DB2Statement stmt = (DB2Statement) con.createStatement();
DB2ResultSet rs = (DB2ResultSet) stmt.executeQuery("SELECT TKBANG, TKNAKJ, TKADR1, TKADR2, TKNURI FROM qeol.tokmsp ");
while (rs.next()) {
Document document = database.createDocument();
document.replaceItemValue("Form", "CustForm");
document.replaceItemValue("CustID", rs.getString("TKBANG"));
document.replaceItemValue("CustName", rs.getString("TKNAKJ"));
String addr = rs.getString("TKADR1").trim() + " " + rs.getString("TKADR2");
document.replaceItemValue("CustAddr", addr);
Double sales = new Double(rs.getInt("TKNURI"));
document.replaceItemValue("Sales", sales);
document.save();
document.recycle();
num++;
}
System.out.println(num + " documents have been saved");
rs.close();
stmt.close();
con.close();
System.out.println("Connection close");
database.recycle();
session.recycle();
System.out.println("All resources are freed.");
} catch(Exception e) {
e.printStackTrace();
}
}
public void connectToAS400() {
String url = "jdbc:db2://";
String system = "localhost";
String user = "USER";
String password = "PASSWORD";
try {
DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver());
// System.out.println("Driver registerd.");
con = (DB2Connection) DriverManager.getConnection(url + system, user, password);
System.out.println("got connected.");
con.setAutoCommit(false);
//System.out.println("Set AutoCommit Successful.");
}
catch (SQLException ex) {
System.out.println("could not get a connection.");
ex.printStackTrace();
return;
}
System.out.println("connected.");
return;
}
}
「プロジェクトの編集」も忘れずに行なってください。
コンパイルが完了したら、前回と同じように適当な時間にスケジュールしてから保管してください。
今回も同様にメッセージを出すようにしています。
実行を確認後、ノーツクライアントを使用して、正しくノーツ文書が作成されているかどうかをチェックします。
iSeries側で STRSQL での対話型SQL実行画面で、エージェントで使用しているのと同じ SQL ステートメントを実行してみましょう。
これが表示された結果です。
全件、先のフォームを使用した文書を、すべてのフィールドで表示するビューを作成しました。(実は次のノーツ文書から RDB への転送に使用します)
そのビューを使用して見た結果です。同じデータが表示されていますね。
|
|