/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKKikiHaisoStatCfmCC
*   ソースファイル名：JKKKikiHaisoStatCfmCC.java
*   作成者          ：FJ
*   日付            ：2013年02月14日
*＜機能概要＞
*   機器の配送・返品状態を確認する。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00	    2013/02/14   FJ)砂川     新規作成
**********************************************************************/
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.IRequestParameterReadOnly;
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.SCCallException;
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.EDK0011B090CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0301B060CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B060CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;

public class JKKKikiHaisoStatCfmCC extends AbstractCommonComponent {

	/** 判定結果コード:配送済かつ未返品 */
	private static final String HAISO_Z_M_HMPIN = "0";

	/** 判定結果コード:未配送 */
	private static final String MI_HAISO = "1";

	/** 判定結果コード:返品予定または返品済 */
	private static final String HMPIN_RSV_HMPIN_Z = "2";

	/** 機器提供サービス契約ステータス:解約済 */
	private static final String KKTK_SVC_KEI_STAT_910 = "910";

	/** 機器提供サービス契約ステータス:キャンセル済 */
	private static final String KKTK_SVC_KEI_STAT_920 = "920";

	/** 機器提供種別コード:持込 */
	private static final String KKTK_SBT_CD_03 = "03";

	/** 返品機器ステータス:取消済 */
	private static final String HMPIN_KIKI_STAT_004 = "004";

	/**
	 * 機器の配送・返品状態を確認する処理です。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite haisoStatCfm(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 入力項目の確認
		if(null == inMap || null == inMap.get("svc_kei_no") || "".equals(inMap.get("svc_kei_no")) 
				|| null == inMap.get("taknkiki_sbt_cd") || "".equals(inMap.get("taknkiki_sbt_cd")))
		{
			param = setJudgeRsltCd(param, fixedText, MI_HAISO);
			return param;
		}
		
		// 作業用マップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		HashMap<String, Object> childMap = new HashMap<String, Object>();
		
		// 対象機器情報リスト
		ArrayList tgKikiInfList = new ArrayList();
		
		// 対象機器配送情報リスト
		ArrayList tgKikiHaisoInfList = new ArrayList();
		
		// 機器提供サービス契約一覧照会出力マップ
		HashMap<String, Object> ekk0341B002_map = null;
		ArrayList ekk0341B002_list = null;
		// 機器提供サービス契約ステータス
		String kktkSvcKeiStat = null;
		// 機器変更番号
		String kikiChgNo = null;
		
		// 機器提供サービス契約一意照会出力マップ
		HashMap<String, Object> ekk0341A010_map = null;
		
		// 契約機器配送対象物品一覧照会出力マップ
		HashMap<String, Object> edk0011B090_map = null;
		ArrayList edk0011B090_list = null;
		
		// 返品機器取消一覧照会出力マップ
		HashMap<String, Object> edk0301B060_map = null;
		ArrayList edk0301B060_list = null;
		
		// EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）
		ekk0341B002_map = getEKK0341B002Map(handle, param, fixedText);
		workMap.put("ekk0341B002_map", ekk0341B002_map);
		
		if(null == ekk0341B002_map || null == ekk0341B002_map.get("EKK0341B002CBSMsg1List"))
		{
			// 機器提供サービス契約一覧照会の取得結果無
			param = setJudgeRsltCd(param, fixedText, MI_HAISO);
			return param;
		}
		
		ekk0341B002_list = (ArrayList)ekk0341B002_map.get("EKK0341B002CBSMsg1List");
		
		if(1 > ekk0341B002_list.size())
		{
			// 機器提供サービス契約一覧照会の取得結果無
			param = setJudgeRsltCd(param, fixedText, MI_HAISO);
			return param;
		}
		
		for(int i = 0; i < ekk0341B002_list.size(); i++)
		{
			childMap = (HashMap)ekk0341B002_list.get(i);
			kktkSvcKeiStat = (String)childMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
			
			if(KKTK_SVC_KEI_STAT_910.equals(kktkSvcKeiStat) || KKTK_SVC_KEI_STAT_920.equals(kktkSvcKeiStat))
			{
				// 解約済またはキャンセル済の機器は対象外
				continue;
			}
			// EKK0341A010_機器提供サービス契約一意照会
			ekk0341A010_map = getEKK0341A010Map(handle, param, fixedText, childMap);
			
			if(null == ekk0341A010_map || null == ekk0341A010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD) 
					|| !((inMap.get("taknkiki_sbt_cd")).equals(ekk0341A010_map.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD))))
			{
				// 指定された宅内機器種別コードと一致しない場合は対象外
				continue;
			}
			if(null != ekk0341A010_map.get(EKK0341A010CBSMsg1List.KKTK_SBT_CD) 
					&& KKTK_SBT_CD_03.equals(ekk0341A010_map.get(EKK0341A010CBSMsg1List.KKTK_SBT_CD)))
			{
				// 該当する機器の持ち込みがされている
				param = setJudgeRsltCd(param, fixedText, HAISO_Z_M_HMPIN);
				return param;
			}
			// 指定された宅内機器種別コードと一致し解約済でもキャンセル済でもない機器提供サービス契約情報をリストに保持
			tgKikiInfList.add(ekk0341A010_map);
		}
		
		if(1 > tgKikiInfList.size())
		{
			// 該当する機器提供サービス契約情報が存在しない
			param = setJudgeRsltCd(param, fixedText, MI_HAISO);
			return param;
		}
		
		for(int i = 0; i < tgKikiInfList.size(); i++)
		{
			childMap = (HashMap)tgKikiInfList.get(i);
			
			if(null == childMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO) 
					|| "".equals(childMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO)))
			{
				// 機器変更番号が取得できない場合、次レコードにスキップ
				continue;
			}
			kikiChgNo = (String)childMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
			
			// EDK0011B090_契約機器配送対象物品一覧照会
			edk0011B090_map = getEDK0011B090Map(handle, param, fixedText, childMap);
			
			// 配送状態確認処理
			if(null == edk0011B090_map || null == edk0011B090_map.get("EDK0011B090CBSMsg1List"))
			{
				continue;
			}
			edk0011B090_list = (ArrayList)edk0011B090_map.get("EDK0011B090CBSMsg1List");
			if(1 > edk0011B090_list.size())
			{
				continue;
			}
			for(int j = 0; j < edk0011B090_list.size(); j++)
			{
				childMap = (HashMap)edk0011B090_list.get(j);
				
				if(null == childMap.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO) 
						|| !(kikiChgNo.equals(childMap.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO))))
				{
					// 機器変更番号が取得できない、または機器提供サービス契約番号の機器変更番号と一致しない場合、
					// 次レコードにスキップ
					continue;
				}
				if(null != childMap.get(EDK0011B090CBSMsg1List.HAISO_FIN_YMD) 
						&& !("".equals(childMap.get(EDK0011B090CBSMsg1List.HAISO_FIN_YMD))))
				{
					// 配送完了年月日がNULLでないため、対象機器配送情報リストに退避
					tgKikiHaisoInfList.add(childMap);
				}
			}
		}
		if(1 > tgKikiHaisoInfList.size())
		{
			// 配送済の対象機器が確認されないため、未配送と判定
			param = setJudgeRsltCd(param, fixedText, MI_HAISO);
			return param;
		}
		
		boolean miHmpinFlg = true;
		for(int i = 0; i < tgKikiHaisoInfList.size(); i++)
		{
			childMap = (HashMap)tgKikiHaisoInfList.get(i);
			
			// EDK0301B060_返品機器取消一覧照会
			edk0301B060_map = getEDK0301B060Map(handle, param, fixedText, childMap);
			
			// 返品状態確認処理
			if(null == edk0301B060_map || null == edk0301B060_map.get("EDK0301B060CBSMsg1List"))
			{
				continue;
			}
			edk0301B060_list = (ArrayList)edk0301B060_map.get("EDK0301B060CBSMsg1List");
			if(1 > edk0301B060_list.size())
			{
				// 該当する機器の返品機器情報なし
				param = setJudgeRsltCd(param, fixedText, HAISO_Z_M_HMPIN);
				return param;
			}
			kikiChgNo = (String)childMap.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO);
			
			miHmpinFlg = true;
			
			for(int j = 0; j < edk0301B060_list.size(); j++)
			{
				childMap = (HashMap)edk0301B060_list.get(j);
				
				if(null == childMap.get(EDK0301B060CBSMsg1List.KIKI_CHG_NO) 
						|| !(kikiChgNo.equals(childMap.get(EDK0301B060CBSMsg1List.KIKI_CHG_NO))))
				{
					// 機器変更番号が取得できない、または配送の機器変更番号と一致しない場合、
					// 次レコードにスキップ
					continue;
				}
				if(!(HMPIN_KIKI_STAT_004.equals(childMap.get(EDK0301B060CBSMsg1List.HMPIN_KIKI_STAT))))
				{
					// 取消済でない返品機器情報が存在する場合、その機器は返品予定または返品済と判定
					// 次の機器の返品機器状態を確認する。
					miHmpinFlg = false;
					break;
				}
			}
			if(miHmpinFlg)
			{
				// 返品機器情報は存在するが、全て取り消されていると判定
				param = setJudgeRsltCd(param, fixedText, HAISO_Z_M_HMPIN);
				return param;
			}
		}
		// 配送済の機器の全てが返品予定または返品済にあると判定
		param = setJudgeRsltCd(param, fixedText, HMPIN_RSV_HMPIN_Z);
		
		return param;
	}

	/**
	 * 機器提供サービス契約一覧照会チェック処理。<br>
	 * 機器提供サービス契約一覧照会（サービス契約番号）サービスインターフェイスを作成し返却します。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws RequestParameterException
	{
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		// （機器提供サービス契約一覧照会（サービス契約番号）の上りのみ）
		HashMap paramMap = editInMsgEKK0341B002(param, fixedText);

		return paramMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2011.10.17
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0341B002CBSMsg.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 inMap = null;

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_no_err"))
			{
				inMap.put("svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR));
			}
		}
		// 機器提供サービス契約一覧照会（サービス契約番号）マップ.ＫＥＹ＿機器提供サービスコード → ＫＥＹ＿機器提供サービスコード のエラー情報返却
		if (!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR))
		{
			if (!inMap.containsKey("key_kktk_svc_cd_err"))
			{
				inMap.put("key_kktk_svc_cd_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR));
			}
		}
		// 機器提供サービス契約一覧照会（サービス契約番号）マップ.ＫＥＹ＿機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_kktk_svc_kei_no_err"))
			{
				inMap.put("key_kktk_svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));
			}
		}
		// 機器提供サービス契約一覧照会（サービス契約番号）マップ.ＫＥＹ＿ソート区分 → ＫＥＹ＿ソート区分 のエラー情報返却
		if (!template.isNull(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR))
		{
			if (!inMap.containsKey("key_sort_kbn_err"))
			{
				inMap.put("key_sort_kbn_err", template.getString(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR));
			}
		}
		return param;
	}

	/**
	 * メッセージ共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param paramMap (O) メッセージ共通部
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setCommonParamMap(IRequestParameterReadOnly param, HashMap<String, Object> paramMap)
	throws RequestParameterException
	{
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文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));
	}

	/**
	 * サービスインターフェイス共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param template (O) サービスインターフェイス
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setCommonTemplate(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		// オペレータ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);
	}

	/**
	 * 判定結果コード設定処理。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param chkcode (I) 判定機能コード
	 * @return True:判定機能コードと一致した場合
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite setJudgeRsltCd(IRequestParameterReadWrite param, String fixedText, 
			String judgeRsltCd) throws RequestParameterException
	{
		HashMap inMap = null;
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (null == inMap)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		inMap.put("judge_rslt_cd", judgeRsltCd);

		return param;
	}

	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getEKK0341B002Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsgEKK0341B002(param, fixedText);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPEKK0341B002(result, param, fixedText);

		return resultMap;
	}

	/**
	 * 機器提供サービス契約一意照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getEKK0341A010Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> childMap) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsgEKK0341A010(param, fixedText, childMap);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPEKK0341A010(result, param, fixedText);

		return resultMap;
	}

	/**
	 * 契約機器配送対象物品一覧照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getEDK0011B090Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> childMap) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsgEDK0011B090(param, fixedText, childMap);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPEDK0011B090(result, param, fixedText);

		return resultMap;
	}

	/**
	 * 返品機器取消一覧照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getEDK0301B060Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> childMap) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsgEDK0301B060(param, fixedText, childMap);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPEDK0301B060(result, param, fixedText);

		return resultMap;
	}

	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsgEKK0341B002(IRequestParameterReadOnly param, String fixedText)
	throws RequestParameterException
	{

		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EKK0341B002CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK0341B002CBSMsg.TEMPLATEID, "EKK0341B002");

		// 機能コード（固定：1）
		template.set(EKK0341B002CBSMsg.FUNC_CODE, "1");

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);

		// 機器提供サービス契約一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号
		if (inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))
		{
			template.setNull(EKK0341B002CBSMsg.KEY_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, (String)inMap.get("svc_kei_no"));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgEKK0341A010(IRequestParameterReadOnly param, String fixedText, HashMap<String, Object> childMap)
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EKK0341A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0341A010CBSMsg.TEMPLATEID, "EKK0341A010");

		// 機能コード（固定：2）
		template.set(EKK0341A010CBSMsg.FUNC_CODE, "2");

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);

		// 機器提供サービス契約一意照会マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号
		if (childMap == null || childMap.get("kktk_svc_kei_no") == null || "".equals(childMap.get("kktk_svc_kei_no")))
		{
			template.setNull(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, (String)childMap.get("kktk_svc_kei_no"));
		}

		// 機器提供サービス契約一意照会マップ.ＫＥＹ＿予約適用年月日 → 運用日
		template.set(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, (String)JCCBPCommon.getOpeDate(null));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgEDK0011B090(IRequestParameterReadOnly param, String fixedText, HashMap<String, Object> childMap)
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EDK0011B090CBSMsg.class.getName());

		// テンプレートID
		template.set(EDK0011B090CBSMsg.TEMPLATEID, "EDK0011B090");

		// 機能コード（固定：1）
		template.set(EDK0011B090CBSMsg.FUNC_CODE, "1");

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);

		// 契約機器配送対象物品一覧照会マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号
		if (childMap == null || childMap.get("kktk_svc_kei_no") == null || "".equals(childMap.get("kktk_svc_kei_no")))
		{
			template.setNull(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO);
		}
		else
		{
			template.set(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO, (String)childMap.get("kktk_svc_kei_no"));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgEDK0301B060(IRequestParameterReadOnly param, String fixedText, HashMap<String, Object> childMap)
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EDK0301B060CBSMsg.class.getName());

		// テンプレートID
		template.set(EDK0301B060CBSMsg.TEMPLATEID, "EDK0301B060");

		// 機能コード（固定：1）
		template.set(EDK0301B060CBSMsg.FUNC_CODE, "1");

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);

		// 契約機器配送対象物品一覧照会マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号
		if (childMap == null || childMap.get("kktk_svc_kei_no") == null || "".equals(childMap.get("kktk_svc_kei_no")))
		{
			template.setNull(EDK0301B060CBSMsg.KEY_KKTK_SVC_KEI_NO);
		}
		else
		{
			template.set(EDK0301B060CBSMsg.KEY_KKTK_SVC_KEI_NO, (String)childMap.get("kktk_svc_kei_no"));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPEKK0341B002(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	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 dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EKK0341B002CBSMsg1List");

		if(dataList == null)
		{
			dataList = new ArrayList();
		}

		if(templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				if (i >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);

				// 機器提供サービス契約一覧照会（サービス契約番号）.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約番号
				//  ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約番号
				childMap.put(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341B002CBSMsg1List", i, EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));

				// 機器提供サービス契約一覧照会（サービス契約番号）.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約ステータス
				//  ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約ステータス
				childMap.put(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341B002CBSMsg1List", i, EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT));
			}
		}
		dataMap.put("EKK0341B002CBSMsg1List", dataList);

		// エラー情報の設定
		param = editErrorInfo(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPEKK0341A010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);

		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();

		// 機器提供サービス契約一意照会マップ.機器提供サービス契約番号 ←　部品呼び出し
		dataMap.put(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341A010CBSMsg1List", 0, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));

		// 機器提供サービス契約一意照会マップ.機器提供種別コード ←　部品呼び出し
		dataMap.put(EKK0341A010CBSMsg1List.KKTK_SBT_CD, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341A010CBSMsg1List", 0, EKK0341A010CBSMsg1List.KKTK_SBT_CD));

		// 機器提供サービス契約一意照会マップ.宅内機器種別コード ←　部品呼び出し
		dataMap.put(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341A010CBSMsg1List", 0, EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD));

		// 機器提供サービス契約一意照会マップ.機器変更番号 ←　部品呼び出し
		dataMap.put(EKK0341A010CBSMsg1List.KIKI_CHG_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EKK0341A010CBSMsg1List", 0, EKK0341A010CBSMsg1List.KIKI_CHG_NO));

		// エラー情報の設定
		param = editErrorInfoEKK0341A010(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return dataMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPEDK0011B090(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	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 dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(EDK0011B090CBSMsg.EDK0011B090CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EDK0011B090CBSMsg1List");

		if(dataList == null)
		{
			dataList = new ArrayList();
		}

		if(templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				if (i >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.配送番号
				//  ← 契約機器配送対象物品一覧照会明細.配送番号
				childMap.put(EDK0011B090CBSMsg1List.HAISO_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.HAISO_NO));

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.配送ステータス
				//  ← 契約機器配送対象物品一覧照会明細.配送ステータス
				childMap.put(EDK0011B090CBSMsg1List.HAISO_STAT, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.HAISO_STAT));

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.機器提供サービス契約番号
				//  ← 契約機器配送対象物品一覧照会明細.機器提供サービス契約番号
				childMap.put(EDK0011B090CBSMsg1List.KKTK_SVC_KEI_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.KKTK_SVC_KEI_NO));

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.宅内機器種別コード
				//  ← 契約機器配送対象物品一覧照会明細.宅内機器種別コード
				childMap.put(EDK0011B090CBSMsg1List.TAKNKIKI_SBT_CD, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.TAKNKIKI_SBT_CD));

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.配送完了年月日
				//  ← 契約機器配送対象物品一覧照会明細.配送完了年月日
				childMap.put(EDK0011B090CBSMsg1List.HAISO_FIN_YMD, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.HAISO_FIN_YMD));

				// 契約機器配送対象物品一覧照会.契約機器配送対象物品一覧照会明細.機器変更番号
				//  ← 契約機器配送対象物品一覧照会明細.機器変更番号
				childMap.put(EDK0011B090CBSMsg1List.KIKI_CHG_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0011B090CBSMsg1List", i, EDK0011B090CBSMsg1List.KIKI_CHG_NO));
			}
		}
		dataMap.put("EDK0011B090CBSMsg1List", dataList);

		// エラー情報の設定
		param = editErrorInfoEDK0011B090(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPEDK0301B060(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	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 dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(EDK0301B060CBSMsg.EDK0301B060CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EDK0301B060CBSMsg1List");

		if(dataList == null)
		{
			dataList = new ArrayList();
		}

		if(templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				if (i >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);

				// 返品機器取消一覧照会.返品機器取消一覧照会明細.返品機器番号
				//  ← 返品機器取消一覧照会明細.返品機器番号
				childMap.put(EDK0301B060CBSMsg1List.HMPIN_KIKI_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0301B060CBSMsg1List", i, EDK0301B060CBSMsg1List.HMPIN_KIKI_NO));

				// 返品機器取消一覧照会.返品機器取消一覧照会明細.返品機器ステータス
				//  ← 返品機器取消一覧照会明細.返品機器ステータス
				childMap.put(EDK0301B060CBSMsg1List.HMPIN_KIKI_STAT, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0301B060CBSMsg1List", i, EDK0301B060CBSMsg1List.HMPIN_KIKI_STAT));

				// 返品機器取消一覧照会.返品機器取消一覧照会明細.機器提供サービス契約番号
				//  ← 返品機器取消一覧照会明細.機器提供サービス契約番号
				childMap.put(EDK0301B060CBSMsg1List.KKTK_SVC_KEI_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0301B060CBSMsg1List", i, EDK0301B060CBSMsg1List.KKTK_SVC_KEI_NO));

				// 返品機器取消一覧照会.返品機器取消一覧照会明細.機器変更番号
				//  ← 返品機器取消一覧照会明細.機器変更番号
				childMap.put(EDK0301B060CBSMsg1List.KIKI_CHG_NO, JPCBPCommon.getSCListValueString(parentTemplate, "EDK0301B060CBSMsg1List", i, EDK0301B060CBSMsg1List.KIKI_CHG_NO));
			}
		}
		dataMap.put("EDK0301B060CBSMsg1List", dataList);

		// エラー情報の設定
		param = editErrorInfoEDK0301B060(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2011.10.17
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoEKK0341A010(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0341A010CBSMsg.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 inMap = null;

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// 機器提供サービス契約一意照会マップ.ＫＥＹ＿機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_kktk_svc_kei_no_err"))
			{
				inMap.put("key_kktk_svc_kei_no_err", template.getString(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));
			}
		}
		// 機器提供サービス契約一意照会マップ.ＫＥＹ＿世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK0341A010CBSMsg.KEY_GENE_ADD_DTM_ERR))
		{
			if (!inMap.containsKey("key_gene_add_dtm_err"))
			{
				inMap.put("key_gene_add_dtm_err", template.getString(EKK0341A010CBSMsg.KEY_GENE_ADD_DTM_ERR));
			}
		}
		// 機器提供サービス契約一意照会マップ.ＫＥＹ＿予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却
		if (!template.isNull(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD_ERR))
		{
			if (!inMap.containsKey("key_rsv_aply_ymd_err"))
			{
				inMap.put("key_rsv_aply_ymd_err", template.getString(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD_ERR));
			}
		}
		return param;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2011.10.17
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoEDK0011B090(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EDK0011B090CBSMsg.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 inMap = null;

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// 契約機器配送対象物品一覧照会マップ.ＫＥＹ＿配送番号 → ＫＥＹ＿配送番号 のエラー情報返却
		if (!template.isNull(EDK0011B090CBSMsg.KEY_HAISO_NO_ERR))
		{
			if (!inMap.containsKey("key_haiso_no_err"))
			{
				inMap.put("key_haiso_no_err", template.getString(EDK0011B090CBSMsg.KEY_HAISO_NO_ERR));
			}
		}
		// 契約機器配送対象物品一覧照会マップ.ＫＥＹ＿配送対象物品番号 → ＫＥＹ＿配送対象物品番号 のエラー情報返却
		if (!template.isNull(EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO_ERR))
		{
			if (!inMap.containsKey("key_haiso_taibpin_no_err"))
			{
				inMap.put("key_haiso_taibpin_no_err", template.getString(EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO_ERR));
			}
		}
		// 契約機器配送対象物品一覧照会マップ.ＫＥＹ＿機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_kktk_svc_kei_no_err"))
			{
				inMap.put("key_kktk_svc_kei_no_err", template.getString(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));
			}
		}
		return param;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2011.10.17
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoEDK0301B060(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EDK0301B060CBSMsg.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 inMap = null;

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// 返品機器取消一覧照会マップ.ＫＥＹ＿機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EDK0301B060CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_kktk_svc_kei_no_err"))
			{
				inMap.put("key_kktk_svc_kei_no_err", template.getString(EDK0301B060CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));
			}
		}
		// 返品機器取消一覧照会マップ.ＫＥＹ＿返品機器ステータス → ＫＥＹ＿返品機器ステータス のエラー情報返却
		if (!template.isNull(EDK0301B060CBSMsg.KEY_HMPIN_KIKI_STAT_ERR))
		{
			if (!inMap.containsKey("key_hmpin_kiki_stat_err"))
			{
				inMap.put("key_hmpin_kiki_stat_err", template.getString(EDK0301B060CBSMsg.KEY_HMPIN_KIKI_STAT_ERR));
			}
		}
		return param;
	}
}
