/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0111B022TPDA
*	ソースファイル名：JSYejbEDK0111B022TPDA.java
*	作成者			：EK909134
*	日付			：2011年07月15日
*＜機能概要＞
*	棚移動承認詳細一覧照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbs.sqlf;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateDBAccessHandler;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EDK0111B022CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0111B022CBSMsg1List;
import eo.ejb.cbm.entity.DK0111ETMsg;
import eo.ejb.common.JDKModelCommon;
import static eo.ejb.common.JDKModelCommon.*;
import static eo.common.constant.JZM0171Constant.*;

/**
*
*  テンプレートDBアクセス部品　EDK0111B022_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEDK0111B022TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEDK0111B022TPDA()	{
	}
	
	/**
	*   EDK0111B022_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmtForCount = null;
		PreparedStatement pstmtForFetch = null;
		
		// リザルトセット
		ResultSet rsltQueryForCount = null;
		ResultSet rsltQueryForFetch = null;
		
		/* ++++++++++ ｖ1.00.00 追加開始 ++++++++++ */
		/***************************************************** 
		 * サービスインターフェイス共通部の必須チェック
		 *****************************************************/
		// 機能コードが１もしくは２の場合
		if (JPCModelConstant.FUNC_CD_1.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()) || 
				JPCModelConstant.FUNC_CD_2.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
		{
			// 最大検索件数、表示件数、表示ページ番号が未設定の場合
			// 例外をスローする
			if (inMsg.isNull(EDK0111B022CBSMsg.MAX_SEARCH_NUM)
					|| inMsg.isNull(EDK0111B022CBSMsg.DISPLAY_NUM)
					|| inMsg.isNull(EDK0111B022CBSMsg.DISPLAY_PAGE_NUM))
			{
				throw new IllegalArgumentException("サービスインターフェイス共通部の表示件数、表示ページ番号は必須項目です。");
			}
		}
		/* ++++++++++ ｖ1.00.00 追加終了 ++++++++++ */

		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0111ETMsg.getTableName());
			
			/* ++++++++++ ｖ1.00.00 追加開始 ++++++++++ */
			// カウント用SQL１
			StringBuffer sql_BuffSelectStart = new StringBuffer();
			sql_BuffSelectStart.append(" SELECT ")
								.append("   COUNT(*) AS CNT ")
								.append(" FROM ")
								.append(" ( ");
			// カウント用SQL２
			StringBuffer sql_BuffSelectEnd = new StringBuffer();
			sql_BuffSelectEnd.append(" ) ");

			StringBuffer sql_BuffCnt = new StringBuffer();
			StringBuffer sql_BuffData = new StringBuffer();

			// データ取得用SQL１
			StringBuffer sql_BuffDataStart = new StringBuffer();
			sql_BuffDataStart.append(" SELECT ")
							.append("     TBL2.MVNO, ")
							.append("     TBL2.TAKMODELNO, ")
							.append("     TBL2.SETMODELNO, ")
							.append("     TBL2.FZKMODELNO, ")
							.append("     TBL2.TAKTYPENM, ")
							.append("     TBL2.SETTYPENM, ")
							.append("     TBL2.FZKTYPENM, ")
							.append("     TBL2.SEIZONO, ")
							.append("     TBL2.SETSEIZONO, ")
							.append("     TBL2.SJICNT, ")
							.append("     TBL2.RIYUNASI, ")
							.append("     TBL2.RIYUARI, ")
							.append("     TBL2.BIKONASI, ")
							.append("     TBL2.BIKOARI, ")
							.append("     TBL2.SHITEIWAYCD, ")
							.append("     TBL2.GDSSTATCD, ")
							.append("     TBL2.UPDDTM ")
							.append(" FROM ")
							.append(" ( ")
							.append(" SELECT ")
							.append("     ROWNUM AS ROW_NUM, ")
							.append("     TBL1.MVNO, ")
							.append("     TBL1.TAKMODELNO, ")
							.append("     TBL1.SETMODELNO, ")
							.append("     TBL1.FZKMODELNO, ")
							.append("     TBL1.TAKTYPENM, ")
							.append("     TBL1.SETTYPENM, ")
							.append("     TBL1.FZKTYPENM, ")
							.append("     TBL1.SEIZONO, ")
							.append("     TBL1.SETSEIZONO, ")
							.append("     TBL1.SJICNT, ")
							.append("     TBL1.RIYUNASI, ")
							.append("     TBL1.RIYUARI, ")
							.append("     TBL1.BIKONASI, ")
							.append("     TBL1.BIKOARI, ")
							.append("     TBL1.SHITEIWAYCD, ")
							.append("     TBL1.GDSSTATCD, ")
							.append("     TBL1.UPDDTM ")
							.append(" FROM ")
							.append(" ( ");

			// データ取得用SQL２
			StringBuffer sql_BuffDataEnd = new StringBuffer();
			sql_BuffDataEnd.append(" ) TBL1 ")
							.append(" ) TBL2 ")
							.append(" WHERE ")
							.append(" TBL2.ROW_NUM BETWEEN ? AND ? ");
			/* ++++++++++ ｖ1.00.00 追加終了 ++++++++++ */

			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  ");
			// SQL文_個別部1
			if ( JPCModelConstant.FUNC_CD_1.equals( inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString() ) ) {
				sql_Buff.append("     SOKODNA.SOKODNA_MOVE_NO AS MVNO,  ")
						.append("     SOKODNA.TAKNKIKI_MODEL_CD AS TAKMODELNO,  ")
						.append("     SOKODNA.TAKNKIKI_SETHIN_MODEL_CD AS SETMODELNO,  ")
						.append("     SOKODNA.HUZOKUHIN_MODEL_CD AS FZKMODELNO,  ")
						.append("     TKKKMDL.TAKNKIKI_MODEL_NM AS TAKTYPENM,  ")
						.append("     '' AS SETTYPENM,  ")
						.append("     '' AS FZKTYPENM,  ")
						.append("     TAISYOKK.KIKI_SEIZO_NO AS SEIZONO,  ")
						.append("     TAISYOKK.TAKNKIKI_SETHIN_NO AS SETSEIZONO,  ")
						.append("     SOKODNA.SJI_CNT AS SJICNT,  ")
						.append(      cd(CD00338, "SOKODNA.SOKODNA_MOVE_RSN_CD", COMMA.RIGHT, "RIYUNASI"))
						.append(      cd(CD00338, "TAISYOKK.SOKODNA_MOVE_RSN_CD", COMMA.RIGHT, "RIYUARI"))
						.append("     SOKODNA.SKDN_MV_BIKO AS BIKONASI,  ")
						.append("     TAISYOKK.SKDN_MV_TG_KIKI_BIKO AS BIKOARI,  ")
						.append("     SOKODNA.SHITEI_WAY_CD AS SHITEIWAYCD,  ")
						.append("     SOKODNA.GDS_STAT_CD AS GDSSTATCD,  ")
						.append("     SOKODNA.UPD_DTM AS UPDDTM  ")
						.append(" FROM DK_T_SOKODNA_MOVE SOKODNA  ")
						.append("     LEFT OUTER JOIN DK_T_SDNAMV_TG_KIKI TAISYOKK  ")
						.append("         ON (TAISYOKK.SOKODNA_MOVE_NO = SOKODNA.SOKODNA_MOVE_NO  ")
						.append("             AND TAISYOKK.MK_FLG = '0')  ")
						.append("     LEFT OUTER JOIN ZM_M_TAKNKIKI_MODEL TKKKMDL  ")
						.append("         ON (TKKKMDL.TAKNKIKI_MODEL_CD = SOKODNA.TAKNKIKI_MODEL_CD  ")
						.append("             AND TKKKMDL.MK_FLG = '0')  ")
						.append(" WHERE SOKODNA.SHELF_MOVE_LOT_NO = ?  ")
						.append("     AND SOKODNA.MK_FLG='0'  ")
						.append(" ORDER BY SOKODNA.SOKODNA_MOVE_NO  ");
			}
			if ( JPCModelConstant.FUNC_CD_2.equals( inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString() ) ) {
				sql_Buff.append("     YBK.YBKIKI_HAISO_NO AS MVNO,  ")
						.append("     YBK.TAKNKIKI_MODEL_CD AS TAKMODELNO,  ")
						.append("     YBK.TAKNKIKI_SETHIN_MODEL_CD AS SETMODELNO,  ")
						.append("     YBK.HUZOKUHIN_MODEL_CD AS FZKMODELNO,  ")
						.append("     TKKKMDL.TAKNKIKI_MODEL_NM AS TAKTYPENM,  ")
						.append("     '' AS SETTYPENM,  ")
						.append("     '' AS FZKTYPENM,  ")
						.append("     TAISYOBPN.KIKI_SEIZO_NO AS SEIZONO,  ")
						.append("     TAISYOBPN.TAKNKIKI_SETHIN_NO AS SETSEIZONO,  ")
						.append("     YBK.SJI_CNT AS SJICNT,  ")
						.append(      cd(CD00338, "YBK.YBKKHAI_RSN_CD", COMMA.RIGHT, "RIYUNASI"))
						.append(      cd(CD00338, "TAISYOBPN.YBKKHAI_RSN_CD", COMMA.RIGHT, "RIYUARI"))
						.append("     YBK.YBKKHAI_BIKO AS BIKONASI,  ")
						.append("     TAISYOBPN.YBKKHAI_TAIBPIN_BIKO AS BIKOARI,  ")
						.append("     YBK.SHITEI_WAY_CD AS SHITEIWAYCD,  ")
						.append("     YBK.GDS_STAT_CD AS GDSSTATCD,  ")
						.append("     YBK.UPD_DTM AS UPDDTM  ")
						.append(" FROM DK_T_YBKIKI_HAISO YBK  ")
						.append("     LEFT OUTER JOIN DK_T_YBKKHAI_TG_BPIN TAISYOBPN  ")
						.append("         ON (TAISYOBPN.YBKIKI_HAISO_NO = YBK.YBKIKI_HAISO_NO  ")
						.append("             AND TAISYOBPN.MK_FLG = '0')  ")
						.append("     LEFT OUTER JOIN ZM_M_TAKNKIKI_MODEL TKKKMDL  ")
						.append("         ON (TKKKMDL.TAKNKIKI_MODEL_CD = YBK.TAKNKIKI_MODEL_CD  ")
						.append("             AND TKKKMDL.MK_FLG = '0')  ")
						.append(" WHERE YBK.SHELF_MOVE_LOT_NO = ?  ")
						.append("     AND YBK.MK_FLG='0'  ")
						.append(" ORDER BY YBK.YBKIKI_HAISO_NO  ");
			}
			
			/* ++++++++++ ｖ1.00.00 追加開始 ++++++++++ */
			if (JPCModelConstant.FUNC_CD_3.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
			{
				// 倉庫棚移動データ全件取得（排他制御用）
				sql_Buff.append("     DISTINCT  ")
						.append("     SOKODNA.SOKODNA_MOVE_NO AS MVNO,  ")
						.append("     '' AS TAKMODELNO,  ")
						.append("     '' AS SETMODELNO,  ")
						.append("     '' AS FZKMODELNO,  ")
						.append("     '' AS TAKTYPENM,  ")
						.append("     '' AS SETTYPENM,  ")
						.append("     '' AS FZKTYPENM,  ")
						.append("     '' AS SEIZONO,  ")
						.append("     '' AS SETSEIZONO,  ")
						.append("     '' AS SJICNT,  ")
						.append("     '' AS RIYUNASI,  ")
						.append("     '' AS RIYUARI,  ")
						.append("     '' AS BIKONASI,  ")
						.append("     '' AS BIKOARI,  ")
						.append("     '' AS SHITEIWAYCD,  ")
						.append("     '' AS GDSSTATCD,  ")
						.append("     SOKODNA.UPD_DTM AS UPDDTM  ")
						.append(" FROM DK_T_SOKODNA_MOVE SOKODNA  ")
						.append(" WHERE SOKODNA.SHELF_MOVE_LOT_NO = ?  ")
						.append("     AND SOKODNA.MK_FLG='0'  ")
						.append(" ORDER BY SOKODNA.SOKODNA_MOVE_NO  ");
			}
			if (JPCModelConstant.FUNC_CD_4.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
			{
				// 予備機器配送データ全件取得（排他制御用）
				sql_Buff.append("     DISTINCT  ")
						.append("     YBK.YBKIKI_HAISO_NO AS MVNO,  ")
						.append("     '' AS TAKMODELNO,  ")
						.append("     '' AS SETMODELNO,  ")
						.append("     '' AS FZKMODELNO,  ")
						.append("     '' AS TAKTYPENM,  ")
						.append("     '' AS SETTYPENM,  ")
						.append("     '' AS FZKTYPENM,  ")
						.append("     '' AS SEIZONO,  ")
						.append("     '' AS SETSEIZONO,  ")
						.append("     '' AS SJICNT,  ")
						.append("     '' AS RIYUNASI,  ")
						.append("     '' AS RIYUARI,  ")
						.append("     '' AS BIKONASI,  ")
						.append("     '' AS BIKOARI,  ")
						.append("     '' AS SHITEIWAYCD,  ")
						.append("     '' AS GDSSTATCD,  ")
						.append("     YBK.UPD_DTM AS UPDDTM  ")
						.append(" FROM DK_T_YBKIKI_HAISO YBK  ")
						.append(" WHERE YBK.SHELF_MOVE_LOT_NO = ?  ")
						.append("     AND YBK.MK_FLG='0'  ")
						.append(" ORDER BY YBK.YBKIKI_HAISO_NO  ");
			}

			// カウントSQL組み立て
			sql_BuffCnt.append(sql_BuffSelectStart);
			sql_BuffCnt.append(sql_Buff);
			sql_BuffCnt.append(sql_BuffSelectEnd);

			// prepareStatementにSQL文をセット
			pstmtForCount = con1.prepareStatement(sql_BuffCnt.toString());

			if (JPCModelConstant.FUNC_CD_1.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()) || 
					JPCModelConstant.FUNC_CD_2.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
			{
				// パラメータの設定(ＫＥＹ＿運用日付を指定)
				CAANJDBCUtil.setParam(pstmtForCount, 1, inMsg.getObject(EDK0111B022CBSMsg.KEY_UNYO_YMD));
				CAANJDBCUtil.setParam(pstmtForCount, 2, inMsg.getObject(EDK0111B022CBSMsg.KEY_UNYO_YMD));
				// パラメータの設定(ＫＥＹ＿棚移動ロット番号を指定)
				CAANJDBCUtil.setParam(pstmtForCount, 3, inMsg.getObject(EDK0111B022CBSMsg.KEY_SHELF_MV_LOT_NO));
			}
			else
			{
				// パラメータの設定(ＫＥＹ＿棚移動ロット番号を指定)
				CAANJDBCUtil.setParam(pstmtForCount, 1, inMsg.getObject(EDK0111B022CBSMsg.KEY_SHELF_MV_LOT_NO));
			}

			// ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_BuffCnt);

			// ResultSetの取得
			rsltQueryForCount = pstmtForCount.executeQuery();

			// EDK0111B022CBSMsgの明細にセットする項目
			String[] msgKeyList0 = {
				EDK0111B022CBSMsg.TOTAL_SEARCH_NUM
			};

			rsltQueryForCount.next();
			mapMessage(rsltQueryForCount, msgKeyList0, inMsg);

			// 機能コードが１もしくは２の場合
			int iStartNum = 0;
			int iEndNum = 0;
			if (JPCModelConstant.FUNC_CD_1.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()) || 
					JPCModelConstant.FUNC_CD_2.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
			{
				// 総ページ数設定
				int iTotal = Integer.parseInt(inMsg.getString(EDK0111B022CBSMsg.TOTAL_SEARCH_NUM));
				int iDispNum = Integer.parseInt(inMsg.getString(EDK0111B022CBSMsg.DISPLAY_NUM));
				int iSearchDivDisp =  iTotal / iDispNum;
				int iRest =  iTotal % iDispNum;
				// 割り切れない場合は総ページ数を増やす
				if (0 != iRest)
				{
					iSearchDivDisp = iSearchDivDisp + 1;
				}
				inMsg.set(EDK0111B022CBSMsg.TOTAL_PAGE_NUM, Integer.toString(iSearchDivDisp));
	
				// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
				if (0 == (Integer.parseInt(inMsg.getString(EDK0111B022CBSMsg.TOTAL_SEARCH_NUM))))
				{
					inMsg.set(EDK0111B022CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
					return;
				}
				// 表示ページに該当するデータがない場合、エラーフラグに"3"を設定して処理終了
				int iDispPageNum = Integer.parseInt(inMsg.getString(EDK0111B022CBSMsg.DISPLAY_PAGE_NUM));
				iStartNum = iDispNum * (iDispPageNum - 1) + 1;
				iEndNum = iDispNum * iDispPageNum;
				if (iSearchDivDisp < iDispPageNum)
				{
					inMsg.set(EDK0111B022CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}

				// データ取得SQL分の形成
				sql_BuffData.append(sql_BuffDataStart);
				sql_BuffData.append(sql_Buff);
				sql_BuffData.append(sql_BuffDataEnd);
			}
			else
			{
				sql_BuffData.append(sql_Buff);
			}
			
			pstmtForFetch = con1.prepareStatement(sql_BuffData.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_BuffData);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if (JPCModelConstant.FUNC_CD_1.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()) || 
					JPCModelConstant.FUNC_CD_2.equals(inMsg.getObject(EDK0111B022CBSMsg.FUNC_CODE).toString()))
			{
				// パラメータの設定(ＫＥＹ＿運用日付を指定)
				CAANJDBCUtil.setParam(pstmtForFetch, 1, inMsg.getObject(EDK0111B022CBSMsg.KEY_UNYO_YMD));
				CAANJDBCUtil.setParam(pstmtForFetch, 2, inMsg.getObject(EDK0111B022CBSMsg.KEY_UNYO_YMD));

				// パラメータの設定(ＫＥＹ＿棚移動ロット番号を指定)
				CAANJDBCUtil.setParam(pstmtForFetch, 3, inMsg.getObject(EDK0111B022CBSMsg.KEY_SHELF_MV_LOT_NO));

				// パラメータの設定(画面表示データ開始レコード行を指定)
				CAANJDBCUtil.setParam(pstmtForFetch, 4, iStartNum);

				// パラメータの設定(画面表示データ終了レコード行を指定)
				CAANJDBCUtil.setParam(pstmtForFetch, 5, iEndNum);

			}
			else
			{
				// パラメータの設定(ＫＥＹ＿棚移動ロット番号を指定)
				CAANJDBCUtil.setParam(pstmtForFetch, 1, inMsg.getObject(EDK0111B022CBSMsg.KEY_SHELF_MV_LOT_NO));
			}
			
			// ResultSetの取得
			rsltQueryForFetch = pstmtForFetch.executeQuery();
			
			// EDK0111B022CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EDK0111B022CBSMsg1List.SHELF_MV_NO
					, EDK0111B022CBSMsg1List.TKKIKI_MDL_CD
					, EDK0111B022CBSMsg1List.TKKIKI_SETHIN_MDL_CD
					, EDK0111B022CBSMsg1List.HUZOKUHIN_MDL_CD
					, EDK0111B022CBSMsg1List.TKKIKI_MDL_NM
					, EDK0111B022CBSMsg1List.TKKIKI_SETHIN_MDL_NM
					, EDK0111B022CBSMsg1List.HUZOKUHIN_MDL_NM
					, EDK0111B022CBSMsg1List.KIKI_SEIZO_NO
					, EDK0111B022CBSMsg1List.TKKIKI_SETHIN_SEIZO_NO
					, EDK0111B022CBSMsg1List.SJI_CNT
					, EDK0111B022CBSMsg1List.U_NASI_MV_RSN_CD_NM
					, EDK0111B022CBSMsg1List.U_ARI_MV_RSN_CD_NM
					, EDK0111B022CBSMsg1List.U_NASI_BIKO
					, EDK0111B022CBSMsg1List.U_ARI_BIKO
					, EDK0111B022CBSMsg1List.SHITEI_WAY_CD
					, EDK0111B022CBSMsg1List.GDS_STAT_CD
					, EDK0111B022CBSMsg1List.UPD_DTM
			};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQueryForFetch,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0111B022CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0111B022CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EDK0111B022CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				SQLException e = JDKModelCommon.close(pstmtForCount, pstmtForFetch, rsltQueryForCount, rsltQueryForFetch);
				if(con1 != null){
					closeConnection(con1);
				}
				if (e != null)
				{
					throw e;
				}
			}catch(SQLException e){
				inMsg.set(EDK0111B022CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
