電子フォームワークフローセット アプリケーション開発ガイド
審査業務ステップ内の審査作業(承認業務ステップの一つ前の作業)で帳票の[承認]ボタンをクリックしたときに,BLC_INBOX_TのNMITEM2カラムに提供価格の合計が設定されるようにします。
ユーザ追加処理をカスタマイズする手順を次に示します。
カスタマイズの作業では,SampleConsultationEUR_1_userServerSideClass.javaを直接編集するのではなく,SampleConsultationEUR_1_userServerSideClass.javaをコピーして名称を変更し,このファイルを編集していきます。
ファイルのコピーからオープンまでの手順を次に示します。
クラス名とコンストラクタ名を変更する手順を次に示します。
//サンプルソース(ご参考)
public class Custom_SampleConsultationEUR_1_userServerSideClass extends SampleConsultationEUR_1_Class {
//コンストラクタ
public Custom_SampleConsultationEUR_1_userServerSideClass(){
}
・・・
|
ユーザ定義クラス(Custom_SampleConsultationEUR_1_userServerSideClass)は,帳票クラス(SampleConsultationEUR_1_Class)を継承して,BLCEURFormBaseクラスのメソッドをオーバーライドしています。このため,BLCEURFormBaseクラスのどのメソッドを使用するかを決定することで,提供価格の合計を設定するタイミングを決定します。
ここではボタンをクリックしたタイミングで処理を実行させたいため,ufsv_addEURButtonPreparation(ボタンDB更新前処理)メソッドを使用します。
ufsv_addEURButtonPreparation(ボタンDB更新前処理)メソッドを次のようにカスタマイズします。
if("審査-審査".equals(befpi.getInfo(befpi.BEF_NODENAME)) && "ID_WICOMPLETE".equals(befpi.getInfo(befpi.BEF_ACCEPTID))){
//フォームデータの取得
String l_strFormData = befpi.getInfo(befpi.BEF_EURFORMDATA);
//DOMオブジェクトの生成
DocumentBuilderFactory l_dbfObj = null;
DocumentBuilder l_dbObj = null;
StringReader l_srReader = null;
InputSource l_isSource = null;
Document l_doc = null;
l_srReader = new StringReader(l_strFormData);
l_isSource = new InputSource((Reader)l_srReader);
l_dbfObj = DocumentBuilderFactory.newInstance();
l_dbObj = l_dbfObj.newDocumentBuilder();
l_doc =l_dbObj.parse(l_isSource);
//提供価格の取得
NodeList l_nodeList = null;
Node l_nodeWork = null;
Node l_nodeChildWork = null;
String l_str = null;
// 指定されたメンバ名(タグ名)のノードリストを取得
l_nodeList = l_doc.getElementsByTagName("提供合計");
if(l_nodeList.getLength() == 1){
// 1個存在した場合
l_nodeWork = l_nodeList.item(0);
// 子ノードを取得
l_nodeChildWork = l_nodeWork.getFirstChild();
if(l_nodeChildWork != null &&
l_nodeChildWork.getNodeType() == Node.TEXT_NODE){
// 子ノードが存在,かつノード種別がTextの場合
l_str = l_nodeChildWork.getNodeValue();
}
}else{
// 存在しない or 複数存在
// error
}
befpi.setInfo(befpi.BEF_ATTRNUM,"2");
befpi.setInfo(befpi.BEF_ATTRDATA+"2",l_str);
}
|
なお,コンパイルを通すには,次のパッケージをインポートする必要があります。
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; |
ufsv_addEURButtonPreparationメソッドのカスタマイズの詳細を以降で説明します。
(3)で決定したメソッド(ボタンをクリックしたタイミングで呼ばれるメソッド)に,審査作業の[承認]ボタンがクリックされたときに提供価格の合計をデータベースに追加するよう,条件文を設定します。条件判定には,BLCEURFormProcessInfoクラス(SampleConsultationEUR_1_Class.javaでの変数名は「befpi」)のgetInfoメソッドを使用します。
条件文の設定内容を次に示します。
カスタマイズの内容を次に示します。
if("審査-審査".equals(befpi.getInfo(befpi.BEF_NODENAME))
&& "ID_WICOMPLETE".equals(befpi.getInfo(befpi.BEF_ACCEPTID))){
}
|
提供価格の合計の取得は,次の三つの部分に分かれます。
それぞれについて説明します。
String l_strFormData = befpi.getInfo(befpi.BEF_EURFORMDATA); |
//DOMオブジェクトの生成
DocumentBuilderFactory l_dbfObj = null;
DocumentBuilder l_dbObj = null;
StringReader l_srReader = null;
InputSource l_isSource = null;
Document l_doc = null;
l_srReader = new StringReader(l_strFormData);
l_isSource = new InputSource((Reader)l_srReader);
l_dbfObj = DocumentBuilderFactory.newInstance();
l_dbObj = l_dbfObj.newDocumentBuilder();
l_doc =l_dbObj.parse(l_isSource);
|
図2-10 帳票作成時に指定したメンバ名
//提供価格の取得
NodeList l_nodeList = null;
Node l_nodeWork = null;
Node l_nodeChildWork = null;
String l_str = null;
// 指定されたメンバ名(タグ名)のノードリストを取得
l_nodeList = l_doc.getElementsByTagName("提供合計");
if(l_nodeList.getLength() == 1){
// 1個存在した場合
l_nodeWork = l_nodeList.item(0);
// 子ノードを取得
l_nodeChildWork = l_nodeWork.getFirstChild();
if(l_nodeChildWork != null &&
l_nodeChildWork.getNodeType() == Node.TEXT_NODE){
// 子ノードが存在,かつノード種別がTextの場合
l_str = l_nodeChildWork.getNodeValue();
}
}else{
// 存在しない or 複数存在
// error
}
|
提供価格の合計をNMITEM2カラムへ設定するには,BLCEURFormProcessInfoクラス(SampleConsultationEUR_1_Class.javaでの変数名はbefpi)のsetInfoメソッドを使用します。
カスタマイズの内容を次に示します。
befpi.setInfo(befpi.BEF_ATTRNUM,"2"); befpi.setInfo(befpi.BEF_ATTRDATA+"2",l_str); |
All Rights Reserved. Copyright (C) 2007, 2010, Hitachi, Ltd.