/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSyokiSprtSelectCC
*	ソースファイル名：JKKSyokiSprtSelectCC.java
*	作成者			：FAP)鳩本
*	日付			：2012年03月29日
*＜機能概要＞
*	初期設定サポート手配情報リスト検索の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/29	FJ)鳩本		新規作成
*	v4.00.00	2013/02/19	FJ)強矢		【OT-2013-0000187】対応
*	v4.00.01	2013/02/25	FJ)強矢		【ST4-2012-0000181】対応
*	v4.00.02	2013/09/25	FJ)鳩本		【OM-2012-0002434】対応
*	v5.00.00	2013/12/04	FJ)石橋		【OM-2013-0001870】対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2781B001CBSMsg1List;


/**
 * 初期設定サポート手配情報リストを抽出します。<p>
 * <BR>
 * @author 富士通
 */
public class JKKSyokiSprtSelectCC extends AbstractCommonComponent
{
	/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
	/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
//	/** サービスID */
//	private static final String SERVICE_ID = "KKSV050801CC";
//	/** 業務パラメータ管理一意照会 */
//	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
//	/** 割引サービス契約一覧照会（割引サービス指定） */
//	private static final String TEMPLATE_ID_EKK0451B010 = "EKK0451B010";
//	/** 回線対象サービス契約一覧照会 */
//	private static final String TEMPLATE_ID_EKK0241B002 = "EKK0241B002";
//	/** 回線対象サービス契約一覧照会（サービス契約番号） */
//	private static final String TEMPLATE_ID_EKK0241B003 = "EKK0241B003";
	/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
	/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
	
	/**
	 * テンプレートID
	 */
	private static final String TEMPLATE_ID = "EKK2781B001";
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	public IRequestParameterReadWrite getSyokiSprtList(SessionHandle handle, 
														IRequestParameterReadWrite param, 
														String fixedText) throws Exception
	{
		// ◇ 上りマッピング処理
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsg(param);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
		// 検索リストを取得する
//		CAANMsg[] searchList = msg.getCAANMsgList(EKK2781B001CBSMsg.EKK2781B001CBSMSG1LIST);
		/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
		/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
		// 画面で選択していたデータが検索結果に存在するかチェックを行う
//		boolean isMatchedKey = false;
		/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
		
		// 検索結果情報
		String searchErrFlg = msg.getString("search_err_flg");
		/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
		// 検索総件数
//		int totalSerchNum = searchList.length;
		//int totalSerchNum = (Integer.parseInt(msg.getString("total_search_num")));
		/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
		// 最大検索件数
//		int maxSearchNum = (Integer.parseInt(msg.getString("max_search_num")));
		
		// ユーザデータ情報
		// 画面で選択されていたデータを取得する
		HashMap<String, Object> inParamMap = (HashMap<String, Object>)param.getData("KKSV050801CC");
		/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
//		String key = (String)inParamMap.get("key_paging");
		/* ++++++++++ v5.00.00 削除終了 ++++++++++ */

		/* ++++++++++ v5.00.00 追加開始 ++++++++++ */
		// 画面制御のため検索エラーフラグを1に設定する
		inParamMap.put("search_err_flg", searchErrFlg);
		// 表示ページ番号を1ページに設定する
		inParamMap.put("display_page_num", "1");

		return editOutMsg(result, param);

		/* ++++++++++ v5.00.00 追加終了 ++++++++++ */

		/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
//		// 総件数チェック
//		if (totalSerchNum == 0)
//		{
//			HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("KKSV050801CC");
//
//			// 画面制御のため検索エラーフラグを1に設定する
//			inMap.put("search_err_flg", "1");
//			
//			/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//			// ◇ 下りマッピング処理
////			return editOutMsg(result, param);								// /* ++++++++++ v4.00.00 でコメント化 ++++++++++ */
////			return setFamilyPackUm(handle, editOutMsg(result, param));		// /* ++++++++++ v4.00.01 でコメント化 ++++++++++ */
//			return editOutMsg(result, param);
//			/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
//		}
//		
//		// 最大検索件数チェック
//		if (totalSerchNum > maxSearchNum)
//		{
//			HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("KKSV050801CC");
//
//
//			// 画面制御のため検索エラーフラグを1に設定する
//			inMap.put("search_err_flg", "2");
//			
//			/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//			// ◇ 下りマッピング処理
////			return editOutMsg(result, param);								// /* ++++++++++ v4.00.00 でコメント化 ++++++++++ */
////			return setFamilyPackUm(handle, editOutMsg(result, param));		// /* ++++++++++ v4.00.01 でコメント化 ++++++++++ */
//			return editOutMsg(result, param);
//			/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
//		}		
//		
//		// キーが未設定、またはトップページの検索であった場合は、再検索処理を行わない。
////		if (key == null || "1".equals(inParamMap.get("display_page_num")))
//		if ("1".equals(inParamMap.get("display_page_num")))
//		{
//			/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//			// ◇ 下りマッピング処理
////			return editOutMsg(result, param);								// /* ++++++++++ v4.00.00 でコメント化 ++++++++++ */
////			return setFamilyPackUm(handle, editOutMsg(result, param));		// /* ++++++++++ v4.00.01 でコメント化 ++++++++++ */
//			return editOutMsg(result, param);
//			/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
//		}
//
//		// 検索条件キーのマッチングによる存在チェックを行う。
////		for (int i = 0; i < searchList.length; i++)
////		{
////			CAANMsg childTemplate = searchList[i];
////			String sysID = childTemplate.getString(EKK0081B022CBSMsg.KEY_SVC_KEI_NO);
////			
////			// 選択データが検索結果にある場合はチェック終了
////			if(key.equals(sysID))
////			{
////				isMatchedKey = true;
////				break;
////			}
////		}
//
//		// 画面で選択していたデータがない場合は1ページ目を再検索する
////		if (!isMatchedKey)
//		if (!(searchErrFlg == null))
//		{
//			HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("KKSV050801CC");
//
//			// 表示ページ番号を1ページに設定する
//			inMap.put("display_page_num", "1");
//
//			// 画面制御のため検索エラーフラグを3に設定する
//			inMap.put("search_err_flg", "3");
//
//			// リクエストパラメータを引数に上りマッピング処理メソッドを実行
//			paramMap = editInMsg(param);
//
//			// ◇ SC呼出実行
//			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
//			scCall = new ServiceComponentRequestInvoker();
//			result = scCall.run(paramMap, handle);
//		}
//
//		/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//		// ◇ 下りマッピング処理
////		return editOutMsg(result, param);								// /* ++++++++++ v4.00.00 でコメント化 ++++++++++ */
////		return setFamilyPackUm(handle, editOutMsg(result, param));		// /* ++++++++++ v4.00.01 でコメント化 ++++++++++ */
//		return editOutMsg(result, param);
//		/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
		/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
	}
	
	/**
	 * 
	 * @param param
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("KKSV050801CC");

		CAANMsg template = new CAANMsg(EKK2781B001CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK2781B001CBSMsg.TEMPLATEID, TEMPLATE_ID);

		template.set(EKK2781B001CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		// 検索処理パターン
		if ("".equals(inMap.get("search_type")))
		{
			template.setNull(EKK2781B001CBSMsg.SEARCH_TYPE);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.SEARCH_TYPE, (String)inMap.get("search_type"));
		}

		// 最大検索件数
		if ("".equals(inMap.get("max_search_num")))
		{
			template.setNull(EKK2781B001CBSMsg.MAX_SEARCH_NUM);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.MAX_SEARCH_NUM, (String)inMap.get("max_search_num"));
		}

		// 表示件数
		if ("".equals(inMap.get("display_num")))
		{
			template.setNull(EKK2781B001CBSMsg.DISPLAY_NUM);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.DISPLAY_NUM, (String)inMap.get("display_num"));
		}

		// 表示ページ番号
		if ("".equals(inMap.get("display_page_num")))
		{
			template.setNull(EKK2781B001CBSMsg.DISPLAY_PAGE_NUM);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.DISPLAY_PAGE_NUM, (String)inMap.get("display_page_num"));
		}

		// 検索エラーフラグ
		if ("".equals(inMap.get("search_err_flg")))
		{
			template.setNull(EKK2781B001CBSMsg.SEARCH_ERR_FLG);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.SEARCH_ERR_FLG, (String)inMap.get("search_err_flg"));
		}

		/* ++++++++++ v5.00.00 追加開始 ++++++++++ */
		// 検索総件数
		if ("".equals(inMap.get("total_search_num")))
		{
			template.setNull(EKK2781B001CBSMsg.TOTAL_SEARCH_NUM);
		}
		else
		{
			template.set(EKK2781B001CBSMsg.TOTAL_SEARCH_NUM, (String)inMap.get("total_search_num"));
		}
		/* ++++++++++ v5.00.00 追加終了 ++++++++++ */

		// ◇ 業務データの設定
		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サービス契約番号 → ＫＥＹ＿サービス契約番号
		if (inMap == null || inMap.get("key_svc_kei_no") == null || "".equals(inMap.get("key_svc_kei_no"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SVC_KEI_NO);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SVC_KEI_NO, (String) inMap.get("key_svc_kei_no"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿申込書番号 → ＫＥＹ＿申込書番号
		if (inMap == null || inMap.get("key_mskmsho_no") == null || "".equals(inMap.get("key_mskmsho_no"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_MSKMSHO_NO);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_MSKMSHO_NO, (String) inMap.get("key_mskmsho_no"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日フラグ → ＫＥＹ＿ループバックテスト完了年月日フラグ
		if (inMap == null || inMap.get("key_loop_test_fin_ymd_flg") == null || "".equals(inMap.get("key_loop_test_fin_ymd_flg"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FLG);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FLG, (String) inMap.get("key_loop_test_fin_ymd_flg"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日（自） → ＫＥＹ＿ループバックテスト完了年月日（自）
		if (inMap == null || inMap.get("key_loop_test_fin_ymd_from") == null || "".equals(inMap.get("key_loop_test_fin_ymd_from"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_FROM, (String) inMap.get("key_loop_test_fin_ymd_from"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日（至） → ＫＥＹ＿ループバックテスト完了年月日（至）
		if (inMap == null || inMap.get("key_loop_test_fin_ymd_to") == null || "".equals(inMap.get("key_loop_test_fin_ymd_to"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_LOOP_TEST_FIN_YMD_TO, (String) inMap.get("key_loop_test_fin_ymd_to"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ファミリーパック有無フラグ → ＫＥＹ＿ファミリーパック有無フラグ
		if (inMap == null || inMap.get("key_famipa_um_flg") == null || "".equals(inMap.get("key_famipa_um_flg"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_FAMIPA_UM_FLG);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_FAMIPA_UM_FLG, (String) inMap.get("key_famipa_um_flg"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日フラグ → ＫＥＹ＿サポート完了年月日フラグ
		if (inMap == null || inMap.get("key_support_fin_ymd_flg") == null || "".equals(inMap.get("key_support_fin_ymd_flg"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FLG, (String) inMap.get("key_support_fin_ymd_flg"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日（自） → ＫＥＹ＿サポート完了年月日（自）
		if (inMap == null || inMap.get("key_support_fin_ymd_from") == null || "".equals(inMap.get("key_support_fin_ymd_from"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_FROM, (String) inMap.get("key_support_fin_ymd_from"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日（至） → ＫＥＹ＿サポート完了年月日（至）
		if (inMap == null || inMap.get("key_support_fin_ymd_to") == null || "".equals(inMap.get("key_support_fin_ymd_to"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_FIN_YMD_TO, (String) inMap.get("key_support_fin_ymd_to"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日フラグ（サポート） → ＫＥＹ＿登録年月日フラグ（サポート）
		if (inMap == null || inMap.get("key_support_add_ymd_flg") == null || "".equals(inMap.get("key_support_add_ymd_flg"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FLG, (String) inMap.get("key_support_add_ymd_flg"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日（サポート）（自） → ＫＥＹ＿登録年月日（サポート）（自）
		if (inMap == null || inMap.get("key_support_add_ymd_from") == null || "".equals(inMap.get("key_support_add_ymd_from"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_FROM, (String) inMap.get("key_support_add_ymd_from"));
		}

		// 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日（サポート）（至） → ＫＥＹ＿登録年月日（サポート）（至）
		if (inMap == null || inMap.get("key_support_add_ymd_to") == null || "".equals(inMap.get("key_support_add_ymd_to"))) {
			template.setNull(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO);
		} else {
			template.set(EKK2781B001CBSMsg.KEY_SUPPORT_ADD_YMD_TO, (String) inMap.get("key_support_add_ymd_to"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 
	 * @param msgList
	 * @param param
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	private IRequestParameterReadWrite editOutMsg(Map<?, ?> msgList,
													IRequestParameterReadWrite param) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);

		// 結果を詰めるマップを取得
		HashMap<String, Object> dataMap = null;
		ArrayList<HashMap<String, Object>> dataList = null;

		// 業務データ設定
		dataMap = (HashMap<String, Object>)param.getData("KKSV050801CC");
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData("KKSV050801CC", dataMap);
		}

		// 検索系 共通部
		dataMap.put("total_search_num", parentTemplate.getString("total_search_num"));
		dataMap.put("total_page_num", parentTemplate.getString("total_page_num"));
//		dataMap.put("search_err_flg", parentTemplate.getString("search_err_flg"));

		//■排他チェックのため、初期検索リストを設定する
		ArrayList compareList = new ArrayList();
		compareList = (ArrayList)dataMap.get("compareMap");
		//■排他チェックエラー件数
		int compareCnt = 0;
		//===================================================
		
		// 初期設定サポート手配情報照会明細
		templateArray = parentTemplate.getCAANMsgList(EKK2781B001CBSMsg.EKK2781B001CBSMSG1LIST);
		dataList = (ArrayList<HashMap<String, Object>>)dataMap.get("EKK2781B001CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList<HashMap<String, Object>>();
		}

		if (templateArray != null)
		{
			
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= dataList.size())
				{
					dataList.add(new HashMap<String, Object>());
				}
				HashMap<String, Object> childMap = dataList.get(i);

				// ◇取得情報ここから
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス契約番号 ← 初期設定サポート手配情報一覧照会明細.サービス契約番号
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.SVC_KEI_NO)) {
					childMap.put("svc_kei_no", new String());
				} else {
					childMap.put("svc_kei_no", childTemplate.getString(EKK2781B001CBSMsg1List.SVC_KEI_NO));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.申込書番号 ← 初期設定サポート手配情報一覧照会明細.申込書番号
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.MSKMSHO_NO)) {
					childMap.put("mskmsho_no", new String());
				} else {
					childMap.put("mskmsho_no", childTemplate.getString(EKK2781B001CBSMsg1List.MSKMSHO_NO));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.お客様名 ← 初期設定サポート手配情報一覧照会明細.お客様名
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.CUST_NM)) {
					childMap.put("cust_nm", new String());
				} else {
					childMap.put("cust_nm", childTemplate.getString(EKK2781B001CBSMsg1List.CUST_NM));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.申込年月日 ← 初期設定サポート手配情報一覧照会明細.申込年月日
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.MSKM_YMD)) {
					childMap.put("mskm_ymd", new String());
				} else {
					childMap.put("mskm_ymd", childTemplate.getString(EKK2781B001CBSMsg1List.MSKM_YMD));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.割引サービス契約番号 ← 初期設定サポート手配情報一覧照会明細.割引サービス契約番号
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.WRIB_SVC_KEI_NO)) {
					childMap.put("wrib_svc_kei_no", new String());
				} else {
					childMap.put("wrib_svc_kei_no", childTemplate.getString(EKK2781B001CBSMsg1List.WRIB_SVC_KEI_NO));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス解約年月日 ← 初期設定サポート手配情報一覧照会明細.サービス解約年月日
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.SVC_DSL_YMD)) {
					childMap.put("svc_dsl_ymd", new String());
				} else {
					childMap.put("svc_dsl_ymd", childTemplate.getString(EKK2781B001CBSMsg1List.SVC_DSL_YMD));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.ループバックテスト完了年月日 ← 初期設定サポート手配情報一覧照会明細.ループバックテスト完了年月日
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.LOOPBACK_TEST_FIN_YMD)) {
					childMap.put("loopback_test_fin_ymd", new String());
				} else {
					childMap.put("loopback_test_fin_ymd", childTemplate.getString(EKK2781B001CBSMsg1List.LOOPBACK_TEST_FIN_YMD));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス開始年月日 ← 初期設定サポート手配情報一覧照会明細.サービス開始年月日
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.SVC_STA_YMD)) {
					childMap.put("svc_sta_ymd", new String());
				} else {
					childMap.put("svc_sta_ymd", childTemplate.getString(EKK2781B001CBSMsg1List.SVC_STA_YMD));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サポート完了年月日 ← 初期設定サポート手配情報一覧照会明細.サポート完了年月日
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.SUPPORT_FIN_YMD)) {
					childMap.put("support_fin_ymd", new String());
				} else {
					childMap.put("support_fin_ymd", childTemplate.getString(EKK2781B001CBSMsg1List.SUPPORT_FIN_YMD));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サポート番号 ← 初期設定サポート手配情報一覧照会明細.サポート番号
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.SUPPORT_NO)) {
					childMap.put("support_no", new String());
				} else {
					childMap.put("support_no", childTemplate.getString(EKK2781B001CBSMsg1List.SUPPORT_NO));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.登録年月日時分秒（サポート） ← 初期設定サポート手配情報一覧照会明細.登録年月日時分秒（サポート）
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.KK0631_ADD_DTM)) {
					childMap.put("kk0631_add_dtm", new String());
				} else {
					childMap.put("kk0631_add_dtm", childTemplate.getString(EKK2781B001CBSMsg1List.KK0631_ADD_DTM));
				}
				
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.更新年月日時分秒（サポート） ← 初期設定サポート手配情報一覧照会明細.更新年月日時分秒（サポート）
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.KK0631_UPD_DTM)) {
					childMap.put("kk0631_upd_dtm", new String());
				} else {
					childMap.put("kk0631_upd_dtm", childTemplate.getString(EKK2781B001CBSMsg1List.KK0631_UPD_DTM));
				}
				
				/* ++++++++++ v4.00.02 追加開始 ++++++++++ */
				// 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.割引サービス契約ステータス ← 初期設定サポート手配情報一覧照会明細.割引サービス契約ステータス
				if (childTemplate.isNull(EKK2781B001CBSMsg1List.WRIB_SVC_KEI_STAT)) {
					childMap.put("wrib_svc_kei_stat", new String());
				} else {
					childMap.put("wrib_svc_kei_stat", childTemplate.getString(EKK2781B001CBSMsg1List.WRIB_SVC_KEI_STAT));
				}
				/* ++++++++++ v4.00.02 追加完了 ++++++++++ */
				
				// ◇取得情報ここまで
				
				//============================================================================================================
				//■排他チェックを行う→比較対象：「更新年月日時分妙」
				if(compareList.size() != 0 )
				{
					HashMap compareMap = (HashMap)compareList.get(i);
					if(childTemplate.getString(EKK2781B001CBSMsg1List.KK0631_UPD_DTM) != null)
					{
						if( !childTemplate.getString(EKK2781B001CBSMsg1List.KK0631_UPD_DTM).equals(compareMap.get("compare_upd_dtm"))){
							compareCnt++;
						}
					}
					else
					{
						if(!("".equals(compareMap.get("compare_upd_dtm")) || compareMap.get("compare_upd_dtm") == null))
						{
							compareCnt++;
						}
					}
					
				}
				//============================================================================================================
			}
		}
		dataMap.put("EKK2781B001CBSMsg1List", dataList);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfo(param, templates, (Integer)return_code,compareCnt);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		//===========================================================================================================
		//■ダウンロードボタン押下時エラー発生した場合、エラーを起こすため、「リターンコード」と「ステータス」「テンプレートID」を設定
		if (!"0".equals(dataMap.get("key_temp_flg")) || compareCnt > 0)
		{
			HashMap mp = new HashMap();
			if("1".equals(dataMap.get("key_temp_flg")))
			{
				mp.put(JCMConstants.RET_CD_INT_KEY, Integer.valueOf(1050));
				mp.put(JCMConstants.STATUS_INT_KEY, Integer.valueOf(1050));
				parentTemplate.set(JCMConstants.STATUS_INT_KEY, Integer.valueOf(1050));
			}
			else
			{
				mp.put(JCMConstants.RET_CD_INT_KEY, Integer.valueOf(1100));
				mp.put(JCMConstants.STATUS_INT_KEY, Integer.valueOf(1100));
				parentTemplate.set(JCMConstants.STATUS_INT_KEY, Integer.valueOf(1100));
			}
			parentTemplate.set(JCMConstants.TEMPLATE_ID_KEY, "EKK0081B022");
			msgList.putAll(mp);
		
		}
		//============================================================================================================

		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		ArrayList<Object> aa = TemplateErrorUtil.getErrorInfo(msgList, errList);
		
		//===================================================================================
		//■ダウンロードボタン押下時エラー発生した場合、SCCallExceptionを生成してスローする
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			CCException scCallEx = new CCException("戻り値不正",new Throwable());
			throw scCallEx;
		}
		//===================================================================================
		
		return retParam;
	}

	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode,int haitaCnt) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK2781B001CBSMsg.STATUS);

		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData("KKSV050801CC");
		
		//===============================================================================================
		//■ダウンロードボタン押下時エラー発生した場合、エラー情報設定する
		if(!"1".equals(param.getControlMapData("key_chk")))
		{
			if (!"0".equals(inMap.get("key_temp_flg")) || haitaCnt >0)
			{
				//@変更有無チェックエラー発生時
				if("1".equals(inMap.get("key_temp_flg")))
				{
					template.set(EKK2781B001CBSMsg.KEY_SVC_KEI_NO_ERR, "E1");
				}
				else
				{
					//A排他チェックエラー発生時
					if(haitaCnt >0)
					{
						template.set(EKK2781B001CBSMsg.KEY_MSKMSHO_NO_ERR, "EA");
					}
					
				}
			}
		}
		else
		{
			param.setControlMapData("key_chk", "0");
		}
		//■■
		if (!template.isNull(EKK2781B001CBSMsg.KEY_MSKMSHO_NO_ERR))
		{
			if (!inMap.containsKey("key_mskmsho_no_err"))
			{
				inMap.put("key_mskmsho_no_err", template.getString(EKK2781B001CBSMsg.KEY_MSKMSHO_NO_ERR));
			}
		}

		if (!template.isNull(EKK2781B001CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_no_err"))
			{
				inMap.put("key_svc_kei_no_err", template.getString(EKK2781B001CBSMsg.KEY_SVC_KEI_NO_ERR));
			}
		}
		//====================================================================================================
		return param;
	}

	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws RequestParameterException
	 */
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws RequestParameterException 
	{
		HashMap<String, Object> paramMap = editInMsg(param);
		
		return paramMap;
	}

	/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
	/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
//	/**
//	 * ファミリーパック有無を設定します。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @return
//	 */
//	private IRequestParameterReadWrite setFamilyPackUm(SessionHandle handle, 
//														IRequestParameterReadWrite param) throws Exception
//	{
//		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(SERVICE_ID);
//		
//		// 割引サービスコード
//		String wribSvcCd = "";
//		
//		// ***** EZM0321A010（業務パラメータ管理一意照会）*****
//		Object[][] ezm0321a010In = {
//				{EZM0321A010CBSMsg.TEMPLATEID,        TEMPLATE_ID_EZM0321A010},
//				{EZM0321A010CBSMsg.FUNC_CODE,         "1"},
//				{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, "KK_FP_KEI_UM_JDG"}
//		};
//		
//		// ◇ SC呼出実行
//		CAANMsg[] ezm0321a010MsgList = callSC(handle, param, scCall, ezm0321a010In).getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
//		
//		if (ezm0321a010MsgList != null && ezm0321a010MsgList.length > 0)
//		{
//			wribSvcCd = ezm0321a010MsgList[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
//		}
//		
//		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)ccMsg.get("EKK0081B022CBSMsg1List");
//		for (int i = 0; i < dataList.size(); i++)
//		{
//			HashMap<String, Object> childMap = dataList.get(i);
//			
//			// ファミリーパック有無
//			childMap.put("family_pack_um", getFamilyPackUm(handle, param, scCall, childMap, wribSvcCd));
//		}
//		
//		return param;
//	}
//	
//	/**
//	 * ファミリーパック有無を取得します。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @return
//	 */
//	private String getFamilyPackUm(SessionHandle handle, 
//									IRequestParameterReadWrite param,
//									ServiceComponentRequestInvoker scCall,
//									HashMap<String, Object> childMap,
//									String wribSvcCd) throws Exception
//	{
//		String value = "無";
//		
//		if ("".equals(wribSvcCd))
//		{
//			return value;
//		}
//		
//		// 回線対象サービス契約一覧照会（サービス契約番号）
//		Object[][] ekk0241b003In = {{EKK0241B003CBSMsg.TEMPLATEID,     TEMPLATE_ID_EKK0241B003},
//				{EKK0241B003CBSMsg.FUNC_CODE,      "1"},
//				{EKK0241B003CBSMsg.KEY_SVC_KEI_NO, (String)childMap.get("svc_kei_no")}};
//		
//		CAANMsg[] ekk0241b003Out = callSC(handle, param, scCall, ekk0241b003In).getCAANMsgList(EKK0241B003CBSMsg.EKK0241B003CBSMSG1LIST);
//		
//		if (ekk0241b003Out == null || ekk0241b003Out.length == 0)
//		{
//			return value;
//		}
//		
//		// 回線対象サービス契約一覧照会
//		Object[][] ekk0241b002In = {{EKK0241B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0241B002},
//									{EKK0241B002CBSMsg.FUNC_CODE,  "1"},
//									{EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO,
//										ekk0241b003Out[0].getString(EKK0241B003CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO)}};
//		
//		CAANMsg[] ekk0241b002Out = callSC(handle, param, scCall, ekk0241b002In).getCAANMsgList(EKK0241B002CBSMsg.EKK0241B002CBSMSG1LIST);
//		
//		for (int i = 0; i < ekk0241b002Out.length; i++)
//		{
//			// ***** EKK0451B010（割引サービス契約一覧照会（割引サービス指定））*****
//			Object[][] ekk0451b010In = {{EKK0451B010CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0451B010},
//										{EKK0451B010CBSMsg.FUNC_CODE,       "1"},
//										{EKK0451B010CBSMsg.KEY_SVC_KEI_NO,  ekk0241b002Out[i].getString(EKK0241B002CBSMsg1List.SVC_KEI_NO)},
//										{EKK0451B010CBSMsg.KEY_WRIB_SVC_CD, wribSvcCd}};
//			
//			CAANMsg[] ekk0451b010Out = callSC(handle, param, scCall, ekk0451b010In).getCAANMsgList(EKK0451B010CBSMsg.EKK0451B010CBSMSG1LIST);
//			
//			if (ekk0451b010Out != null && ekk0451b010Out.length > 0)
//			{
//				value = "有";
//				break;
//			}
//		}
//		
//		return value;
//	}
//	
//	/**
//	 * SC呼出
//	 * @param handle
//	 * @param param
//	 * @param scCall
//	 * @param svcIfMapData
//	 * @return CAANMsg
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg callSC(SessionHandle handle, 
//							IRequestParameterReadWrite param, 
//							ServiceComponentRequestInvoker scCall,
//							Object[][] svcIfMapData) throws Exception
//	{
//		
//		// ◇ 上りマッピング処理
//		// 上りマッピングの処理結果を取得するためのマップを生成
//		HashMap<String, Object> paramMap = editInMsg(param, svcIfMapData);
//		
//		// SC呼出実行
//		Map<?, ?> result = scCall.run(paramMap, handle);
//		
//		// 処理結果の判定
//		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
//		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
//		
//		// エラー情報の転記
//		editErrorInfo(param, templates, (Integer)result.get(JCMConstants.RET_CD_INT_KEY));
//		
//		//エラー情報のマップを取得
//		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
//		if (errList == null)
//		{
//			errList = new ArrayList<Object>();
//		}
//		// コントロールマップに設定
//		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
//		
//		int status = templates[0].getInt(JCMConstants.STATUS_INT_KEY);
//		// 異常の場合、SCCallExceptionを生成してスローする
//		if(!("0".equals(rtnCode) && 0 == status))
//		{
//			throw new SCCallException("戻り値不正", rtnCode, status);
//		}
//		
//		return ((CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY))[0];
//	}
//	
//	/**
//	 * 上りマッピング処理
//	 * @param param
//	 * @param mapData
//	 * @return HashMap<String, Object>
//	 * @throws RequestParameterException
//	 */
//	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param, 
//												Object[][] mapData) throws RequestParameterException
//	{
//		HashMap<String, Object> paramMap = new HashMap<String, Object>();
//		
//		// 【取得元：電文ヘッダ(ヘッダ)】
//		// 電文ID
//		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
//		// ユースケースID
//		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
//		// オペレーションID
//		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
//		// サービス呼び出し区分
//		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
//		
//		// 【取得元：ユーザエリア(コントロールマップ)】
//		// 依頼先ホスト名
//		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
//		// 依頼元IPアドレス
//		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
//		// 依頼元画面ID
//		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
//		// オペレータID
//		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
//		
//		String svcIf = (String)mapData[0][1];
//		
//		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
//		
//		// オペレータID
//		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
//		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
//		
//		// 運用日付
//		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
//		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
//		
//		// 運用日時
//		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
//		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
//		
//		for (int i = 0; i < mapData.length; i++)
//		{
//			Object[] mapVal = mapData[i];
//			if ("".equals(mapVal[1]))
//			{
//				template.setNull((String)mapVal[0]);
//			}
//			else
//			{
//				template.set((String)mapVal[0], (String)mapVal[1]);
//			}
//		}
//		
//		CAANMsg[] templates = new CAANMsg[1];
//		templates[0] = template;
//		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
//		
//		return paramMap;
//	}
//	
//	/**
//	 * サービスインターフェイスのエラー情報をマッピングする。
//	 * <br>
//	 * @param param リクエストパラメータ
//	 * @param templates サービスインターフェイスリスト
//	 * @param returnCode リターンコード	
//	 * @return IRequestParameterReadWrite リクエストパラメータ
//	 * @throws RequestParameterException
//	 */
//	@SuppressWarnings("unchecked")
//	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, 
//													CAANMsg[] templates,
//													int returnCode) throws RequestParameterException
//	{
//		for (int i = 0; i < templates.length; i++)
//		{
//			CAANMsg template = templates[i];
//			int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
//			if (returnCode != 0)
//			{
//				templateStatus = 9000;
//			}
//			if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
//			{
//				templateStatus = 0;
//			}
//			
//			int bpStatus = 0;
//			Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
//			if (obj == null)
//			{
//				bpStatus = -1;
//			}
//			else
//			{
//				bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
//			}
//			
//			if (templateStatus > bpStatus)
//			{
//				// BPにサービスコンポーネントのステータスを設定する。
//				String formatStatus = String.format("%1$04d", templateStatus);
//				String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
//				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
//				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
//			}
//			
//			HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(SERVICE_ID);
//			
//			HashMap<?, ?> mp = template.getHashMap();
//			
//			Iterator it = mp.keySet().iterator();
//			while (it.hasNext())
//			{
//				String key = (String)it.next();
//				if (key.endsWith("_err"))
//				{
//					int keyIdx = key.lastIndexOf("_err");
//					if (inMap.containsKey(key.substring(0, keyIdx)))
//					{
//						inMap.put(key, mp.get(key));
//					}
//				}
//			}
//		}
//		
//		return param;
//	}
	/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
	/* ++++++++++ v4.00.01 修正終了 ++++++++++ */

}
