ドミノの機能を使用したストアド・プロシージャ

トリガーなどで使うことを念頭において、データをわたすとドミノのデータベースに文書を作成して、リンクを(承認などのために)担当者に送る、といったストアド・プロシージャを作成してみました。
Java を使ったストアド・プロシージャの基本的なことについてはこちらを参照してください。

今回のテーマは

といったところですね。


UDB 上でドミノの機能を使用するためには、こちらで紹介したような処理が必要です。

まず、最初にロジックを見てみましょう。

リソースバンドルから接続サーバー名やユーザー名を取得し、与えられたデータをもとに文書を作成し、そのドキュメントリンクを作ってメールする、といった一連の処理です。(リソースバンドルの使い方についてはこちらを参照してください)

Document mail = database.createDocument();
System.out.println("another Document created");
mail.replaceItemValue("Subject", "新規登録のお知らせ");
mail.replaceItemValue("Form", "Memo");
mail.replaceItemValue("Sendto", sendto);
System.out.println("replaceItemValues ok");
RichTextItem body = mail.createRichTextItem("Body");
System.out.println("createRichTextItem ok");
body.appendText("以下の会社が登録されました:");
System.out.println("appendText ok");
body.addNewLine(2);
System.out.println("addNewLine ok");
// body.appendDocLink(database, database.getTitle(), "データベースへのリンク");
// System.out.println("appendDoclink ok");
body.addNewLine();
System.out.println("addNewLine ok");
String msg = "会社名: " + custid + " " + custname;
// body.appendDocLink(document, "会社名: " + custid + " " + custname, "該当文書へのリンク");
body.appendDocLink(document, "会社名: " + custid + " " + custname);
System.out.println("appendDoclink ok");
// mail.setSaveMessageOnSend(false);
System.out.println("all set");
mail.send(sendto);
System.out.println("Document sent");

リソースバンドルからは サーバー名/ユーザー名/パスワード/メールの送り先 を取得しています。

ResourceBundle props = ResourceBundle.getBundle("server");

String server = props.getString("server");
String user = props.getString("user");
String password = props.getString("password");
String sendto = props.getString("sendto");

これがリソースバンドルとして取得するプロパティファイルの内容 (server.properties) です。これらの情報の変更に関しては、これを変更するだけでクラス自体の再コンパイルなどはいらないわけですね。

server=asdomino
user=Admin
password=PASSWORD
sendto=Admin

セッションの取得、データベースの取得、ビューの取得までのながれはおなじみだと思いますので解説は省略します。

ストアド・プロシージャで使用する場合でも、UDF で使用する場合でもロジック自体のテストは単体で終えてから、データベースへの配置を行なうようにします。デバッグがわけわからなくなるのと、データベースサーバー自体の Java VM をおかしくしてしまったりすることがあるからです。じゅうぶん気をつけてください。

今回はこんなテストプログラムを使用してロジックを検証しました。

import lotus.domino.*;
import java.sql.*;
import java.io.*;
import java.util.*;

public class TestFunction {

public static void main(String[] args) {

try {
TestFunction tf = new TestFunction();
tf.RegistCustomer ("888", "テスト", "葛飾区", "新宿", 100);
}
// catch (NotesException ne) {}
catch (SQLException se) {}
catch (Exception e) {}

}

public static void RegistCustomer (String custid, String custname, String addr1, String addr2, int intsales)
throws SQLException, Exception {

try {
ResourceBundle props = ResourceBundle.getBundle("server");

String server = props.getString("server");
String user = props.getString("user");
String password = props.getString("password");
String sendto = props.getString("sendto");

Session session = NotesFactory.createSession(server, user, password);
System.out.println("Connected");

Database database = session.getDatabase("", "UDBTest.nsf");
System.out.println("got Database");

Document document = database.createDocument();
document.replaceItemValue("Form", "CustForm");
document.replaceItemValue("CustID", custid);
document.replaceItemValue("CustName", custname);
String addr = addr1.trim() + " " + addr2;
document.replaceItemValue("CustAddr", addr);
Double sales = new Double(intsales);
document.replaceItemValue("Sales", sales);
document.save();
System.out.println("Document saved");

Document mail = database.createDocument();
System.out.println("another Document created");
mail.replaceItemValue("Subject", "新規登録のお知らせ");
mail.replaceItemValue("Form", "Memo");
mail.replaceItemValue("Sendto", sendto);
System.out.println("replaceItemValues ok");
RichTextItem body = mail.createRichTextItem("Body");
System.out.println("createRichTextItem ok");
body.appendText("以下の会社が登録されました:");
System.out.println("appendText ok");
body.addNewLine(2);
System.out.println("addNewLine ok");
// body.appendDocLink(database, database.getTitle(), "データベースへのリンク");
// System.out.println("appendDoclink ok");
body.addNewLine();
System.out.println("addNewLine ok");
// body.appendDocLink(document, "会社名: " + custid + " " + custname, "該当文書へのリンク");
body.appendDocLink(document, "会社名: " + custid + " " + custname);
System.out.println("appendDoclink ok");
// mail.setSaveMessageOnSend(false);
System.out.println("all set");
mail.send(sendto);
System.out.println("Document sent");

document.recycle();
mail.recycle();
session.recycle();
}
catch (NotesException ne) {}
// catch (SQLException se) {}
catch (Exception e) {}

}
}

目新しいところでは文書リンクの作成ですね。

リッチテキストアイテムを作成し、appendDocLink メソッドを使用します。

メソッドのシグネチャにはいくつかの種類があり、以下のようなかたちだと

body.appendDocLink(document, "会社名: " + custid + " " + custname);

こんなかんじになります。(一番下の行も見てくださいね。カーソルはリンクにおいた状態です)

以下のようなシグネチャだと

body.appendDocLink(document, "会社名: " + custid + " " + custname, "該当文書へのリンク");

こんなかんじの結果になります。

微妙にサイズが違いますね。ちょっとだけ大きい方が、最後に紹介した方です。

リンクをクリックすると文書が開きます。

こちらがデータベースのビューから見たところです。

テストのすんだプログラムからメソッドを移行して、ストアド・プロシージャを作成します。
デバッグ用の System.out.println は必要ないので、すべて削除します。

import lotus.domino.*;
import java.sql.*;
import java.io.*;
import java.util.*;

public class DominoStoredProcs {

public static void RegistCustomer (String custid, String custname, String addr1, String addr2, int intsales)
throws SQLException, Exception {

try {
ResourceBundle props = ResourceBundle.getBundle("server");

String server = props.getString("server");
String user = props.getString("user");
String password = props.getString("password");
String sendto = props.getString("sendto");

Session session = NotesFactory.createSession(server, user, password);

Database database = session.getDatabase("", "UDBTest.nsf");

Document document = database.createDocument();
document.replaceItemValue("Form", "CustForm");
document.replaceItemValue("CustID", custid);
document.replaceItemValue("CustName", custname);
String addr = addr1.trim() + " " + addr2;
document.replaceItemValue("CustAddr", addr);
Double sales = new Double(intsales);
document.replaceItemValue("Sales", sales);
document.save();

Document mail = database.createDocument();
mail.replaceItemValue("Subject", "新規登録のお知らせ");
mail.replaceItemValue("Form", "Memo");
mail.replaceItemValue("Sendto", sendto);
RichTextItem body = mail.createRichTextItem("Body");
body.appendText("以下の会社が登録されました:");
body.addNewLine(2);
// body.appendDocLink(database, database.getTitle(), "データベースへのリンク");
// System.out.println("appendDoclink ok");
body.addNewLine();
// body.appendDocLink(document, "会社名: " + custid + " " + custname, "該当文書へのリンク");
body.appendDocLink(document, "会社名: " + custid + " " + custname);
// mail.setSaveMessageOnSend(false);
mail.send(sendto);

document.recycle();
mail.recycle();
session.recycle();
}
catch (NotesException ne) {}
// catch (SQLException se) {}
catch (Exception e) {}

}
}

以前と同じ手順でストアドプロシージャを作成していきます。

対話型 SQL を使って確認してみます。

指定した通りの文書が作成されています。

確認メールもきていますね。

メールの内容はこんなかんじです。

リンクをクリックすると該当の文書にリンクします。

[Top Pageに戻る]

[PR] | 貴金属 買取ハウスクリーニング韓国食材インプラント転職サイトSEOアクセス解析ハウスメーカーレンタルオフィスSEO対策消費者金融不動産担保ローン時計車 買取ハワイ挙式アスクル転職生命保険テンプレート沖縄旅行動画免許合宿二輪引越し消費者金融税理士ゴルフ会員権留学レーシックマッサージFX投資信託くりっく365アフィリエイト育毛剤FXホームページ制作デイトレードFXタイバンコクハワイ レンタカーベスト ハワイ ホテル レーツバリ島年末年始ハワイHawaii hotelsHawaii Activitiesbhhrホノルルマラソン
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行
無料ホームページ作成 - レンタルサーバー - 携帯ホームページ - ブログ - ホテル 予約 - タイムシェア - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル - ハワイ 不動産 - プーケット ホテル