電子フォームワークフローセット アプリケーション開発ガイド
ここでは,ユーザ追加処理で次の処理を追加します。
ユーザ追加処理をカスタマイズする手順を次に示します。
カスタマイズの作業では,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クラスのどのメソッドを使用するかを決定することで,稟議2作業の宛先情報をドロップダウンリストへ追加するタイミングを決定します。
ここではEUR Form帳票を表示する直前のタイミングで処理を実行させたいため,ufsv_addEURFormPreparation(帳票前処理)メソッドを使用します。
図2-17 帳票IDと帳票クラス名の対応
ufsv_addEURFormPreparation(帳票前処理)メソッドを次のようにカスタマイズします。
try{
if("受付-受付".equals(befpi.getInfo(befpi.BEF_NODENAME))){
////////////////////////////////////////////////////////////
// 宛先プルダウンのソート処理開始(EUR Form連携帳票)
////////////////////////////////////////////////////////////
// ユーザIDの取得
String l_strUserID = befpi.getBLCInfo().getAuthenticateObject().getUserId();
// BLCDirsオブジェクトの取得
BLCDirs l_blcdir = new BLCDirsLoader().getDirsObject();
ArrayList l_arrylist = new ArrayList();
//取得属性を指定:指定可能な属性は,以下のマニュアル参照。
//「Hitachi Business Logic - Container 2 JavaTMクラスリファレンス」
//「BLCDirsクラス getTargetInfo メソッド」
l_arrylist.add("CDTARGET"); // 宛先ユーザID
l_arrylist.add("NMBELONGTO"); // 宛先の所属組織略称
l_arrylist.add("CDJOBTITLE"); // 宛先の役職コード
l_arrylist.add("NMJOBTITLE"); // 宛先の役職略称
l_arrylist.add("NMLASTNAME"); // 宛先の名字
l_arrylist.add("NMFIRSTNAME"); // 宛先の名前
//役職コード昇順でソートした宛先リストを取得し,宛先情報ディクショナリに設定。
//例:宛先の役職コードの降順
BLCDictionary l_DicTarget = l_blcdir.getTargetInfo(l_strUserID,l_arrylist,"CDJOBTITLE DESC");
//EUR Formドロップダウンオブジェクトの生成
EFormDropdownListSetter l_efDDLSetter = new EFormDropdownListSetter();
//宛先ドロップダウンにデフォルト表示項目を追加
//「宛先を選択してください。」
l_efDDLSetter.add(BLCSTRPortal.get(BLCSTRPortal.FMTARGETCLICK),"未選択");
StringBuffer l_sbTarget = null;
String l_strIndex = null;
String l_strTargetUser = null;
// 宛先登録件数取得
int l_cntTarget = ((Integer)l_DicTarget.get("blc_target_total")).intValue();
// 宛先登録件数分ループ
for (int i=1;i <= l_cntTarget;i++){
l_strIndex = String.valueOf(i);
//宛先ユーザIDの取得
l_strTargetUser = l_DicTarget.item("blc_target_id_" + l_strIndex);
// 宛先ユーザの表示文字列生成
// 表示内容は「氏名(組織略称 役職略称)」
l_sbTarget = new StringBuffer();
l_sbTarget.append(l_DicTarget.item("blc_target_nmfull_" + l_strIndex));
l_sbTarget.append("(");;
l_sbTarget.append(l_DicTarget.item("blc_target_aborg_" + l_strIndex));
l_sbTarget.append(" ");
l_sbTarget.append(l_DicTarget.item("blc_target_abjob_" + l_strIndex));
l_sbTarget.append(")");
// 宛先ユーザをプルダウンリストに追加
l_efDDLSetter.add(l_sbTarget.toString(),l_strTargetUser);
l_sbTarget = null;
}
|
(続く) (続き)
// EUR帳票コントロールの変更
//受付-受付の時は,ドロップダウンリストを必須入力にする。
//modifyInstanceDataItem:初期値の設定
efDoc.modifyControl("CID_DL_ADDRESS2", l_efDDLSetter);
efDoc.modifyInstanceDataItem("CID_DL_ADDRESS2", "未選択");
////////////////////////////////////////////////////////////
// 宛先プルダウンのソート処理終了
////////////////////////////////////////////////////////////
}
} catch ( BLCException err ) {
throw err;
} catch ( Exception err ) {
BLCException blcErr = BLCException.getUserException( err, 50001, new String [] { "arg1" } );
throw blcErr;
}
|
ufsv_addEURFormPreparationメソッドのカスタマイズの詳細を以降で説明します。
(3)で決定したメソッド(EUR Form帳票を表示する直前のタイミングで呼ばれるメソッド)に,受付作業でだけ稟議2作業の宛先情報をドロップダウンリストへ追加するよう,条件文を設定します。条件判定には,BLCEURFormProcessInfoクラス(SampleConsultationEUR_1_Class.javaでの変数名は「befpi」)のgetInfoメソッドを使用します。
条件文の設定内容を次に示します。
カスタマイズの内容を次に示します。
if("受付-受付".equals(befpi.getInfo(befpi.BEF_NODENAME))){
}
|
稟議2作業の宛先情報の取得は,次の六つの部分に分かれます。
それぞれについて説明します。
String l_strUserID = befpi.getBLCInfo().getAuthenticateObject().getUserId(); |
BLCDirs l_blcdir = new BLCDirsLoader().getDirsObject(); |
ArrayList l_arrylist = new ArrayList();
//取得属性を指定:指定可能な属性は,以下のマニュアル参照。
//「Hitachi Business Logic - Container 2 JavaTMクラスリファレンス」
//「BLCDirsクラス getTargetInfo メソッド」
l_arrylist.add("CDTARGET"); // 宛先ユーザID
l_arrylist.add("NMBELONGTO"); // 宛先の所属組織略称
l_arrylist.add("CDJOBTITLE"); // 宛先の役職コード
l_arrylist.add("NMJOBTITLE"); // 宛先の役職略称
l_arrylist.add("NMLASTNAME"); // 宛先の名字
l_arrylist.add("NMFIRSTNAME"); // 宛先の名前
//役職コード昇順でソートした宛先リストを取得し,宛先情報ディクショナリに設定。
//例:宛先の役職コードの降順
BLCDictionary l_DicTarget = l_blcdir.getTargetInfo(l_strUserID,l_arrylist,"CDJOBTITLE DESC");
|
//EUR Formドロップダウンオブジェクトの生成 EFormDropdownListSetter l_efDDLSetter = new EFormDropdownListSetter(); //宛先ドロップダウンにデフォルト表示項目を追加 //「宛先を選択してください。」 l_efDDLSetter.add(BLCSTRPortal.get(BLCSTRPortal.FMTARGETCLICK),"未選択"); |
StringBuffer l_sbTarget = null;
String l_strIndex = null;
String l_strTargetUser = null;
//宛先登録件数取得
int l_cntTarget = ((Integer)l_DicTarget.get("blc_target_total")).intValue();
//宛先登録件数分ループ
for(int i=1;i<=l_cntTarget;i++){
l_strIndex = String.valueOf(i);
//宛先ユーザIDの取得
l_strTargetUser = l_DicTarget.item("blc_target_id_" + l_strIndex);
//宛先ユーザの表示文字列生成
//表示内容は「氏名(組織略称 役職略称)」
l_sbTarget = new StringBuffer();
l_sbTarget.append(l_DicTarget.item("blc_target_nmfull_" + l_strIndex));
l_sbTarget.append("(");
l_sbTarget.append(l_DicTarget.item("blc_target_aborg_" + l_strIndex));
l_sbTarget.append(" ");
l_sbTarget.append(l_DicTarget.item("blc_target_abjob_" + l_strIndex));
l_sbTarget.append(")");
//宛先ユーザをプルダウンリストに追加
l_efDDLSetter.add(l_sbTarget.toString(),l_strTargetUser);
l_sbTarget = null;
}
|
//EUR帳票コントロールの変更
//受付-受付のときは,ドロップダウンリストを必須入力にする。
//modifyInstanceDataItem:初期値の設定
efDoc.modifyControl("CID_DL_ADDRESS2",l_efDDLSetter);
efDoc.modifyInstanceDataItem("CID_DL_ADDRESS2","未選択");
|
ユーザ定義クラス(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;
NodeList l_nodeList2 = null;
Node l_nodeWork = null;
Node l_nodeChildWork = null;
Node l_nodeWork2 = null;
Node l_nodeChildWork2 = null;
String l_str = null;
String l_str2 = null;
// 指定されたメンバ名(タグ名)のノードリストを取得
l_nodeList = l_doc.getElementsByTagName("宛先");
l_nodeList2 = l_doc.getElementsByTagName("宛先2");
if(l_nodeList.getLength() == 1 && l_nodeList2.getLength() == 1){
// 1個存在した場合
l_nodeWork = l_nodeList.item(0);
l_nodeWork2 = l_nodeList2.item(0);
// 子ノードを取得
l_nodeChildWork = l_nodeWork.getFirstChild();
l_nodeChildWork2 = l_nodeWork2.getFirstChild();
if(l_nodeChildWork != null &&
l_nodeChildWork.getNodeType() == Node.TEXT_NODE &&
l_nodeChildWork2 != null &&
l_nodeChildWork2.getNodeType() == Node.TEXT_NODE){
// 子ノードが存在,かつノード種別がTextの場合
l_str = l_nodeChildWork.getNodeValue();
l_str2 = l_nodeChildWork2.getNodeValue();
}
}else{
// 存在しない or 複数存在
// error
}
befpi.setInfo(befpi.BEF_ATTRNUM,"4");
befpi.setInfo(befpi.BEF_ATTRDATA+"3",l_str);
befpi.setInfo(befpi.BEF_ATTRDATA+"4",l_str2);
}
|
なお,コンパイルを通すには,次のパッケージをインポートする必要があります。
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メソッドのカスタマイズの詳細を以降で説明します。
(5)で決定したメソッド(ボタンをクリックするタイミングで呼ばれるメソッド)に,受付作業の[承認]ボタンがクリックされた場合に宛先情報をデータベースへ追加するよう,条件文を設定します。条件判定には,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_dbfObj = 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;
NodeList l_nodeList2 = null;
Node l_nodeWork = null;
Node l_nodeChildWork = null;
Node l_nodeWork2 = null;
Node l_nodeChildWork2 = null;
String l_str = null;
String l_str2 = null;
// 指定されたメンバ名(タグ名)のノードリストを取得
l_nodeList = l_doc.getElementsByTagName("宛先");
l_nodeList2 = l_doc.getElementsByTagName("宛先2");
if(l_nodeList.getLength() == 1 &&l_nodeList2.getLength() == 1){
// 1個存在した場合
l_nodeWork = l_nodeList.item(0);
l_nodeWork2 = l_nodeList2.item(0);
// 子ノードを取得
l_nodeChildWork = l_nodeWork.getFirstChild();
l_nodeChildWork2 = l_nodeWork2.getFirstChild();
if(l_nodeChildWork != null &&
l_nodeChildWork.getNodeType() == Node.TEXT_NODE &&
l_nodeChildWork2 != null &&
l_nodeChildWork2.getNodeType() == Node.TEXT_NODE){
// 子ノードが存在,かつノード種別がTextの場合
l_str = l_nodeChildWork.getNodeValue();
l_str2 = l_nodeChildWork2.getNodeValue();
}
}else{
// 存在しない or 複数存在
// error
}
|
宛先情報をNMITEM3カラムおよびNMITEM4カラムへ設定するには,BLCEURFormProcessInfoクラス(SampleConsultationEUR_1_Class.javaでの変数名はbefpi)のsetInfoメソッドを使用します。
カスタマイズの内容を次に示します。
befpi.setInfo(befpi.BEF_ATTRNUM,"4"); befpi.setInfo(befpi.BEF_ATTRDATA+"3",l_str); befpi.setInfo(befpi.BEF_ATTRDATA+"4",l_str2); |
All Rights Reserved. Copyright (C) 2007, 2010, Hitachi, Ltd.