/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKKeiNaiyoChgWebUkDataChgCC
*   ソースファイル名：JKKKeiNaiyoChgWebUkDataChgCC.java
*   作成者          ：FJ
*   日付            ：2012年09月13日
*＜機能概要＞
*   契約内容変更WEB受付データ更新サービスの共通コンポーネント
*＜修正履歴＞
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/09/13   FJ)赤穂       新規作成
*   v4.00.00    2012/11/01   FJ)宇野     ANK-1223-00-00 進捗対応
*   v4.01.00    2013/02/15   FJ)藤原    【ST3-2013-0000040】対応
*	v4.02.00	2013/03/14   FJ)稲岡    【ST1-2013-0000356】対応
*	v4.03.00	2013/03/21   FJ)馬場    【IT1-2013-0000562】対応
*	v8.00.00	2014/03/05   FJ）石橋   【ANK-1962-00-00】対応
*	v17.00.00	2015/08/03   FJ)遠藤    【ANK-2557-00-00】対応
*	v28.00.00	2017/01/11   FJ)宮下    【OM-2016-0001572】対応
*	v47.00.00   2019/11/07   FJ)三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*	v48.00.00   2020/02/12   FJ)三原    【ANK-3814-00-00】eoIDログインセキュリティ強化フォロー対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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.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.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1261C010CBSMsg;
import eo.common.constant.JKKStrConst;
/**
 * 契約内容変更WEB受付データ更新に関する登録処理を行います。
 * <br />
 * @author 富士通
 */
public class JKKKeiNaiyoChgWebUkDataChgCC extends AbstractCommonComponent
{
	
	/** 申込内容承認登録 */
	private static final String TEMPLATE_ID_EKK0011D020 = "EKK0011D020";
	/** 申込明細照査・後続業務依頼 */
	private static final String TEMPLATE_ID_EKK0021C060 = "EKK0021C060";
	/** PMPお客様情報変更依頼結果反映 */
	private static final String TEMPLATE_ID_EKK1261C010 = "EKK1261C010";
	/** お客様一意照会 */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	/** お客様＜個人＞一意照会 */
	private static final String TEMPLATE_ID_ECK0021A010 = "ECK0021A010";
	/** お客様＜個人＞内容変更 */
	private static final String TEMPLATE_ID_ECK0021C010 = "ECK0021C010";
	/** お客様＜法人＞一意照会  */
	private static final String TEMPLATE_ID_ECK0031A010 = "ECK0031A010";
	/** お客様＜法人＞内容変更  */
	private static final String TEMPLATE_ID_ECK0031C010 = "ECK0031C010";
	/** 進捗登録  */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
// ++++++++++ v4.02.00 追加開始 ++++++++++
	/** 連絡先情報変更 */
	private static final String TEMPLATE_ID_ECK0201C010 = "ECK0201C010";
	/** 連絡先種別コード（自宅） */
	private static final String RRKS_SBT_CD_HOME = "1";
	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_1 = "1";
// ++++++++++ v4.02.00 追加終了 ++++++++++
// ++++++++++ v4.03.00 追加開始 ++++++++++
	/** 指示書登録 */
	private static final String TEMPLATE_ID_ECK0151D010 = "ECK0151D010";
	/** 処理コード */
	private static final String TRN_CD_A01 = "A01";
	/** 結果フラグ（未実行） */
	private static final String RSLT_FLG_0 = "0";
	/** パラメータ有効数 */
	private static final String PARAMETER_YK_CNT_19 = "19";
	// ANK-3706-00-00 ADD START
	private static final String PARAMETER_YK_CNT_22 = "22";
	// ANK-3706-00-00 ADD END
	/** パラメータ1（処理区分） */
	private static final String PARAMETER_1_PU = "PU";
// ++++++++++ v4.03.00 追加終了 ++++++++++
	// ANK-2557-00-00 ADD START
	/** 請求書送付先情報  */
	private static final String TEMPLATE_ID_EKK0491C060 = "EKK0491C060";
	// ANK-2557-00-00 ADD END
	
	/** 契約者タイプコード（個人） */
	private static final String KEISHA_TYPE_CO_KOJIN = "1";
	
	/**
	 * 契約内容変更WEB受付データ更新を登録する。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updateKeiNaiyoChgWebUkData(SessionHandle handle,
																	IRequestParameterReadWrite param,
																	String fixedText) throws Throwable
	{
// ++++++++++ v4.02.00 追加開始 ++++++++++
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		String funcCd = (String)ccMsg.get(JCMConstants.FUNC_CODE_KEY);
		boolean contInfAddFlg = (Boolean)ccMsg.get("cont_inf_add_flg");
// ++++++++++ v4.02.00 追加終了 ++++++++++
// ++++++++++ v4.03.00 追加開始 ++++++++++
		String keishaSexCd = (String)ccMsg.get("keisha_sex_cd");
		String initKeishaSexCd = (String)ccMsg.get("init_keisha_sex_cd");
// ++++++++++ v4.03.00 追加終了 ++++++++++
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 申込内容承認登録
		Object[][] eKK0011d020IN = getArraysDataEKK0011D020(ccMsg);
		ArrayList<HashMap<String, Object>> inList = getArrayListEKK0011D020CBSMsg();
		
		CAANMsg ekk0011D020CBSMsg = callSCArray(handle, scCall, param, fixedText, eKK0011d020IN, "EKK0011D020CBSMsg1List", inList);
		
		CAANMsg ekk0011D020CBSMsg1List = ekk0011D020CBSMsg.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST)[0];
		
		String updDtm = getNullToStr(ekk0011D020CBSMsg.getString(EKK0011D020CBSMsg.UPD_DTM));
		String mskmDtlNo = getNullToStr(ekk0011D020CBSMsg1List.getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		
		// 申込明細照査・後続業務依頼
		Object[][] inParamData = getArraysDataEKK0021C060(ccMsg, mskmDtlNo, updDtm);
		
		CAANMsg eKK0021C060MsgData = callSC(handle, scCall, param, fixedText, inParamData);
		
		// PMPお客様情報変更依頼結果反映
		Object[][] eKK1261c010IN = getArraysDataEKK1261C010(ccMsg);
		
		CAANMsg eKK1261C010MsgData = callSC(handle, scCall, param, fixedText, eKK1261c010IN);
		
		// お客様一意照会
		Object[][] eCK0011a010IN = getArraysDataECK0011A010(ccMsg);
		
		CAANMsg eCK0011a010MsgData = callSC(handle, scCall, param, fixedText, eCK0011a010IN);
		
		// 契約者タイプコードの取得
		String keishaTypeCd = (String)ccMsg.get("keisha_type_cd");
		if(KEISHA_TYPE_CO_KOJIN.equals(keishaTypeCd))
		{
			
			// お客様＜個人＞内容変更
			updateCustKojin(handle, param, fixedText, ccMsg, scCall, eCK0011a010MsgData, contInfAddFlg);
			
		}
		else
		{
			
			// お客様＜法人＞内容変更
			updateCustHojin(handle, param, fixedText, ccMsg, scCall, eCK0011a010MsgData);
			
		}
		
// ++++++++++ v4.02.00 追加開始 ++++++++++
		// 「確定」時
		if (FUNC_CODE_1.equals(funcCd))
		{
			// 標準コンテンツ同意
			if (contInfAddFlg)
			{
				// 連絡先情報変更
				Object[][] eCK0201c010IN = getArraysDataECK0201C010(param, ccMsg);
				CAANMsg eCK0201C010MsgData = callSC(handle, scCall, param, fixedText, eCK0201c010IN);
				
// ++++++++++ v4.03.00 追加開始 ++++++++++
				// 更新年月日時分秒を格納
				Map workMap = (Map)param.getMappingWorkArea();
				
				HashMap workDataMap = (HashMap)workMap.get("WORK");
				
				workDataMap.put("work_upd_dtm", getNullToStr(eCK0201C010MsgData.getString(ECK0201C010CBSMsg.UPD_DTM)));
				
				workMap.put("WORK", workDataMap);
				
				param.setMappingWorkArea(workMap);
// ++++++++++ v4.03.00 追加終了 ++++++++++
			}
			
			// ANK-3814-00-00 DEL START
//			// ANK-3706-00-00 ADD START
//			// 更新後のお客様の照会を行う。
//			// お客様一意照会(更新後)の上りマッピン
//			Object[][] afECK0011A010 = getArraysDataECK0011A010(ccMsg);
//			
//			CAANMsg afECK0011A010MsgData = new CAANMsg();
//			
//			if (afECK0011A010 != null)
//			{
//				// お客様一意照会(更新後)の結果を取得する
//				afECK0011A010MsgData = callSC(handle, scCall, param, fixedText, afECK0011A010);
//			}
//			
//			// お客様一意照会(更新後)の結果マップ
//			HashMap afECK0011A010Map = new HashMap();
//			
//			if (afECK0011A010MsgData != null)
//			{
//				afECK0011A010Map = afECK0011A010MsgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0].getHashMap();
//			}
//			
//			// 契約者電話番号(更新後)
//			String afKeishaTelno = "";
//			
//			// 契約者電話番号(更新後)を取得する
//			if (afECK0011A010Map != null && afECK0011A010Map.containsKey(ECK0011A010CBSMsg1List.KEISHA_TELNO))
//			{
//				afKeishaTelno = (String)afECK0011A010Map.get(ECK0011A010CBSMsg1List.KEISHA_TELNO);
//			}
//			
//			// お客様一意照会(更新前)の結果マップ
//			HashMap bfECK0011A010Map = eCK0011a010MsgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0].getHashMap();
//			// 契約者電話番号
//			String bfKeishaTelno = "";
//			
//			// 契約者電話番号(更新前)を取得する
//			if (bfECK0011A010Map != null && bfECK0011A010Map.containsKey(ECK0011A010CBSMsg1List.KEISHA_TELNO))
//			{
//				bfKeishaTelno = (String)bfECK0011A010Map.get(ECK0011A010CBSMsg1List.KEISHA_TELNO);
//			}
//			// ANK-3706-00-00 ADD END
			// ANK-3814-00-00 DEL END
			
// ++++++++++ v4.03.00 追加開始 ++++++++++
			// お客様性別または契約者電話番号が変更された場合、指示書登録を行う
			// ANK-3706-00-00 MOD START
			//if (!keishaSexCd.equals(initKeishaSexCd))
			// ANK-3814-00-00 MOD START
			//if (!keishaSexCd.equals(initKeishaSexCd) || !bfKeishaTelno.equals(afKeishaTelno))
			if (!keishaSexCd.equals(initKeishaSexCd))
			// ANK-3814-00-00 MOD END
			// ANK-3706-00-00 MOD END
			{
				// 指示書登録
				// ANK-3706-00-00 MOD START
				//Object[][] eCK0151d010IN = getArraysDataECK0151D010(param, ccMsg);
				// ANK-3814-00-00 MOD START
				//Object[][] eCK0151d010IN = getArraysDataECK0151D010(param, ccMsg, afKeishaTelno);
				Object[][] eCK0151d010IN = getArraysDataECK0151D010(param, ccMsg);
				// ANK-3814-00-00 MOD END
				// ANK-3706-00-00 MOD END
				callSC(handle, scCall, param, fixedText, eCK0151d010IN);
			}
// ++++++++++ v4.03.00 追加終了 ++++++++++
		}
// ++++++++++ v4.02.00 追加終了 ++++++++++
		
		// 進捗登録
		Object[][] eKK1091d010IN = getArraysDataEKK1091D010(ccMsg, mskmDtlNo);
		ArrayList<HashMap<String, Object>> inEKK1091D010List = getArrayListEKK1091D010CBSMsg();
		
		CAANMsg eKK1091D010MsgData = callSCArray(handle, scCall, param, fixedText, eKK1091d010IN, "EKK1091D010CBSMsg1List", inEKK1091D010List);
		
// ANK-2557-00-00 ADD START
		// 請求契約内容変更
		ArrayList chgList = new ArrayList();
		chgList = getArraysDataEKK0491C060IN(ccMsg);
		if (chgList != null && 0 < chgList.size())
		{
			for (int i = 0; i < chgList.size(); i++)
			{
				CAANMsg eKK0491C060CBSMsg = callSeikySC(handle, scCall, param, fixedText, (Object[][])chgList.get(i), ccMsg, mskmDtlNo);
			}
		}
// ANK-2557-00-00 ADD END
		
		return param;
		
	}
	
	/**
	 * 契約内容変更WEB受付データ更新ＣＣのチェック処理用サービスインターフェイス作成。<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<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文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));
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates.toArray(new CAANMsg[0]));
		return paramMap;
	}
	
	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * <br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		for (int i = 0; i < templates.length; i++)
		{
			editErrorInfoCom(param, templates, returnCode, fixedText);
		}
		return param;
	}
	
	/**
	 * お客様＜個人＞の更新処理を行います。<br>
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param scCall
	 * @param msgData
	 * @param contInfAddFlg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void updateCustKojin(SessionHandle handle,
									IRequestParameterReadWrite param,
									String fixedText,
									HashMap<String, Object> ccMsg,
									ServiceComponentRequestInvoker scCall,
									CAANMsg msgData,
									boolean contInfAddFlg) throws Throwable
	{
		// お客様＜個人＞一意照会
		Object[][] eCK0021a010IN = getArraysDataECK0021A010(ccMsg, msgData);
		
		CAANMsg eCK0021a010MsgData = callSC(handle, scCall, param, fixedText, eCK0021a010IN);
		
		HashMap custMap = msgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0].getHashMap();
		
		HashMap custKojinMap = eCK0021a010MsgData.getCAANMsgList(ECK0021A010CBSMsg.ECK0021A010CBSMSG1LIST)[0].getHashMap();
		
		custMap.putAll(custKojinMap);
		
		// お客様＜個人＞内容変更
		Object[][] eCK0021c010IN = getArraysDataECK0021C010(ccMsg, custMap, contInfAddFlg);
		
		CAANMsg eCK0021C010MsgData = callSC(handle, scCall, param, fixedText, eCK0021c010IN);
		
// ++++++++++ v4.02.00 追加開始 ++++++++++
		// 更新年月日時分秒を格納
		Map workMap = (Map)param.getMappingWorkArea();
		
		HashMap workDataMap = new HashMap();
		
		workDataMap.put("work_upd_dtm", getNullToStr(eCK0021C010MsgData.getString(ECK0021C010CBSMsg.UPD_DTM)));
		
		workMap.put("WORK", workDataMap);
		
		param.setMappingWorkArea(workMap);
// ++++++++++ v4.02.00 追加終了 ++++++++++
	}
	
	/**
	 * お客様＜法人＞の更新処理を行います。<br>
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param scCall
	 * @param msgData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void updateCustHojin(SessionHandle handle,
									IRequestParameterReadWrite param,
									String fixedText,
									HashMap<String, Object> ccMsg,
									ServiceComponentRequestInvoker scCall,
									CAANMsg msgData) throws Throwable
	{
		// お客様＜法人＞一意照会
		Object[][] eCK0031a010IN = getArraysDataECK0031A010(ccMsg, msgData);
		
		CAANMsg eCK0031a010MsgData = callSC(handle, scCall, param, fixedText, eCK0031a010IN);
		
		HashMap custMap = msgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0].getHashMap();
		
		HashMap custKojinMap = eCK0031a010MsgData.getCAANMsgList(ECK0031A010CBSMsg.ECK0031A010CBSMSG1LIST)[0].getHashMap();
		
		custMap.putAll(custKojinMap);
		
		// お客様＜法人＞内容変更
		Object[][] eCK0031c010IN = getArraysDataECK0031C010(ccMsg, custMap);
		
		CAANMsg eCK0031C010MsgData = callSC(handle, scCall, param, fixedText, eCK0031c010IN);
		
// ++++++++++ v4.03.00 追加開始 ++++++++++
		// 更新年月日時分秒を格納
		Map workMap = (Map)param.getMappingWorkArea();
		
		HashMap workDataMap = new HashMap();
		
		workDataMap.put("work_upd_dtm", getNullToStr(eCK0031C010MsgData.getString(ECK0031C010CBSMsg.UPD_DTM)));
		
		workMap.put("WORK", workDataMap);
		
		param.setMappingWorkArea(workMap);
// ++++++++++ v4.03.00 追加終了 ++++++++++
	}
	
	/**
	 * サービスIF(EKK0011D020)に格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @return Object[][]
	 */
	private Object[][] getArraysDataEKK0011D020(HashMap<String, Object> ccMsg)
	{
		String operateDate = JCCBPCommon.getOpeDate(null);
		String operateDateTime = JCCBPCommon.getOpeDateTimeStamp(null);
		
		Object[][] arraysParam = {
				{EKK0011D010CBSMsg.TEMPLATEID,                 TEMPLATE_ID_EKK0011D020},
				{EKK0011D010CBSMsg.FUNC_CODE,                  (String)ccMsg.get("func_code")},
				{EKK0011D010CBSMsg.SYSID,                      (String)ccMsg.get("sysid")},
				{EKK0011D010CBSMsg.MSKM_YMD,                   operateDate},
				{EKK0011D010CBSMsg.MSKM_UK_DTM,                operateDateTime},
				{EKK0011D010CBSMsg.MSKM_SBT_CD,                "00016"},
				{EKK0011D010CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, "04"},
				{EKK0011D010CBSMsg.MSKMSHO_ARIV_YMD,           ""},
				{EKK0011D010CBSMsg.MSKM_UK_TNT_USER_ID,        ""},
				{EKK0011D010CBSMsg.TTL_BUSINESS_CENTER_UK_NO,  ""},
				{EKK0011D010CBSMsg.TTL_BUSINESS_MSKM_OPT_CD,   ""},
				{EKK0011D010CBSMsg.MSKM_RRKS_TELNO,            ""},
				{EKK0011D010CBSMsg.MSKM_JSSIS_SBT_CD,          ""},
				{EKK0011D010CBSMsg.CUST_YOBO_JIKO,             ""},
				{EKK0011D010CBSMsg.TEL_RRK_KIBOD_SBT_CD,       ""},
				{EKK0011D010CBSMsg.TEL_RRK_KIBO_TIME_CD,       ""},
				{EKK0011D010CBSMsg.TAKCHO_KIBOD_SBT_CD,        ""},
				{EKK0011D010CBSMsg.TAKCHO_KIBO_TIME_CD,        ""},
				{EKK0011D010CBSMsg.KARI_MSKM_FLG,              ""},
				{EKK0011D010CBSMsg.REFERER,                    ""},
				{EKK0011D010CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM, ""},
				{EKK0011D010CBSMsg.SHOSA_BF_RRK_JIKO_YH,       ""},
				{EKK0011D010CBSMsg.SHOSA_BF_RRK_JIKO,          ""},
				{EKK0011D010CBSMsg.USE_SVC_KEIZK_SBT_CD,       ""},
				{EKK0011D010CBSMsg.UK_TNTSHA_SKBT_CD,          ""},
				{EKK0011D010CBSMsg.KOJI_REQ_INFO_RRK_JIKO,     ""},
				{EKK0011D010CBSMsg.MSKM_ROUTE_SKBT_CD,         ""},
			};
		
		return arraysParam;
	}
	
	/**
	 * サービスIF(EKK0011D010)に格納する申込明細の組み立て(登録用)<br>
	 * <br>
	 * @return ArrayList
	 */
	private ArrayList<HashMap<String, Object>> getArrayListEKK0011D020CBSMsg()
	{
		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		inMap.put(EKK0011D020CBSMsg1List.MSKMSHO_NO, "");
		inMap.put(EKK0011D020CBSMsg1List.WEB_UK_NO, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKM_FORM_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKM_DTL_SBT_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.RRKS_KTAI_TELNO, "");
		inMap.put(EKK0011D020CBSMsg1List.RRKS_OFFC_NM, "");
		inMap.put(EKK0011D020CBSMsg1List.DT_RRKS_TELNO, "");
		inMap.put(EKK0011D020CBSMsg1List.NEW_MSKM_SBT_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKM_OPTNTY_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD, "");
		inMap.put(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_TELNO, "");
		inMap.put(EKK0011D020CBSMsg1List.RRK_JIKO_ADD_DTM, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKM_RRKS_MLAD, "");
		inMap.put(EKK0011D020CBSMsg1List.KOJI_PRG_TCHI_MLAD, "");
		inMap.put(EKK0011D020CBSMsg1List.RRK_JIKO, "");
		inMap.put(EKK0011D020CBSMsg1List.KJSC_TCH_KTAI_MLAD, "");
		inMap.put(EKK0011D020CBSMsg1List.ML_SEND_JGI_FLG, "");
		inMap.put(EKK0011D020CBSMsg1List.ML_SEND_JGI_RSN_MEMO, "");
		inMap.put(EKK0011D020CBSMsg1List.BMP_MSKM_RRKS_TLN, "");
		inMap.put(EKK0011D020CBSMsg1List.OP_SVC_HKTGI_UM, "");
		inMap.put(EKK0011D020CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM, "");
		inMap.put(EKK0011D020CBSMsg1List.RRK_WAY_HOKI, "");
		inMap.put(EKK0011D020CBSMsg1List.NEWCONST_BUKKEN_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.HUKKAT_ANKEN_FLG, "");
		inMap.put(EKK0011D020CBSMsg1List.SAME_EQUIP_RE_MSKM_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKMSHO_SBT_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.KEI_HUKA_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MAP_TEMP_UM, "");
		inMap.put(EKK0011D020CBSMsg1List.KCN_STB_MSKM_CNT, "");
		inMap.put(EKK0011D020CBSMsg1List.KCN_STB_KIND_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN, "");
		inMap.put(EKK0011D020CBSMsg1List.MANSION_ID, "");
		inMap.put(EKK0011D020CBSMsg1List.CATID, "");
		inMap.put(EKK0011D020CBSMsg1List.MKM_UK_SBT_CD, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM, "");
		inMap.put(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TELNO, "");
		
		inList.add(inMap);
		
		return inList;
		
	}
	
	/**
	 * 申込明細照査・後続業務依頼サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param mskmDtlNo
	 * @param updDtm
	 * @return Object[][]
	 */
	private Object[][] getArraysDataEKK0021C060(HashMap<String, Object> ccMsg, String mskmDtlNo, String updDtm)
	{
		String operateDate = JCCBPCommon.getOpeDate(null);
		
		Object[][] arraysParam = {
				{EKK0021C060CBSMsg.TEMPLATEID,    TEMPLATE_ID_EKK0021C060},
				{EKK0021C060CBSMsg.FUNC_CODE,     (String)ccMsg.get("func_code")},
				{EKK0021C060CBSMsg.MSKM_DTL_NO,   mskmDtlNo},
				{EKK0021C060CBSMsg.KZKWRK_REQYMD, operateDate},
				{EKK0021C060CBSMsg.UPD_DTM_BF,    updDtm},
			};
		
		return arraysParam;
	}
	
	/**
	 * PMPお客様情報変更依頼結果反映サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @return Object[][]
	 */
	private Object[][] getArraysDataEKK1261C010(HashMap<String, Object> ccMsg)
	{
		String operateDate = JCCBPCommon.getOpeDate(null);
		
		Object[][] arraysParam = {
				{EKK1261C010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1261C010},
				{EKK1261C010CBSMsg.FUNC_CODE,           (String)ccMsg.get("func_code")},
				{EKK1261C010CBSMsg.PMP_CHG_REQ_SKBT_NO, (String)ccMsg.get("pmp_chg_req_skbt_no")},
				{EKK1261C010CBSMsg.DATA_HANEI_TRN_DAY,  operateDate},
				{EKK1261C010CBSMsg.UPD_DTM_BF,          (String)ccMsg.get("pmp_upd_dtm_bf")},
			};
		
		return arraysParam;
	}
	
	/**
	 * お客様一意照会サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @return Object[][]
	 */
	private Object[][] getArraysDataECK0011A010(HashMap<String, Object> ccMsg)
	{
		String operateDate = JCCBPCommon.getOpeDate(null);
		
		Object[][] arraysParam = {
				{ECK0011A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECK0011A010},
				{ECK0011A010CBSMsg.FUNC_CODE,        "2"},
				{ECK0011A010CBSMsg.KEY_SYSID,        (String)ccMsg.get("sysid")},
				{ECK0011A010CBSMsg.KEY_GENE_ADD_DTM, ""},
				{ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, operateDate},
			};
		
		return arraysParam;
	}
	
	/**
	 * お客様＜個人＞一意照会サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param msgData 
	 * @return Object[][]
	 */
	private Object[][] getArraysDataECK0021A010(HashMap<String, Object> ccMsg, CAANMsg msgData)
	{
		CAANMsg eck0011A010CBSMsg1List = msgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0];
		
		String geneAddDtm = getNullToStr(eck0011A010CBSMsg1List.getString(ECK0011A010CBSMsg1List.GENE_ADD_DTM));
		
		Object[][] arraysParam = {
				{ECK0021A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECK0021A010},
				{ECK0021A010CBSMsg.FUNC_CODE,        "1"},
				{ECK0021A010CBSMsg.KEY_SYSID,        (String)ccMsg.get("sysid")},
				{ECK0021A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm},
			};
		
		return arraysParam;
	}
	
	/**
	 * お客様＜法人＞一意照会サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param msgData 
	 * @return Object[][]
	 */
	private Object[][] getArraysDataECK0031A010(HashMap<String, Object> ccMsg, CAANMsg msgData)
	{
		CAANMsg eck0011A010CBSMsg1List = msgData.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST)[0];
		
		String geneAddDtm = getNullToStr(eck0011A010CBSMsg1List.getString(ECK0011A010CBSMsg1List.GENE_ADD_DTM));
		
		Object[][] arraysParam = {
				{ECK0031A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECK0031A010},
				{ECK0031A010CBSMsg.FUNC_CODE,        "1"},
				{ECK0031A010CBSMsg.KEY_SYSID,        (String)ccMsg.get("sysid")},
				{ECK0031A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm},
			};
		
		return arraysParam;
	}
	
	/**
	 * お客様＜個人＞内容変更サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param custMap
	 * @param contInfAddFlg
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] getArraysDataECK0021C010(HashMap<String, Object> ccMsg, HashMap custMap, boolean contInfAddFlg)
	{
		// 検索してきた値を更新用のパラメータに格納
		HashMap map = getInputMap(custMap, TEMPLATE_ID_ECK0021C010);
		
		// 画面からの入力項目等を上書きする。
		map.put(ECK0021C010CBSMsg.FUNC_CODE,               (String)ccMsg.get("func_code"));
		map.put(ECK0021C010CBSMsg.SYSID,                   (String)ccMsg.get("sysid"));
		map.put(ECK0021C010CBSMsg.UPD_DTM_BF,              (String)ccMsg.get("upd_dtm_bf"));
		map.put(ECK0021C010CBSMsg.KEISHA_AD_MAN_INPUT_FLG, (String)ccMsg.get("sksha_regai_input_btn"));
		
// ++++++++++ v4.01.00 修正開始 ++++++++++
//		map.put(ECK0021C010CBSMsg.KEISHA_AD_CHK_LV,        (String)ccMsg.get("sksha_regai_input_btn_lv"));
		map.put(ECK0021C010CBSMsg.KEISHA_AD_CHK_LV,        (String)ccMsg.get("keisha_ad_chk_lv"));
// ++++++++++ v4.01.00 修正終了 ++++++++++
		
		map.put(ECK0021C010CBSMsg.CUST_SEX_CD,             (String)ccMsg.get("keisha_sex_cd"));
		map.put(ECK0021C010CBSMsg.CUST_CFM_BIKO,           (String)ccMsg.get("kijiran"));
		map.put(ECK0021C010CBSMsg.KEISHA_AD_CD,            (String)ccMsg.get("gen_ad_cd"));
		map.put(ECK0021C010CBSMsg.KEISHA_PCD,              (String)ccMsg.get("keisha_ad_pcd"));
		map.put(ECK0021C010CBSMsg.KEISHA_STATE_NM,         (String)ccMsg.get("keisha_state_nm"));
		map.put(ECK0021C010CBSMsg.KEISHA_CITY_NM,          (String)ccMsg.get("keisha_city_nm"));
		map.put(ECK0021C010CBSMsg.KEISHA_OAZTSU_NM,        (String)ccMsg.get("keisha_oaztsu_nm"));
		map.put(ECK0021C010CBSMsg.KEISHA_AZCHO_NM,         (String)ccMsg.get("keisha_azcho_nm"));
		map.put(ECK0021C010CBSMsg.KEISHA_BNCHIGO,          (String)ccMsg.get("keisha_bnchigo"));
		map.put(ECK0021C010CBSMsg.KEISHA_ADRTTM,           (String)ccMsg.get("keisha_adrttm"));
		map.put(ECK0021C010CBSMsg.KEISHA_ADRRM,            (String)ccMsg.get("keisha_adrrm"));
		map.put(ECK0021C010CBSMsg.KEISHA_TELNO,            (String)ccMsg.get("keisha_telno"));
		
// ++++++++++ v4.02.00 追加開始 ++++++++++
		if (contInfAddFlg)
		{
			map.put(ECK0021C010CBSMsg.CONT_CUST_SEX_CD,        (String)ccMsg.get("cont_cust_sex_cd"));
			map.put(ECK0021C010CBSMsg.CONT_AD_CD,              (String)ccMsg.get("cont_ad_cd"));
			map.put(ECK0021C010CBSMsg.CONT_PCD,                (String)ccMsg.get("cont_pcd"));
			map.put(ECK0021C010CBSMsg.CONT_BNCHIGO,            (String)ccMsg.get("cont_bnchigo"));
			map.put(ECK0021C010CBSMsg.CONT_AD_BNKT_STA_PST,    (String)ccMsg.get("cont_ad_bnkt_sta_pst"));
			map.put(ECK0021C010CBSMsg.CONT_ADRTTM,             (String)ccMsg.get("cont_adrttm"));
		}
// ++++++++++ v4.02.00 追加終了 ++++++++++
		
		/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
		map.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM,     (String)ccMsg.get("kepg_kjnif_trat_doi_um"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD,    (String)ccMsg.get("kepg_kjnif_trat_doi_ymd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG,            (String)ccMsg.get("kepg_kjnift_ffg"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD,    (String)ccMsg.get("kepg_kjnift_ffg_chg_ymd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, (String)ccMsg.get("kepg_kjnift_ffg_chg_uwy_cd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_JOKYO_CD,       (String)ccMsg.get("kepg_kjnift_jokyo_cd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_STAYMD,         (String)ccMsg.get("kepg_kjnift_staymd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD,           (String)ccMsg.get("kepg_kjnift_rscd"));
		map.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD,   (String)ccMsg.get("kepg_kjnift_rscd_chg_ymd"));
		//OM-2016-0001572 ADD START
		map.put(ECK0021C010CBSMsg.RSV_APLY_YMD,   JCCBPCommon.getOpeDate(null));
		//OM-2016-0001572 ADD END
		/* ++++++++++ v8.00.00 追加終了 ++++++++++ */

		// 更新用のHashMapを二次元配列に格納
		Object[][] arraysParam = getArraysParam(map, ECK0021C010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0021C010);
		
		return arraysParam;
	}
	
	/**
	 * お客様＜法人＞内容変更サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param custMap
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] getArraysDataECK0031C010(HashMap<String, Object> ccMsg, HashMap custMap)
	{
		// 検索してきた値を更新用のパラメータに格納
		HashMap map = getInputMap(custMap, TEMPLATE_ID_ECK0031C010);
		
		// 画面からの入力項目等を上書きする。
		map.put(ECK0031C010CBSMsg.FUNC_CODE,               (String)ccMsg.get("func_code"));
		map.put(ECK0031C010CBSMsg.SYSID,                   (String)ccMsg.get("sysid"));
		map.put(ECK0031C010CBSMsg.UPD_DTM_BF,              (String)ccMsg.get("upd_dtm_bf"));
		map.put(ECK0031C010CBSMsg.KEISHA_AD_MAN_INPUT_FLG, (String)ccMsg.get("sksha_regai_input_btn"));
		
// ++++++++++ v4.01.00 修正開始 ++++++++++
//		map.put(ECK0031C010CBSMsg.KEISHA_AD_CHK_LV,        (String)ccMsg.get("sksha_regai_input_btn_lv"));
		map.put(ECK0031C010CBSMsg.KEISHA_AD_CHK_LV,        (String)ccMsg.get("keisha_ad_chk_lv"));
// ++++++++++ v4.01.00 修正終了 ++++++++++
		
		map.put(ECK0031C010CBSMsg.CUST_SEX_CD,             (String)ccMsg.get("keisha_sex_cd"));
		map.put(ECK0031C010CBSMsg.CUST_CFM_BIKO,           (String)ccMsg.get("kijiran"));
		map.put(ECK0031C010CBSMsg.KEISHA_AD_CD,            (String)ccMsg.get("gen_ad_cd"));
		map.put(ECK0031C010CBSMsg.KEISHA_PCD,              (String)ccMsg.get("keisha_ad_pcd"));
		map.put(ECK0031C010CBSMsg.KEISHA_STATE_NM,         (String)ccMsg.get("keisha_state_nm"));
		map.put(ECK0031C010CBSMsg.KEISHA_CITY_NM,          (String)ccMsg.get("keisha_city_nm"));
		map.put(ECK0031C010CBSMsg.KEISHA_OAZTSU_NM,        (String)ccMsg.get("keisha_oaztsu_nm"));
		map.put(ECK0031C010CBSMsg.KEISHA_AZCHO_NM,         (String)ccMsg.get("keisha_azcho_nm"));
		map.put(ECK0031C010CBSMsg.KEISHA_BNCHIGO,          (String)ccMsg.get("keisha_bnchigo"));
		map.put(ECK0031C010CBSMsg.KEISHA_ADRTTM,           (String)ccMsg.get("keisha_adrttm"));
		map.put(ECK0031C010CBSMsg.KEISHA_ADRRM,            (String)ccMsg.get("keisha_adrrm"));
		map.put(ECK0031C010CBSMsg.KEISHA_TELNO,            (String)ccMsg.get("keisha_telno"));
		
		/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
		map.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM,     (String)ccMsg.get("kepg_kjnif_trat_doi_um"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD,    (String)ccMsg.get("kepg_kjnif_trat_doi_ymd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG,            (String)ccMsg.get("kepg_kjnift_ffg"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD,    (String)ccMsg.get("kepg_kjnift_ffg_chg_ymd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, (String)ccMsg.get("kepg_kjnift_ffg_chg_uwy_cd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_JOKYO_CD,       (String)ccMsg.get("kepg_kjnift_jokyo_cd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_STAYMD,         (String)ccMsg.get("kepg_kjnift_staymd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD,           (String)ccMsg.get("kepg_kjnift_rscd"));
		map.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD,   (String)ccMsg.get("kepg_kjnift_rscd_chg_ymd"));
		//OM-2016-0001572 ADD START
		map.put(ECK0031C010CBSMsg.RSV_APLY_YMD,   JCCBPCommon.getOpeDate(null));
		//OM-2016-0001572 ADD END
		/* ++++++++++ v8.00.00 追加終了 ++++++++++ */

		// 更新用のHashMapを二次元配列に格納
		Object[][] arraysParam = getArraysParam(map, ECK0031C010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0031C010);
		
		return arraysParam;
	}
	
// ++++++++++ v4.02.00 追加開始 ++++++++++
	/**
	 * 連絡先情報変更サービスIFに格納するデータ群の組み立て。
	 * 
	 * @param ccMsg
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] getArraysDataECK0201C010(
													IRequestParameterReadWrite param, 
													HashMap<String, Object> ccMsg) throws Exception
	{
		String operateDate = JCCBPCommon.getOpeDate(null);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		Object[][] inMsg = {{ECK0201C010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0201C010},
							{ECK0201C010CBSMsg.FUNC_CODE, "1"},
							{ECK0201C010CBSMsg.RRKS_NO, (String)ccMsg.get("rrks_no")},
							{ECK0201C010CBSMsg.RRKS_SBT_CD, RRKS_SBT_CD_HOME},
							{ECK0201C010CBSMsg.TELNO, (String)ccMsg.get("cont_telno")},
							{ECK0201C010CBSMsg.RSV_APLY_YMD, operateDate},
							{ECK0201C010CBSMsg.UPD_DTM_BF, (String)workDataMap.get("work_upd_dtm")}};
		
		return inMsg;
	}
// ++++++++++ v4.02.00 追加終了 ++++++++++
	
// ++++++++++ v4.03.00 追加開始 ++++++++++
	/**
	 * 指示書登録サービスIFに格納するデータ群の組み立て。
	 * 
	 * @param param
	 * @param ccMsg
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	// ANK-3706-00-00 MOD START
	//private Object[][] getArraysDataECK0151D010(IRequestParameterReadWrite param, HashMap<String, Object> ccMsg) throws Exception
	// ANK-3814-00-00 MOD START
	//private Object[][] getArraysDataECK0151D010(IRequestParameterReadWrite param, HashMap<String, Object> ccMsg, String keishaTelno) throws Exception
	private Object[][] getArraysDataECK0151D010(IRequestParameterReadWrite param, HashMap<String, Object> ccMsg) throws Exception
	// ANK-3814-00-00 MOD END
	// ANK-3706-00-00 MOD END
	{
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		Object[][] inMsg = {{ECK0151D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0151D010},
							{ECK0151D010CBSMsg.FUNC_CODE, "1"},
							{ECK0151D010CBSMsg.TRN_CD, TRN_CD_A01},
							{ECK0151D010CBSMsg.TRAN_TRGT_SYSID, (String)ccMsg.get("sysid")},
							{ECK0151D010CBSMsg.RSLT_FLG, RSLT_FLG_0},
							// ANK-3706-00-00 MOD START
							//{ECK0151D010CBSMsg.PARAMETER_YK_CNT, PARAMETER_YK_CNT_19},
							{ECK0151D010CBSMsg.PARAMETER_YK_CNT, PARAMETER_YK_CNT_22},
							// ANK-3706-00-00 MOD END
							{ECK0151D010CBSMsg.PARAMETER_1, PARAMETER_1_PU},
							{ECK0151D010CBSMsg.PARAMETER_3, (String)ccMsg.get("sysid")},
							{ECK0151D010CBSMsg.PARAMETER_9, (String)ccMsg.get("keisha_sex_cd")},
							// ANK-3706-00-00 MOD START
							//{ECK0151D010CBSMsg.PARAMETER_19, (String)workDataMap.get("work_upd_dtm")}};
							{ECK0151D010CBSMsg.PARAMETER_19, (String)workDataMap.get("work_upd_dtm")},
							// ANK-3814-00-00 MOD START
							//{ECK0151D010CBSMsg.PARAMETER_20, keishaTelno},
							{ECK0151D010CBSMsg.PARAMETER_20, ""},
							// ANK-3814-00-00 MOD END
							{ECK0151D010CBSMsg.PARAMETER_21, ""},
							{ECK0151D010CBSMsg.PARAMETER_22, ""},
							};
							// ANK-3706-00-00 MOD END
		
		return inMsg;
	}
// ++++++++++ v4.03.00 追加終了 ++++++++++
	
	/**
	 * 検索してきた項目を更新用の項目に格納します。
	 * @param custMap
	 * @param svcIf
	 * @return HashMap<String, String>
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> getInputMap(HashMap<String, String> custMap, String svcIf)
	{
		CAANMsg inMsg = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		HashMap<String, String> map = new HashMap<String, String>();
		
		Iterator<String> ite = inMsg.getSchema().getSchemaKeySet().iterator();
		while (ite.hasNext())
		{
			String key = (String)ite.next();
			
			if(key.endsWith("_err"))
			{
				
				String tmpKey = key.substring(0, key.length() - 4);
				
				if(custMap.containsKey(tmpKey))
				{
					
					map.put(tmpKey, custMap.get(tmpKey));
					
				}
			}
		}
		return map;
	}
	
	/**
	 * 更新用のHashMapを二次元配列に格納します。
	 * @param map
	 * @param paramKey
	 * @param templateId
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] getArraysParam(HashMap<String, String> map, String paramKey, String templateId)
	{
		// 先頭の要素にはTemplateIDを格納するため要素をひとつ多く生成しておく。
		Object[][] arraysParam = new Object[map.size() + 1][2];
		
		// TemplateIDを格納
		arraysParam[0][0] = paramKey;
		arraysParam[0][1] = templateId;
		
		// 更新用のHashMapを二次元配列に格納
		Iterator iter = map.keySet().iterator();
		int i = 1;
		while (iter.hasNext())
		{
			String key = (String)iter.next();
			
			arraysParam[i][0] = key;
			arraysParam[i][1] = map.get(key);
			
			i++;
			
		}
		return arraysParam;
	}
	
	/**
	 * 進捗登録サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg
	 * @param mskmDtlNo 
	 * @return Object[][]
	 */
	private Object[][] getArraysDataEKK1091D010(HashMap<String, Object> ccMsg, String mskmDtlNo)
	{
		// ======== v4.00.00 ANK-1223-00-00 進捗対応 ========
//		String operateDateTime = JCCBPCommon.getOpeDateTimeStamp(null);
		String operateDateTime = JCCBPCommon.getSysDateTimeStamp();
		// ======== v4.00.00 ANK-1223-00-00 進捗対応 ========
		
		Object[][] arraysParam = {
				{EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010},
				{EKK1091D010CBSMsg.FUNC_CODE,  (String)ccMsg.get("func_code")},
				{EKK1091D010CBSMsg.MSKM_DTL_NO, mskmDtlNo},
				{EKK1091D010CBSMsg.SVC_KEI_NO, (String)ccMsg.get("svc_kei_no")},
				{EKK1091D010CBSMsg.IDO_DIV,    "00012"},
				{EKK1091D010CBSMsg.IDO_DTM,    operateDateTime},
				// ======== v4.00.00 ANK-1223-00-00 進捗対応 ========
				{EKK1091D010CBSMsg.PRG_TKJK_1, (String)ccMsg.get("prg_tkjk_1")},
				{EKK1091D010CBSMsg.PRG_TKJK_2, (String)ccMsg.get("prg_tkjk_2")},
				// ======== v4.00.00 ANK-1223-00-00 進捗対応 ========
				{EKK1091D010CBSMsg.PRG_STAT,   "6300"},
			};
		
		return arraysParam;
	}
	
	/**
	 * サービスIF(EKK1091D010)に格納するデータ群の組み立て<br>
	 * <br>
	 * @return ArrayList
	 */
	private ArrayList<HashMap<String, Object>> getArrayListEKK1091D010CBSMsg()
	{
		
		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		inMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD, "B1");
		
		inList.add(inMap);
		
		return inList;
		
	}
	
	// ANK-2557-00-00 ADD START
	/**
	 * 請求契約内容変更サービスIFに格納するデータ群の組み立て<br>
	 * <br>
	 * @param ccMsg SIF引渡しデータ
	 */
	@SuppressWarnings("unchecked")
	private ArrayList getArraysDataEKK0491C060IN(HashMap<String, Object> ccMsg)
	{
		ArrayList<HashMap> childList = new ArrayList<HashMap>();
		ArrayList inList = new ArrayList();

		childList = (ArrayList)ccMsg.get("EKK0491C060CBSMsg1List");
		
		if (childList != null && childList.size() > 0)
		{
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				Object[][] inMsg = {{EKK0491C060CBSMsg.TEMPLATEID,                  TEMPLATE_ID_EKK0491C060},
									{EKK0491C060CBSMsg.FUNC_CODE,                   (String)ccMsg.get("func_code")},
									{EKK0491C060CBSMsg.SEIKY_KEI_NO,                childMap.get("seiky_kei_no")},
									{EKK0491C060CBSMsg.MSKM_DTL_NO,                 childMap.get("mskm_dtl_no")},
									{EKK0491C060CBSMsg.SEIKY_KEI_KANA,              childMap.get("seiky_kei_kana")},
									{EKK0491C060CBSMsg.INFO_DSP_CD,                 childMap.get("info_dsp_cd")},
									{EKK0491C060CBSMsg.SEIKYUS_HAKKO_YH,            childMap.get("seikyus_hakko_yh")},
									{EKK0491C060CBSMsg.SKS_SHS_NM_CUST_NM_SAI_FLG,  childMap.get("sks_shs_nm_cust_nm_sai_flg")},
									{EKK0491C060CBSMsg.SHS_HOJIN_SBT_CD,            childMap.get("shs_hojin_sbt_cd")},
									{EKK0491C060CBSMsg.SHS_HOJIN_ZENGO_SHITEI_CD,   childMap.get("shs_hojin_zengo_shitei_cd")},
									{EKK0491C060CBSMsg.SHS_KANA,                    childMap.get("shs_kana")},
									{EKK0491C060CBSMsg.SOHUS_NM,                    childMap.get("sohus_nm")},
									{EKK0491C060CBSMsg.SOHUS_BKM,                   childMap.get("sohus_bkm")},
									{EKK0491C060CBSMsg.SOHUS_TNTSHA_NM,             childMap.get("sohus_tntsha_nm")},
									{EKK0491C060CBSMsg.SOHUS_FAX_NO,                childMap.get("sohus_fax_no")},
									{EKK0491C060CBSMsg.SOHUS_MLAD,                  childMap.get("sohus_mlad")},
									{EKK0491C060CBSMsg.SEIKY_WAY_APLY_ADJ_YMD,      childMap.get("seiky_way_aply_adj_ymd")},
									{EKK0491C060CBSMsg.RSV_TSTA_KIBO_YMD,           childMap.get("rsv_tsta_kibo_ymd")},
									{EKK0491C060CBSMsg.FIRST_SEIKY_YM,              childMap.get("first_seiky_ym")},
									{EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_SOHU_YH,   childMap.get("first_pay_mskmsho_sohu_yh")},
									{EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_SOHU_YMD,  childMap.get("first_pay_mskmsho_sohu_ymd")},
									{EKK0491C060CBSMsg.FIRST_PAY_MSKMSHO_RCP_YMD,   childMap.get("first_pay_mskmsho_rcp_ymd")},
									{EKK0491C060CBSMsg.UPD_DTM_BF,                  childMap.get("upd_dtm_bf")},
									};
				inList.add(inMsg);
			}
		}
		return inList;
	}
	// ANK-2557-00-00 ADD END
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return メッセージキャリア
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSCArray(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData,
							String inListMsgName, 
							ArrayList<HashMap<String, Object>> inList) throws Exception
	{
		HashMap<String, Object> paramMap = editInArrayMsg(param, mappingData, inListMsgName, inList);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoComArray(param, templates, (Integer)return_code, dataMapKey, mappingData, inListMsgName, inList);
		
		//エラー情報のマップを取得
		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));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		return msg;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData) throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
// ++++++++++ v4.01.00 修正開始 ++++++++++
			if(!("0".equals(return_code.toString()) && 4 == status))
			{
				throw new SCCallException("戻り値不正", return_code.toString(), status);
			}
// ++++++++++ v4.01.00 修正終了 ++++++++++
		}
		
		return msg;
	}
	
// ANK-2557-00-00 ADD START
	/**
	 * 請求契約内容変更SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param scCall サービス呼び出し
	 * @param param モデルグループ
	 * @param dataMapKey マップキーデータ
	 * @param mappingData マッピングデータ
	 * @param ccMsg SIF引渡しデータ
	 * @param mskmDtlNo 申込明細番号
	 * @return メッセージキャリア
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSeikySC(SessionHandle handle, 
								 ServiceComponentRequestInvoker scCall, 
								 IRequestParameterReadWrite param, 
								 String dataMapKey,
								 Object[][] mappingData,
								 HashMap<String, Object> ccMsg,
								 String mskmDtlNo) throws Throwable
	{
		HashMap<String, Object> paramMap = editInSeikyMsg(param, mappingData, ccMsg, mskmDtlNo);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			if(!("0".equals(return_code.toString()) && 4 == status))
			{
				throw new SCCallException("戻り値不正", return_code.toString(), status);
			}
		}
		
		return msg;
			}
// ANK-2557-00-00 ADD END
	
	/**
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) 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)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (null == obj)
		{
			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(dataMapKey);
		
		Iterator<String> it = inMap.keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					if (!inMap.containsKey(key))
					{
						inMap.put(key, template.getString(key));
					}
				}
			}
		}
		
		return param;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (null == obj)
		{
			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(dataMapKey);
		
		for (int i = 0; i < mappingData.length; i++)
		{
// ++++++++++ v4.01.00 修正開始 ++++++++++
//			if (((String)mappingData[i][0]).startsWith("key_"))
//			{
				if (!template.isNull(mappingData[i][0] + "_err"))
				{
					if (!inMap.containsKey(mappingData[i][0] + "_err"))
					{
						inMap.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
					}
				}
//			}
// ++++++++++ v4.01.00 修正終了 ++++++++++
		}
		
		return param;
	}
	
	/**
	 * @param param
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return HashMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInArrayMsg(IRequestParameterReadWrite param,
													Object[][] mappingData, 
													String inListMsgName, 
													ArrayList<HashMap<String, Object>> inList) 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)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(inListMsgName);
		
		if(templateArray == null)
		{
			templateArray = new CAANMsg[inList.size()];
		}
		
		for (int i = 0; i < inList.size(); i++)
		{
			HashMap childMap = (HashMap)inList.get(i);
			CAANMsg childTemplate = templateArray[i];
			if(childTemplate == null)
			{
				childTemplate = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg1List", svcIf));
			}
			
			Iterator it = childMap.keySet().iterator();
			while (it.hasNext())
			{
				String key = (String)it.next();
				
				if ("".equals(childMap.get(key)))
				{
					childTemplate.setNull(key);
				}
				else
				{
					childTemplate.set(key, (String)childMap.get(key));
				}
			}
			templateArray[i] = childTemplate;
		}
		
		template.set(inListMsgName, templateArray);
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoComArray(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData,
														String inListMsgName, 
														ArrayList<HashMap<String, Object>> inList) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		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, String> inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		CAANMsg[] templateArray = template.getCAANMsgList(inListMsgName);
		
		for (int i = 0; i < inList.size(); i++)
		{
			HashMap childMap = (HashMap)inList.get(i);
			CAANMsg childTemplate = templateArray[i];
			
			Iterator it = childMap.keySet().iterator();
			while (it.hasNext())
			{
				String key = (String)it.next();
				
				if (!childTemplate.isNull(key + "_err"))
				{
					if (!inMap.containsKey(key + "_err"))
					{
						inMap.put(key + "_err", childTemplate.getString(key + "_err"));
					}
				}
			}
		}
		
		if(!template.isNull(inListMsgName + "_err"))
		{
			if(!inMap.containsKey(inListMsgName + "_err"))
			{
				inMap.put(inListMsgName + "_err", template.getString(inListMsgName + "_err"));
			}
		}
		
		return param;
	}
	
// ANK-2557-00-00 ADD START
	/**
	 * @param param モデルグループ
	 * @param mappingData マッピングデータ
	 * @param ccMsg SIF引渡しデータ
	 * @param mskmDtlNo 申込明細番号
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInSeikyMsg(IRequestParameterReadWrite param,
												Object[][] mappingData,
												HashMap<String, Object> ccMsg,
												String mskmDtlNo) 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)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		if (mappingData != null && mappingData.length > 0)
		{
			
			for (int i = 0; i < mappingData.length; i++)
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
			
			String operateDate = JCCBPCommon.getOpeDate(null);
			// 画面入力からの変更項目
			// 送付先住所コード
			template.set(EKK0491C060CBSMsg.SOHUS_AD_CD, (String)ccMsg.get("sohus_ad_cd"));
			// 送付先郵便番号
			template.set(EKK0491C060CBSMsg.SOHUS_PCD, (String)ccMsg.get("sohus_pcd"));
			// 送付先都道府県名
			template.set(EKK0491C060CBSMsg.SOHUS_STATE_NM, (String)ccMsg.get("sohus_state_nm"));
			// 送付先市区町村名
			template.set(EKK0491C060CBSMsg.SOHUS_CITY_NM, (String)ccMsg.get("sohus_city_nm"));
			// 送付先大字通称名
			template.set(EKK0491C060CBSMsg.SOHUS_OAZTSU_NM, (String)ccMsg.get("sohus_oaztsu_nm"));
			// 送付先字丁目名
			template.set(EKK0491C060CBSMsg.SOHUS_AZCHO_NM, (String)ccMsg.get("sohus_azcho_nm"));
			// 送付先住所補記・建物名
			template.set(EKK0491C060CBSMsg.SOHUS_ADRTTM, (String)ccMsg.get("sohus_adrttm"));
			// 送付先住所補記・部屋番号
			template.set(EKK0491C060CBSMsg.SOHUS_ADRRM, (String)ccMsg.get("sohus_adrrm"));
			// 送付先番地号
			template.set(EKK0491C060CBSMsg.SOHUS_BNCHIGO, (String)ccMsg.get("sohus_bnchigo"));
			// 送付先住所手動入力フラグ
			template.set(EKK0491C060CBSMsg.SOHUS_AD_MAN_INPUT_FLG, (String)ccMsg.get("sohus_ad_man_input_flg"));
			// 送付先電話番号
			template.set(EKK0491C060CBSMsg.SOHUS_TELNO, (String)ccMsg.get("sohus_telno"));
			// 請求書送付先変更年月日
			template.set(EKK0491C060CBSMsg.SEIKYUS_SOHUS_CHGE_YMD, operateDate);
			// 申込明細番号
			template.set(EKK0491C060CBSMsg.MSKM_DTL_NO, mskmDtlNo);
			// 請求書送付先_契約者住所差異フラグ
			template.set(EKK0491C060CBSMsg.SKS_SHS_KSH_AD_SAI_FLG, "0");
			// 予約適用年月日
			template.set(EKK0491C060CBSMsg.RSV_APLY_YMD, operateDate);
			// 異動区分
			template.set(EKK0491C060CBSMsg.IDO_DIV, JKKStrConst.CD00576_CUST_INFO_CHG);
			// 送付先住所チェックレベル
			template.set(EKK0491C060CBSMsg.SOHUS_AD_CHK_LV, (String)ccMsg.get("sohus_ad_chk_lv"));
		
		}
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}
// ANK-2557-00-00 ADD END
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
}
