/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKAplyOpSvcKeiUtil
*   ソースファイル名：JKKAplyOpSvcKeiUtil.java
*   作成者          ：富士通
*   日付            ：2012年01月06日
*＜機能概要＞
*   オプションサービス契約適用部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/01/06   FJ）仁多見  新規作成
*   v4.00.00    2012/09/11   FJ) 谷口    【ANK-0546-00-00】宅内ＰＦ
*   v73.00.00	2024/10/17	 FJ) 舘山	 【ANK-4427-00-00】NTT卸対応
*   v75.00.00	2025/02/19	 FJ) 寺田	 【ANK-4640-00-00】typeN：追加要件対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
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.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0361C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0811B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0811B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1881B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1881B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C150CBSMsg;

/**
 * オプションサービス契約登録部品
 * <br>
 * @author 富士通
 */
public class JKKAplyOpSvcKeiUtil extends AbstractCommonComponent
{
	/** リターンメッセージ **/
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージ **/
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** エラー用 */
	private static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	/** 作業マップ */
	private static final String CC_WORK_AREA_NAME = "JKKAddOpSvcKeiUtilWork";
	/** モデムレンタル **/
	public static final String EOADSL_RENT_MODEM_FLG = "1";
	/** オプションサービスコード：Eメール */
	private static final String OP_SVC_CD_EMAIL = "B001";
	/** オプションサービスコード：Myホームページ */
	private static final String OP_SVC_CD_MYHOMEPAGE = "B002";
	/** サブオプションサービスコード：Eメール */
	private static final String SUB_OP_SVC_CD_EMAIL = "D02";
	/** サブオプションサービスコード：Myホームページ */
	private static final String SUB_OP_SVC_CD_MYHOMEPAGE = "D04";
	/** オプションサービスコード(B072:通話料上限通知) */
	public static final String OPT_SVC_CD_TWRYO_JGN_TCHI = "B072";
	/** 料金コース(B76:通話料上限通知) */
	public static final String PCRS_CD_TWRYO_JGN_TCHI = "B76";
	/** 初期オプションサービス数 */
	public static final String SHK_OP_SVC_CNT_MK = "0";
	/** 自動付与有無 */
	public static final String AUTO_FUYO_UM_YK = "1";

	/** サービス契約番号 */
	private String svcKeiNo = null;
	/** 料金コースコード */
	private String pcrsCd = null;
	/** サブオプションサービスコード */
	private String sbopSvcCd = null;
	/** 容量 */
	private String capa = null;
	
	/**
	 * オプションサービス契約登録処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite addOpSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}

		svcKeiNo = getMapValue(param, fixedText, "svc_kei_no");
		pcrsCd = getMapValue(param, fixedText, "key_pcrs_cd");

		// 料金コース_オプションサービス一覧照会（料金コースコード）
		template = editInEKK0811B001(param, fixedText); // 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
		editOutEKK0811B001(result, param, fixedText); // 下りマッピング
		if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
		{ // ステータスが単項目エラー以上であれば例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}

		ArrayList<HashMap> addOpList  = (ArrayList<HashMap>)getWorkMapValue(param, "add_op_list");
		int opMax = 0;
		if (addOpList != null)
		{
			opMax = addOpList.size();
		}
		for (int idx = 0; idx < opMax; idx++)
		{
			HashMap opMap = addOpList.get(idx);
			if (isOptionSkip(param, fixedText, opMap))
			{
				continue;
			}

			if(isGetSubOption(opMap))
			{
				// 料金コース_サブオプションサービス一覧照会
				template = editInEKK1881B001(param, fixedText); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editOutEKK1881B001(result, param, fixedText); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{
					// ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}

			// オプションサービス契約<ISP>登録
			template = editInEKK0361D010(param, fixedText, idx); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEKK0361D010(result, param, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{
				// ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		return param;
	}

	/**
	 * オプションサービス契約<ISP>登録を行うかを判定します。
	 * @param param
	 * @param fixedText
	 * @param opMap
	 * @return true：登録しない　false：登録する
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private boolean isOptionSkip(IRequestParameterReadWrite param, String fixedText, HashMap opMap) throws RequestParameterException
	{
		String count = (String)opMap.get("kk0811_shk_op_svc_cnt");
		int shkOpSvcCnt = 0;
		try
		{
			shkOpSvcCnt = Integer.parseInt(count);
		}
		catch (NumberFormatException e)
		{
			;
		}
		if (shkOpSvcCnt == 0)
		{
			// 初期オプションサービス数が0のオプションは登録しない。
			return true;
		}

		return false;
	}

	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param param
	 * @param paramMap
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setSCInputCommonData(IRequestParameterReadWrite 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));

		return paramMap;
	}

	/**
	 * 単一CAANMsgのマッピング処理を行います。
	 * <br>
	 * @param paramMap
	 * @param template
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> putParamMap(HashMap<String, Object> paramMap, CAANMsg template) throws RequestParameterException
	{
		CAANMsg[] templates = { template };
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param
	 * @return SCの実行ステータス
	 * @throws Exception
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws Exception
	{
		return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
	}

	/**
	 * リクエストパラメータのキーに対応する値を返却します。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText
	 * @param key 取得する値のキー
	 * @return 取得した値
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private String getMapValue(IRequestParameterReadWrite param, String fixedText, String key) throws RequestParameterException
	{
		HashMap inMap = (HashMap)(param.getData(fixedText));
		String result = (String)inMap.get(key);
		if ("".equals(result))
		{
			result = null;
		}

		return result;
	}

	/**
	 * 料金コース_オプションサービス一覧照会（料金コースコード）上りマッピング処理
	 * <br>
	 * @param param
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0811B001(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0811B001CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0811B001CBSMsg.TEMPLATEID, "EKK0811B001");

		// 機能コード（デフォルト：１）
		template.set(EKK0811B001CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));

		// 機能コード
		template.set(EKK0811B001CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));

		// ＫＥＹ＿料金コースコード
		if (pcrsCd == null || "".equals(pcrsCd))
		{
			template.setNull(EKK0811B001CBSMsg.KEY_PCRS_CD);
		}
		else
		{
			template.set(EKK0811B001CBSMsg.KEY_PCRS_CD, pcrsCd);
		}

		return template;
	}

	/**
	 * 料金コース_サブオプションサービス一覧照会上りマッピング処理
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param idx
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1881B001(IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1881B001CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK1881B001CBSMsg.TEMPLATEID, "EKK1881B001");

		// 機能コード（デフォルト：１）
		template.set(EKK1881B001CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));

		// 機能コード
		template.set(EKK1881B001CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));

		// ＫＥＹ＿料金コースコード
		if (pcrsCd == null || "".equals(pcrsCd))
		{
			template.setNull(EKK1881B001CBSMsg.KEY_PCRS_CD);
		}
		else
		{
			template.set(EKK1881B001CBSMsg.KEY_PCRS_CD, pcrsCd);
		}

		// ＫＥＹ＿サブオプションサービスコード
		if (sbopSvcCd == null || "".equals(sbopSvcCd))
		{
			template.setNull(EKK1881B001CBSMsg.KEY_SBOP_SVC_CD);
		}
		else
		{
			template.set(EKK1881B001CBSMsg.KEY_SBOP_SVC_CD, sbopSvcCd);
		}

		return template;
	}

	/**
	 * オプションサービス契約<ISP>登録上りマッピング処理
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param idx
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0361D010(IRequestParameterReadWrite param, String fixedText, int idx)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361D010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0361D010CBSMsg.TEMPLATEID, "EKK0361D010");

		// 機能コード（デフォルト：１）
		template.set(EKK0361D010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));

		// 機能コード
		template.set(EKK0361D010CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));

		ArrayList<HashMap> addOpList = (ArrayList<HashMap>)getWorkMapValue(param, "add_op_list");
		HashMap opMap = null;
		if (addOpList == null)
		{
			opMap = new HashMap();
		}
		else
		{
			opMap = addOpList.get(idx);
		}

		// オプションサービスコード
		String pcrsCd = null;
		String pplanCd = null;
		if (opMap == null || opMap.get("kk0811_op_svc_cd") == null || "".equals(opMap.get("kk0811_op_svc_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.OP_SVC_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.OP_SVC_CD, (String)opMap.get("kk0811_op_svc_cd"));

			pcrsCd = getPcrsCd((String)opMap.get("kk0811_op_svc_cd"));
			pplanCd = getPplanCd(pcrsCd);
		}

		// 料金コースコード
		if (pcrsCd == null || "".equals(pcrsCd))
		{
			template.setNull(EKK0361D010CBSMsg.PCRS_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.PCRS_CD, pcrsCd);
		}

		// 料金プランコード
		if (pplanCd == null || "".equals(pplanCd))
		{
			template.setNull(EKK0361D010CBSMsg.PPLAN_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.PPLAN_CD, pplanCd);
		}

		// 親契約識別コード
		if (inMap == null || inMap.get("kk0361_oya_kei_skbt_cd") == null || "".equals(inMap.get("kk0361_oya_kei_skbt_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD, (String)inMap.get("kk0361_oya_kei_skbt_cd"));
		}

		// サービス契約番号
		if (inMap == null || inMap.get("kk0361_svc_kei_no") == null || "".equals(inMap.get("kk0361_svc_kei_no")))
		{
			template.setNull(EKK0361D010CBSMsg.SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SVC_KEI_NO, (String)inMap.get("kk0361_svc_kei_no"));
		}

		// サービス契約内訳番号
		if (inMap == null || inMap.get("kk0361_svc_kei_ucwk_no") == null || "".equals(inMap.get("kk0361_svc_kei_ucwk_no")))
		{
			template.setNull(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO, (String)inMap.get("kk0361_svc_kei_ucwk_no"));
		}

		// SYSID
		if (inMap == null || inMap.get("kk0361_sysid") == null || "".equals(inMap.get("kk0361_sysid")))
		{
			template.setNull(EKK0361D010CBSMsg.SYSID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SYSID, (String)inMap.get("kk0361_sysid"));
		}

		// 申込明細番号
		if (inMap == null || inMap.get("kk0361_mskm_dtl_no") == null || "".equals(inMap.get("kk0361_mskm_dtl_no")))
		{
			template.setNull(EKK0361D010CBSMsg.MSKM_DTL_NO);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MSKM_DTL_NO, (String)inMap.get("kk0361_mskm_dtl_no"));
		}

		// 試用加入年月日
		if (inMap == null || inMap.get("kk0361_ftrial_kanyu_ymd") == null || "".equals(inMap.get("kk0361_ftrial_kanyu_ymd")))
		{
			template.setNull(EKK0361D010CBSMsg.FTRIAL_KANYU_YMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.FTRIAL_KANYU_YMD, (String)inMap.get("kk0361_ftrial_kanyu_ymd"));
		}

		// 試用期間終了年月日
		if (inMap == null || inMap.get("kk0361_ftrial_prd_endymd") == null || "".equals(inMap.get("kk0361_ftrial_prd_endymd")))
		{
			template.setNull(EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD, (String)inMap.get("kk0361_ftrial_prd_endymd"));
		}

		// 本加入年月日
		if (inMap == null || inMap.get("kk0361_honkanyu_ymd") == null || "".equals(inMap.get("kk0361_honkanyu_ymd")))
		{
			template.setNull(EKK0361D010CBSMsg.HONKANYU_YMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.HONKANYU_YMD, (String)inMap.get("kk0361_honkanyu_ymd"));
		}

		// 本加入移行期限年月日
		if (inMap == null || inMap.get("kk0361_honkanyu_iko_kigen_ymd") == null || "".equals(inMap.get("kk0361_honkanyu_iko_kigen_ymd")))
		{
			template.setNull(EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, (String)inMap.get("kk0361_honkanyu_iko_kigen_ymd"));
		}

		// サービス利用開始希望年月日
		if (inMap == null || inMap.get("kk0361_svc_use_sta_kibo_ymd") == null || "".equals(inMap.get("kk0361_svc_use_sta_kibo_ymd")))
		{
			template.setNull(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD, (String)inMap.get("kk0361_svc_use_sta_kibo_ymd"));
		}

		// 予約適用開始希望年月日
		if (inMap == null || inMap.get("kk0361_rsv_tsta_kibo_ymd") == null || "".equals(inMap.get("kk0361_rsv_tsta_kibo_ymd")))
		{
			template.setNull(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD, (String)inMap.get("kk0361_rsv_tsta_kibo_ymd"));
		}

		// 違約金発生コード
		if (inMap == null || inMap.get("kk0361_pnlty_hassei_cd") == null || "".equals(inMap.get("kk0361_pnlty_hassei_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.PNLTY_HASSEI_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.PNLTY_HASSEI_CD, (String)inMap.get("kk0361_pnlty_hassei_cd"));
		}

		// 異動区分
		if (inMap == null || inMap.get("kk0361_ido_div") == null || "".equals(inMap.get("kk0361_ido_div")))
		{
			template.setNull(EKK0361D010CBSMsg.IDO_DIV);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.IDO_DIV, (String)inMap.get("kk0361_ido_div"));
		}

		// 希望メールアカウント1
		if (inMap == null || inMap.get("kk0361_kibo_ml_account_1") == null || "".equals(inMap.get("kk0361_kibo_ml_account_1")))
		{
			template.setNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1, (String)inMap.get("kk0361_kibo_ml_account_1"));
		}

		// 希望メールアカウント2
		if (inMap == null || inMap.get("kk0361_kibo_ml_account_2") == null || "".equals(inMap.get("kk0361_kibo_ml_account_2")))
		{
			template.setNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2, (String)inMap.get("kk0361_kibo_ml_account_2"));
		}

		// 希望メールアカウント3
		if (inMap == null || inMap.get("kk0361_kibo_ml_account_3") == null || "".equals(inMap.get("kk0361_kibo_ml_account_3")))
		{
			template.setNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3, (String)inMap.get("kk0361_kibo_ml_account_3"));
		}

		// マルチセッション用セッション数
		if (inMap == null || inMap.get("kk0361_mltise_session_cnt") == null || "".equals(inMap.get("kk0361_mltise_session_cnt")))
		{
			template.setNull(EKK0361D010CBSMsg.MLTISE_SESSION_CNT);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLTISE_SESSION_CNT, (String)inMap.get("kk0361_mltise_session_cnt"));
		}

		// マルチセッション用初期認証IDパスワード
		if (inMap == null || inMap.get("kk0361_mltise_shk_ninsho_id_pwd") == null || "".equals(inMap.get("kk0361_mltise_shk_ninsho_id_pwd")))
		{
			template.setNull(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD, (String)inMap.get("kk0361_mltise_shk_ninsho_id_pwd"));
		}

		// マルチセッション用認証ID
		if (inMap == null || inMap.get("kk0361_mltise_ninsho_id") == null || "".equals(inMap.get("kk0361_mltise_ninsho_id")))
		{
			template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLTISE_NINSHO_ID, (String)inMap.get("kk0361_mltise_ninsho_id"));
		}

		// マルチセッション用認証IDパスワード
		if (inMap == null || inMap.get("kk0361_mltise_ninsho_id_pwd") == null || "".equals(inMap.get("kk0361_mltise_ninsho_id_pwd")))
		{
			template.setNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD, (String)inMap.get("kk0361_mltise_ninsho_id_pwd"));
		}

		// 固定IPアドレス
		if (inMap == null || inMap.get("kk0361_kotei_ip_ad") == null || "".equals(inMap.get("kk0361_kotei_ip_ad")))
		{
			template.setNull(EKK0361D010CBSMsg.KOTEI_IP_AD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.KOTEI_IP_AD, (String)inMap.get("kk0361_kotei_ip_ad"));
		}

		// ネットマスク
		if (inMap == null || inMap.get("kk0361_netmask") == null || "".equals(inMap.get("kk0361_netmask")))
		{
			template.setNull(EKK0361D010CBSMsg.NETMASK);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.NETMASK, (String)inMap.get("kk0361_netmask"));
		}

		// 容量
		if (capa == null || "".equals(capa))
		{
			template.setNull(EKK0361D010CBSMsg.CAPA);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.CAPA, capa);
			capa = null;
		}

		// URL(ドメイン)
		if (inMap == null || inMap.get("kk0361_url_domain") == null || "".equals(inMap.get("kk0361_url_domain")))
		{
			template.setNull(EKK0361D010CBSMsg.URL_DOMAIN);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.URL_DOMAIN, (String)inMap.get("kk0361_url_domain"));
		}

		// URL(アカウント)
		if (inMap == null || inMap.get("kk0361_url_account") == null || "".equals(inMap.get("kk0361_url_account")))
		{
			template.setNull(EKK0361D010CBSMsg.URL_ACCOUNT);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.URL_ACCOUNT, (String)inMap.get("kk0361_url_account"));
		}

		// メーリングリスト名
		if (inMap == null || inMap.get("kk0361_mllist_nm") == null || "".equals(inMap.get("kk0361_mllist_nm")))
		{
			template.setNull(EKK0361D010CBSMsg.MLLIST_NM);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLLIST_NM, (String)inMap.get("kk0361_mllist_nm"));
		}

		// メーリングリスト呼称
		if (inMap == null || inMap.get("kk0361_mllist_kosho") == null || "".equals(inMap.get("kk0361_mllist_kosho")))
		{
			template.setNull(EKK0361D010CBSMsg.MLLIST_KOSHO);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLLIST_KOSHO, (String)inMap.get("kk0361_mllist_kosho"));
		}

		// メーリングリスト公開要否
		if (inMap == null || inMap.get("kk0361_mllist_kokai_yh") == null || "".equals(inMap.get("kk0361_mllist_kokai_yh")))
		{
			template.setNull(EKK0361D010CBSMsg.MLLIST_KOKAI_YH);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLLIST_KOKAI_YH, (String)inMap.get("kk0361_mllist_kokai_yh"));
		}

		// メーリングリスト最大ユーザー数
		if (inMap == null || inMap.get("kk0361_mllist_max_user_cnt") == null || "".equals(inMap.get("kk0361_mllist_max_user_cnt")))
		{
			template.setNull(EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT, (String)inMap.get("kk0361_mllist_max_user_cnt"));
		}

		// メーリングリスト管理者メールアドレス
		if (inMap == null || inMap.get("kk0361_mllist_krisha_mlad") == null || "".equals(inMap.get("kk0361_mllist_krisha_mlad")))
		{
			template.setNull(EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD, (String)inMap.get("kk0361_mllist_krisha_mlad"));
		}

		// 独自ドメイン名
		if (inMap == null || inMap.get("kk0361_dokuji_domain_nm") == null || "".equals(inMap.get("kk0361_dokuji_domain_nm")))
		{
			template.setNull(EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM, (String)inMap.get("kk0361_dokuji_domain_nm"));
		}

		// ホスティングメールアカウント数
		if (inMap == null || inMap.get("kk0361_hosml_account_cnt") == null || "".equals(inMap.get("kk0361_hosml_account_cnt")))
		{
			template.setNull(EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT, (String)inMap.get("kk0361_hosml_account_cnt"));
		}

		// ホスティングメールボックス総容量
		if (inMap == null || inMap.get("kk0361_hosml_box_capa") == null || "".equals(inMap.get("kk0361_hosml_box_capa")))
		{
			template.setNull(EKK0361D010CBSMsg.HOSML_BOX_CAPA);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.HOSML_BOX_CAPA, (String)inMap.get("kk0361_hosml_box_capa"));
		}

		// ダイヤルパッドPIN
		if (inMap == null || inMap.get("kk0361_dpad_pin") == null || "".equals(inMap.get("kk0361_dpad_pin")))
		{
			template.setNull(EKK0361D010CBSMsg.DPAD_PIN);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.DPAD_PIN, (String)inMap.get("kk0361_dpad_pin"));
		}

		// ダイヤルパッドID公開要否
		if (inMap == null || inMap.get("kk0361_dpad_id_kokai_yh") == null || "".equals(inMap.get("kk0361_dpad_id_kokai_yh")))
		{
			template.setNull(EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH, (String)inMap.get("kk0361_dpad_id_kokai_yh"));
		}

		// ダイヤルアップ接続用認証ID
		if (inMap == null || inMap.get("kk0361_dupcon_ninsho_id") == null || "".equals(inMap.get("kk0361_dupcon_ninsho_id")))
		{
			template.setNull(EKK0361D010CBSMsg.DUPCON_NINSHO_ID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.DUPCON_NINSHO_ID, (String)inMap.get("kk0361_dupcon_ninsho_id"));
		}

		// DNS設定コード
		if (inMap == null || inMap.get("kk0361_dns_sette_cd") == null || "".equals(inMap.get("kk0361_dns_sette_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.DNS_SETTE_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.DNS_SETTE_CD, (String)inMap.get("kk0361_dns_sette_cd"));
		}

		// スポット有害サイトブロック対象SYSID
		if (inMap == null || inMap.get("kk0361_spot_ygsiteblck_trgt_sysid") == null || "".equals(inMap.get("kk0361_spot_ygsiteblck_trgt_sysid")))
		{
			template.setNull(EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID, (String)inMap.get("kk0361_spot_ygsiteblck_trgt_sysid"));
		}

		// サービス個別設定連絡先メールアドレス
		if (inMap == null || inMap.get("kk0361_svc_kbt_set_rrks_mlad") == null || "".equals(inMap.get("kk0361_svc_kbt_set_rrks_mlad")))
		{
			template.setNull(EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD, (String)inMap.get("kk0361_svc_kbt_set_rrks_mlad"));
		}

		// 通話明細公開要否
		if (inMap == null || inMap.get("kk0361_tuwa_dtl_kokai_yh") == null || "".equals(inMap.get("kk0361_tuwa_dtl_kokai_yh")))
		{
			template.setNull(EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH, (String)inMap.get("kk0361_tuwa_dtl_kokai_yh"));
		}

		// IPv6アドレス(インターフェイスID)
		if (inMap == null || inMap.get("kk0361_ipv6_ad_ifid") == null || "".equals(inMap.get("kk0361_ipv6_ad_ifid")))
		{
			template.setNull(EKK0361D010CBSMsg.IPV6_AD_IFID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.IPV6_AD_IFID, (String)inMap.get("kk0361_ipv6_ad_ifid"));
		}

		// 請求契約番号
		if (inMap == null || inMap.get("kk0361_seiky_kei_no") == null || "".equals(inMap.get("kk0361_seiky_kei_no")))
		{
			template.setNull(EKK0361D010CBSMsg.SEIKY_KEI_NO);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SEIKY_KEI_NO, (String)inMap.get("kk0361_seiky_kei_no"));
		}

		// 料金項目コード
		if (inMap == null || inMap.get("kk0361_prc_kmk_cd") == null || "".equals(inMap.get("kk0361_prc_kmk_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.PRC_KMK_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.PRC_KMK_CD, (String)inMap.get("kk0361_prc_kmk_cd"));
		}

		// 初期POPIDパスワード
		if (inMap == null || inMap.get("kk0361_shk_pop_id_pwd") == null || "".equals(inMap.get("kk0361_shk_pop_id_pwd")))
		{
			template.setNull(EKK0361D010CBSMsg.SHK_POP_ID_PWD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SHK_POP_ID_PWD, (String)inMap.get("kk0361_shk_pop_id_pwd"));
		}
		
		// POPID
		if (inMap == null || inMap.get("kk0361_pop_id") == null || "".equals(inMap.get("kk0361_pop_id")))
		{
			template.setNull(EKK0361D010CBSMsg.POP_ID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.POP_ID, (String)inMap.get("kk0361_pop_id"));
		}
		
		// メールアドレス
		if (inMap == null || inMap.get("kk0361_mlad") == null || "".equals(inMap.get("kk0361_mlad")))
		{
			template.setNull(EKK0361D010CBSMsg.MLAD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.MLAD, (String)inMap.get("kk0361_mlad"));
		}
		
		// 初期WebIDパスワード
		if (inMap == null || inMap.get("kk0361_shk_web_id_pwd") == null || "".equals(inMap.get("kk0361_shk_web_id_pwd")))
		{
			template.setNull(EKK0361D010CBSMsg.SHK_WEB_ID_PWD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.SHK_WEB_ID_PWD, (String)inMap.get("kk0361_shk_web_id_pwd"));
		}
		
		// WebID
		if (inMap == null || inMap.get("kk0361_web_id") == null || "".equals(inMap.get("kk0361_web_id")))
		{
			template.setNull(EKK0361D010CBSMsg.WEB_ID);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.WEB_ID, (String)inMap.get("kk0361_web_id"));
		}

		// 更新年月日時分秒(更新前)
		if (inMap == null || inMap.get("kk0361_upd_dtm_bf") == null || "".equals(inMap.get("kk0361_upd_dtm_bf")))
		{
			template.setNull(EKK0361D010CBSMsg.UPD_DTM_BF);
		}
		else
		{
			String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, svcKeiNo, (String)inMap.get("kk0361_upd_dtm_bf"));
			template.set(EKK0361D010CBSMsg.UPD_DTM_BF, lastDtm);
		}

		// フェムトセル事業者コード
		if (inMap == null || inMap.get("kk0361_fmtcel_jgs_cd") == null || "".equals(inMap.get("kk0361_fmtcel_jgs_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.FMTCEL_JGS_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.FMTCEL_JGS_CD, (String)inMap.get("kk0361_fmtcel_jgs_cd"));
		}

		// フェムトセル事業者使用コード
		if (inMap == null || inMap.get("kk0361_fmtcel_jgs_use_cd") == null || "".equals(inMap.get("kk0361_fmtcel_jgs_use_cd")))
		{
			template.setNull(EKK0361D010CBSMsg.FMTCEL_JGS_USE_CD);
		}
		else
		{
			template.set(EKK0361D010CBSMsg.FMTCEL_JGS_USE_CD, (String)inMap.get("kk0361_fmtcel_jgs_use_cd"));
		}
		
		return template;
	}

	/**
	 * オプションサービス契約<ISP>登録上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0361D010ISP(IRequestParameterReadWrite param, HashMap inMap, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361D010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0361D010CBSMsg.TEMPLATEID, "EKK0361D010");

		// 機能コード（デフォルト：１）
		template.set(EKK0361D010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		String prefix = "kk0361_";

		// オプションサービス契約＜ISP＞登録.オプションサービスコード → オプションサービスコード
		setTemplate(template, EKK0361D010CBSMsg.OP_SVC_CD, inMap, prefix, EKK0361D010CBSMsg.OP_SVC_CD);
		// オプションサービス契約＜ISP＞登録.料金コースコード → 料金コースコード
		setTemplate(template, EKK0361D010CBSMsg.PCRS_CD, inMap, prefix, EKK0361D010CBSMsg.PCRS_CD);
		// オプションサービス契約＜ISP＞登録.料金プランコード → 料金プランコード
		setTemplate(template, EKK0361D010CBSMsg.PPLAN_CD, inMap, prefix, EKK0361D010CBSMsg.PPLAN_CD);
		// オプションサービス契約＜ISP＞登録.親契約識別コード → 親契約識別コード
		setTemplate(template, EKK0361D010CBSMsg.OYA_KEI_SKBT_CD, inMap, prefix, EKK0361D010CBSMsg.OYA_KEI_SKBT_CD);
		// オプションサービス契約＜ISP＞登録.サービス契約番号 → サービス契約番号
		setTemplate(template, EKK0361D010CBSMsg.SVC_KEI_NO, inMap, prefix, EKK0361D010CBSMsg.SVC_KEI_NO);
		// オプションサービス契約＜ISP＞登録.サービス契約内訳番号 → サービス契約内訳番号
		setTemplate(template, EKK0361D010CBSMsg.SVC_KEI_UCWK_NO, inMap, prefix, EKK0361D010CBSMsg.SVC_KEI_UCWK_NO);
		// オプションサービス契約＜ISP＞登録.SYSID → SYSID
		setTemplate(template, EKK0361D010CBSMsg.SYSID, inMap, prefix, EKK0361D010CBSMsg.SYSID);
		// オプションサービス契約＜ISP＞登録.申込明細番号 → 申込明細番号
		setTemplate(template, EKK0361D010CBSMsg.MSKM_DTL_NO, inMap, prefix, EKK0361D010CBSMsg.MSKM_DTL_NO);
		// オプションサービス契約＜ISP＞登録.試用加入年月日 → 試用加入年月日
		setTemplate(template, EKK0361D010CBSMsg.FTRIAL_KANYU_YMD, inMap, prefix, EKK0361D010CBSMsg.FTRIAL_KANYU_YMD);
		// オプションサービス契約＜ISP＞登録.試用期間終了年月日 → 試用期間終了年月日
		setTemplate(template, EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD, inMap, prefix, EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD);
		// オプションサービス契約＜ISP＞登録.本加入年月日 → 本加入年月日
		setTemplate(template, EKK0361D010CBSMsg.HONKANYU_YMD, inMap, prefix, EKK0361D010CBSMsg.HONKANYU_YMD);
		// オプションサービス契約＜ISP＞登録.本加入移行期限年月日 → 本加入移行期限年月日
		setTemplate(template, EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, inMap, prefix, EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD);
		// オプションサービス契約＜ISP＞登録.サービス利用開始希望年月日 → サービス利用開始希望年月日
		setTemplate(template, EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD, inMap, prefix, EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD);
		// オプションサービス契約＜ISP＞登録.予約適用開始希望年月日 → 予約適用開始希望年月日
		setTemplate(template, EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD, inMap, prefix, EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD);
		// オプションサービス契約＜ISP＞登録.違約金発生コード → 違約金発生コード
		setTemplate(template, EKK0361D010CBSMsg.PNLTY_HASSEI_CD, inMap, prefix, EKK0361D010CBSMsg.PNLTY_HASSEI_CD);
		// オプションサービス契約＜ISP＞登録.異動区分 → 異動区分
		setTemplate(template, EKK0361D010CBSMsg.IDO_DIV, inMap, prefix, EKK0361D010CBSMsg.IDO_DIV);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント1 → 希望メールアカウント1
		setTemplate(template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1, inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント2 → 希望メールアカウント2
		setTemplate(template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2, inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント3 → 希望メールアカウント3
		setTemplate(template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3, inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3);
		// オプションサービス契約＜ISP＞登録.マルチセッション用セッション数 → マルチセッション用セッション数
		setTemplate(template, EKK0361D010CBSMsg.MLTISE_SESSION_CNT, inMap, prefix, EKK0361D010CBSMsg.MLTISE_SESSION_CNT);
		// オプションサービス契約＜ISP＞登録.マルチセッション用初期認証IDパスワード → マルチセッション用初期認証IDパスワード
		setTemplate(template, EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD, inMap, prefix, EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD);
		// オプションサービス契約＜ISP＞登録.マルチセッション用認証ID → マルチセッション用認証ID
		setTemplate(template, EKK0361D010CBSMsg.MLTISE_NINSHO_ID, inMap, prefix, EKK0361D010CBSMsg.MLTISE_NINSHO_ID);
		// オプションサービス契約＜ISP＞登録.マルチセッション用認証IDパスワード → マルチセッション用認証IDパスワード
		setTemplate(template, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD, inMap, prefix, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD);
		// オプションサービス契約＜ISP＞登録.固定IPアドレス → 固定IPアドレス
		setTemplate(template, EKK0361D010CBSMsg.KOTEI_IP_AD, inMap, prefix, EKK0361D010CBSMsg.KOTEI_IP_AD);
		// オプションサービス契約＜ISP＞登録.ネットマスク → ネットマスク
		setTemplate(template, EKK0361D010CBSMsg.NETMASK, inMap, prefix, EKK0361D010CBSMsg.NETMASK);
		// オプションサービス契約＜ISP＞登録.容量 → 容量
		setTemplate(template, EKK0361D010CBSMsg.CAPA, inMap, prefix, EKK0361D010CBSMsg.CAPA);
		// オプションサービス契約＜ISP＞登録.URL(ドメイン) → URL(ドメイン)
		setTemplate(template, EKK0361D010CBSMsg.URL_DOMAIN, inMap, prefix, EKK0361D010CBSMsg.URL_DOMAIN);
		// オプションサービス契約＜ISP＞登録.URL(アカウント) → URL(アカウント)
		setTemplate(template, EKK0361D010CBSMsg.URL_ACCOUNT, inMap, prefix, EKK0361D010CBSMsg.URL_ACCOUNT);
		// オプションサービス契約＜ISP＞登録.メーリングリスト名 → メーリングリスト名
		setTemplate(template, EKK0361D010CBSMsg.MLLIST_NM, inMap, prefix, EKK0361D010CBSMsg.MLLIST_NM);
		// オプションサービス契約＜ISP＞登録.メーリングリスト呼称 → メーリングリスト呼称
		setTemplate(template, EKK0361D010CBSMsg.MLLIST_KOSHO, inMap, prefix, EKK0361D010CBSMsg.MLLIST_KOSHO);
		// オプションサービス契約＜ISP＞登録.メーリングリスト公開要否 → メーリングリスト公開要否
		setTemplate(template, EKK0361D010CBSMsg.MLLIST_KOKAI_YH, inMap, prefix, EKK0361D010CBSMsg.MLLIST_KOKAI_YH);
		// オプションサービス契約＜ISP＞登録.メーリングリスト最大ユーザー数 → メーリングリスト最大ユーザー数
		setTemplate(template, EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT, inMap, prefix, EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT);
		// オプションサービス契約＜ISP＞登録.メーリングリスト管理者メールアドレス → メーリングリスト管理者メールアドレス
		setTemplate(template, EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD, inMap, prefix, EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD);
		// オプションサービス契約＜ISP＞登録.独自ドメイン名 → 独自ドメイン名
		setTemplate(template, EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM, inMap, prefix, EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM);
		// オプションサービス契約＜ISP＞登録.ホスティングメールアカウント数 → ホスティングメールアカウント数
		setTemplate(template, EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT, inMap, prefix, EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT);
		// オプションサービス契約＜ISP＞登録.ホスティングメールボックス総容量 → ホスティングメールボックス総容量
		setTemplate(template, EKK0361D010CBSMsg.HOSML_BOX_CAPA, inMap, prefix, EKK0361D010CBSMsg.HOSML_BOX_CAPA);
		// オプションサービス契約＜ISP＞登録.ダイヤルパッドPIN → ダイヤルパッドPIN
		setTemplate(template, EKK0361D010CBSMsg.DPAD_PIN, inMap, prefix, EKK0361D010CBSMsg.DPAD_PIN);
		// オプションサービス契約＜ISP＞登録.ダイヤルパッドID公開要否 → ダイヤルパッドID公開要否
		setTemplate(template, EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH, inMap, prefix, EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH);
		// オプションサービス契約＜ISP＞登録.ダイヤルアップ接続用認証ID → ダイヤルアップ接続用認証ID
		setTemplate(template, EKK0361D010CBSMsg.DUPCON_NINSHO_ID, inMap, prefix, EKK0361D010CBSMsg.DUPCON_NINSHO_ID);
		// オプションサービス契約＜ISP＞登録.DNS設定コード → DNS設定コード
		setTemplate(template, EKK0361D010CBSMsg.DNS_SETTE_CD, inMap, prefix, EKK0361D010CBSMsg.DNS_SETTE_CD);
		// オプションサービス契約＜ISP＞登録.スポット有害サイトブロック対象SYSID → スポット有害サイトブロック対象SYSID
		setTemplate(template, EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID, inMap, prefix, EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID);
		// オプションサービス契約＜ISP＞登録.サービス個別設定連絡先メールアドレス → サービス個別設定連絡先メールアドレス
		setTemplate(template, EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD, inMap, prefix, EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD);
		// オプションサービス契約＜ISP＞登録.通話明細公開要否 → 通話明細公開要否
		setTemplate(template, EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH, inMap, prefix, EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH);
		// オプションサービス契約＜ISP＞登録.請求契約番号 → 請求契約番号
		setTemplate(template, EKK0361D010CBSMsg.SEIKY_KEI_NO, inMap, prefix, EKK0361D010CBSMsg.SEIKY_KEI_NO);
		// オプションサービス契約＜ISP＞登録.料金項目コード → 料金項目コード
		setTemplate(template, EKK0361D010CBSMsg.PRC_KMK_CD, inMap, prefix, EKK0361D010CBSMsg.PRC_KMK_CD);
		// オプションサービス契約＜ISP＞登録.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, this.svcKeiNo, (String)inMap.get(prefix + EKK0361D010CBSMsg.UPD_DTM_BF));
		template.set(EKK0361D010CBSMsg.UPD_DTM_BF, lastDtm);

// ANK-4427-00-00 ADD START
		// 項目転送
		String[] itemList = new String[] {
				EKK0361D010CBSMsg.TYPEN_TELNO,				// typeN電話番号
				EKK0361D010CBSMsg.TYPEN_BMP_SBT,			// typeN番ポ種別
				EKK0361D010CBSMsg.TYPEN_KEISHA_NM,			// typeN契約者名
				EKK0361D010CBSMsg.TYPEN_AD_CD,				// typeN住所コード
				EKK0361D010CBSMsg.TYPEN_PCD,				// typeN郵便番号
				EKK0361D010CBSMsg.TYPEN_STATE_NM,			// typeN都道府県名 
				EKK0361D010CBSMsg.TYPEN_CITY_NM,			// typeN市区町村名
				EKK0361D010CBSMsg.TYPEN_OAZTSU_NM,			// typeN大字通称名
				EKK0361D010CBSMsg.TYPEN_AZCHO_NM,			// typeN字丁目名
				EKK0361D010CBSMsg.TYPEN_BNCHIGO,			// typeN番地号
				EKK0361D010CBSMsg.TYPEN_ADRTTM,				// typeN住所補記・建物名
				EKK0361D010CBSMsg.TYPEN_ADRRM,				// typeN住所補記・部屋番号
				EKK0361D010CBSMsg.TYPEN_AD_MAN_INPUT_FLG,	// typeN住所手動入力フラグ
				EKK0361D010CBSMsg.TYPEN_TEL_KNKN_TRAT_CD,	// typeN電話加入権取扱コード 
				EKK0361D010CBSMsg.TYPEN_TELNO_SBT_CD,		// typeN電話番号種別コード 
// ANK-4640-00-00 ADD START
				EKK0361D010CBSMsg.TYPEN_TSJGS_CD,			// typeN通信事業者コード
// ANK-4640-00-00 ADD END
		};

		for (String item : itemList)
		{
			// マップのデータをサービスＩＦのパラメータへ設定
			setTemplate(template, item, inMap, prefix, item);
		}
		
// ANK-4427-00-00 ADD END
		return template;
	}

	/**
	 * オプションサービス契約＜電話＞登録の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param idx
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0371D010(IRequestParameterReadWrite param, String fixedText, int idx) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0371D010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0371D010CBSMsg.TEMPLATEID, "EKK0371D010");

		// 機能コード（デフォルト：１）
		template.set(EKK0371D010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));

		// 機能コード
		template.set(EKK0371D010CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));

		ArrayList<HashMap> addOpList = (ArrayList<HashMap>)getWorkMapValue(param, "add_op_list");
		HashMap opMap = null;
		if (addOpList == null)
		{
			opMap = new HashMap();
		}
		else
		{
			opMap = addOpList.get(idx);
		}

		// オプションサービスコード
		String pcrsCd = null;
		String pplanCd = null;
		if (opMap == null || opMap.get("kk0811_op_svc_cd") == null || "".equals(opMap.get("kk0811_op_svc_cd")))
		{
			template.setNull(EKK0371D010CBSMsg.OP_SVC_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.OP_SVC_CD, (String)opMap.get("kk0811_op_svc_cd"));

			pcrsCd = getPcrsCd((String)opMap.get("kk0811_op_svc_cd"));
			pplanCd = getPplanCd(pcrsCd);
		}

		// 料金コースコード
		if (pcrsCd == null || "".equals(pcrsCd))
		{
			template.setNull(EKK0371D010CBSMsg.PCRS_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.PCRS_CD, pcrsCd);
		}

		// 料金プランコード
		if (pplanCd == null || "".equals(pplanCd))
		{
			template.setNull(EKK0371D010CBSMsg.PPLAN_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.PPLAN_CD, pplanCd);
		}

		// オプションサービス契約＜電話＞登録マップ.親契約識別コード → 親契約識別コード
		if (inMap == null || inMap.get("kk0371_oya_kei_skbt_cd") == null || "".equals(inMap.get("kk0371_oya_kei_skbt_cd")))
		{
			template.setNull(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD, (String)inMap.get("kk0371_oya_kei_skbt_cd"));
		}

		// オプションサービス契約＜電話＞登録マップ.サービス契約番号 → サービス契約番号
		if (inMap == null || inMap.get("kk0371_svc_kei_no") == null || "".equals(inMap.get("kk0371_svc_kei_no")))
		{
			template.setNull(EKK0371D010CBSMsg.SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.SVC_KEI_NO, (String)inMap.get("kk0371_svc_kei_no"));
		}

		// オプションサービス契約＜電話＞登録マップ.サービス契約内訳番号 → サービス契約内訳番号
		if (inMap == null || inMap.get("kk0371_svc_kei_ucwk_no") == null || "".equals(inMap.get("kk0371_svc_kei_ucwk_no")))
		{
			template.setNull(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO, (String)inMap.get("kk0371_svc_kei_ucwk_no"));
		}

		// オプションサービス契約＜電話＞登録マップ.ＳＹＳＩＤ → SYSID
		if (inMap == null || inMap.get("kk0371_sysid") == null || "".equals(inMap.get("kk0371_sysid")))
		{
			template.setNull(EKK0371D010CBSMsg.SYSID);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.SYSID, (String)inMap.get("kk0371_sysid"));
		}

		// オプションサービス契約＜電話＞登録マップ.申込明細番号 → 申込明細番号
		if (inMap == null || inMap.get("kk0371_mskm_dtl_no") == null || "".equals(inMap.get("kk0371_mskm_dtl_no")))
		{
			template.setNull(EKK0371D010CBSMsg.MSKM_DTL_NO);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.MSKM_DTL_NO, (String)inMap.get("kk0371_mskm_dtl_no"));
		}

		// オプションサービス契約＜電話＞登録マップ.試用加入年月日 → 試用加入年月日
		if (inMap == null || inMap.get("kk0371_ftrial_kanyu_ymd") == null || "".equals(inMap.get("kk0371_ftrial_kanyu_ymd")))
		{
			template.setNull(EKK0371D010CBSMsg.FTRIAL_KANYU_YMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.FTRIAL_KANYU_YMD, (String)inMap.get("kk0371_ftrial_kanyu_ymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.試用期間終了年月日 → 試用期間終了年月日
		if (inMap == null || inMap.get("kk0371_ftrial_prd_endymd") == null || "".equals(inMap.get("kk0371_ftrial_prd_endymd")))
		{
			template.setNull(EKK0371D010CBSMsg.FTRIAL_PRD_ENDYMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.FTRIAL_PRD_ENDYMD, (String)inMap.get("kk0371_ftrial_prd_endymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.本加入年月日 → 本加入年月日
		if (inMap == null || inMap.get("kk0371_honkanyu_ymd") == null || "".equals(inMap.get("kk0371_honkanyu_ymd")))
		{
			template.setNull(EKK0371D010CBSMsg.HONKANYU_YMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.HONKANYU_YMD, (String)inMap.get("kk0371_honkanyu_ymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.本加入移行期限年月日 → 本加入移行期限年月日
		if (inMap == null || inMap.get("kk0371_honkanyu_iko_kigen_ymd") == null || "".equals(inMap.get("kk0371_honkanyu_iko_kigen_ymd")))
		{
			template.setNull(EKK0371D010CBSMsg.HONKANYU_IKO_KIGEN_YMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, (String)inMap.get("kk0371_honkanyu_iko_kigen_ymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.サービス利用開始希望年月日 → サービス利用開始希望年月日
		if (inMap == null || inMap.get("kk0371_svc_use_sta_kibo_ymd") == null || "".equals(inMap.get("kk0371_svc_use_sta_kibo_ymd")))
		{
			template.setNull(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD, (String)inMap.get("kk0371_svc_use_sta_kibo_ymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.予約適用開始希望年月日 → 予約適用開始希望年月日
		if (inMap == null || inMap.get("kk0371_rsv_tsta_kibo_ymd") == null || "".equals(inMap.get("kk0371_rsv_tsta_kibo_ymd")))
		{
			template.setNull(EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD, (String)inMap.get("kk0371_rsv_tsta_kibo_ymd"));
		}

		// オプションサービス契約＜電話＞登録マップ.違約金発生コード → 違約金発生コード
		if (inMap == null || inMap.get("kk0371_pnlty_hassei_cd") == null || "".equals(inMap.get("kk0371_pnlty_hassei_cd")))
		{
			template.setNull(EKK0371D010CBSMsg.PNLTY_HASSEI_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.PNLTY_HASSEI_CD, (String)inMap.get("kk0371_pnlty_hassei_cd"));
		}

		// オプションサービス契約＜電話＞登録マップ.異動区分 → 異動区分
		if (inMap == null || inMap.get("kk0371_ido_div") == null || "".equals(inMap.get("kk0371_ido_div")))
		{
			template.setNull(EKK0371D010CBSMsg.IDO_DIV);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.IDO_DIV, (String)inMap.get("kk0371_ido_div"));
		}

		// オプションサービス契約＜電話＞登録マップ.０５０オプション電話番号 → 050オプション電話番号
		if (inMap == null || inMap.get("kk0371_op_050_telno") == null || "".equals(inMap.get("kk0371_op_050_telno")))
		{
			template.setNull(EKK0371D010CBSMsg.N_050_OP_TELNO);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.N_050_OP_TELNO, (String)inMap.get("kk0371_op_050_telno"));
		}

		// オプションサービス契約＜電話＞登録マップ.通話料指定額到達通知指定金額 → 通話料指定額到達通知指定金額
		if (inMap == null || inMap.get("kk0371_twryo_stiam_ttu_tchi_stiam") == null || "".equals(inMap.get("kk0371_twryo_stiam_ttu_tchi_stiam")))
		{
			template.setNull(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM, (String)inMap.get("kk0371_twryo_stiam_ttu_tchi_stiam"));
		}

		// オプションサービス契約＜電話＞登録マップ.請求契約番号 → 請求契約番号
		if (inMap == null || inMap.get("kk0371_seiky_kei_no") == null || "".equals(inMap.get("kk0371_seiky_kei_no")))
		{
			template.setNull(EKK0371D010CBSMsg.SEIKY_KEI_NO);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.SEIKY_KEI_NO, (String)inMap.get("kk0371_seiky_kei_no"));
		}

		// オプションサービス契約＜電話＞登録マップ.料金項目コード → 料金項目コード
		if (inMap == null || inMap.get("kk0371_prc_kmk_cd") == null || "".equals(inMap.get("kk0371_prc_kmk_cd")))
		{
			template.setNull(EKK0371D010CBSMsg.PRC_KMK_CD);
		}
		else
		{
			template.set(EKK0371D010CBSMsg.PRC_KMK_CD, (String)inMap.get("kk0371_prc_kmk_cd"));
		}
		
		// オプションサービス契約＜電話＞登録マップ.親契約識別コード → 親契約識別コード
		if (inMap == null || inMap.get("kk0371_oya_kei_skbt_cd") == null || "".equals(inMap.get("kk0371_oya_kei_skbt_cd"))) 
		{
			template.setNull(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD);
		}
		else 
		{
			template.set(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD, (String)inMap.get("kk0371_oya_kei_skbt_cd"));
		}

		// オプションサービス契約＜電話＞登録マップ.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		if (inMap == null || inMap.get("kk0371_upd_dtm_bf") == null || "".equals(inMap.get("kk0371_upd_dtm_bf")))
		{
			template.setNull(EKK0371D010CBSMsg.UPD_DTM_BF);
		}
		else
		{
			String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, svcKeiNo, (String)inMap.get("kk0371_upd_dtm_bf"));
			template.set(EKK0371D010CBSMsg.UPD_DTM_BF, lastDtm);
		}

		return template;
	}
	
	/**
	 * サブオプションサービス契約キャンセル上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0401C150(IRequestParameterReadWrite param, HashMap inMap, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0401C150CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0401C150CBSMsg.TEMPLATEID, "EKK0401C150");

		// 機能コード（デフォルト：１）
		template.set(EKK0401C150CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		String prefix = "kk0401_";

		// サブオプションサービス契約キャンセル.オプションサービス契約番号 → オプションサービス契約番号
		setTemplate(template, EKK0401C150CBSMsg.OP_SVC_KEI_NO, inMap, prefix, EKK0401C150CBSMsg.OP_SVC_KEI_NO);
		// サブオプションサービス契約キャンセル.サブオプションサービス契約番号 → サブオプションサービス契約番号
		setTemplate(template, EKK0401C150CBSMsg.SBOP_SVC_KEI_NO, inMap, prefix, EKK0401C150CBSMsg.SBOP_SVC_KEI_NO);
		// サブオプションサービス契約キャンセル.申込明細番号 → 申込明細番号
		setTemplate(template, EKK0401C150CBSMsg.MSKM_DTL_NO, inMap, prefix, EKK0401C150CBSMsg.MSKM_DTL_NO);
		// サブオプションサービス契約キャンセル.サービスキャンセル理由コード → サービスキャンセル理由コード
		setTemplate(template, EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD, inMap, prefix, EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD);
		// サブオプションサービス契約キャンセル.異動区分 → 異動区分
		setTemplate(template, EKK0401C150CBSMsg.IDO_DIV, inMap, prefix, EKK0401C150CBSMsg.IDO_DIV);
		// サブオプションサービス契約キャンセル.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, this.svcKeiNo, (String)inMap.get(prefix + EKK0401C150CBSMsg.UPD_DTM_BF));
		template.set(EKK0401C150CBSMsg.UPD_DTM_BF, lastDtm);

		return template;		
	}

	/**
	 * オプションサービス契約キャンセル上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0351C220(IRequestParameterReadWrite param, HashMap inMap, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0351C220CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0351C220CBSMsg.TEMPLATEID, "EKK0351C220");

		// 機能コード（デフォルト：１）
		template.set(EKK0351C220CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		String prefix = "kk0351_";

		// オプションサービス契約キャンセル.オプションサービス契約番号 → オプションサービス契約番号
		setTemplate(template, EKK0351C220CBSMsg.OP_SVC_KEI_NO, inMap, prefix, EKK0351C220CBSMsg.OP_SVC_KEI_NO);
		// オプションサービス契約キャンセル.申込明細番号 → 申込明細番号
		setTemplate(template, EKK0351C220CBSMsg.MSKM_DTL_NO, inMap, prefix, EKK0351C220CBSMsg.MSKM_DTL_NO);
		// オプションサービス契約キャンセル.サービスキャンセル理由コード → サービスキャンセル理由コード
		setTemplate(template, EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD, inMap, prefix, EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD);
		// オプションサービス契約キャンセル.異動区分 → 異動区分
		setTemplate(template, EKK0351C220CBSMsg.IDO_DIV, inMap, prefix, EKK0351C220CBSMsg.IDO_DIV);
		// オプションサービス契約キャンセル.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, this.svcKeiNo, (String)inMap.get(prefix + EKK0351C220CBSMsg.UPD_DTM_BF));
		template.set(EKK0351C220CBSMsg.UPD_DTM_BF, lastDtm);

		return template;		
	}

	/**
	 * 料金コース_オプションサービス一覧照会（料金コースコード）下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0811B001(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		/* 業務データ設定 */
		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}

		ArrayList dataList = null;

		templateArray = template.getCAANMsgList(EKK0811B001CBSMsg.EKK0811B001CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EKK0811B001CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}

		if (templateArray != null)
		{
			int x = 0;
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

				String autoFuyoUm = childTemplate.getString(EKK0811B001CBSMsg1List.AUTO_FUYO_UM);
				if (JKKStrConst.CD_DIV_UM_ARI.equals(autoFuyoUm))
				{
					if (x >= dataList.size())
					{
						dataList.add(new HashMap());
					}
					HashMap childMap = (HashMap)dataList.get(x++);

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.料金コースコード
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.料金コースコード
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.PCRS_CD))
					{
						childMap.put("kk0811_pcrs_cd", "");
					}
					else
					{
						childMap.put("kk0811_pcrs_cd", childTemplate.getString(EKK0811B001CBSMsg1List.PCRS_CD));
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.オプションサービスコード
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.オプションサービスコード
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.OP_SVC_CD))
					{
						childMap.put("kk0811_op_svc_cd", "");
					}
					else
					{
						String opSvcCd = childTemplate.getString(EKK0811B001CBSMsg1List.OP_SVC_CD);
						childMap.put("kk0811_op_svc_cd", opSvcCd);
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.オプションサービス名
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.オプションサービス名
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.OP_SVC_NM))
					{
						childMap.put("kk0811_op_svc_nm", "");
					}
					else
					{
						childMap.put("kk0811_op_svc_nm", childTemplate.getString(EKK0811B001CBSMsg1List.OP_SVC_NM));
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.初期オプションサービス数
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.初期オプションサービス数
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.SHK_OP_SVC_CNT))
					{
						childMap.put("kk0811_shk_op_svc_cnt", "");
					}
					else
					{
						childMap.put("kk0811_shk_op_svc_cnt", childTemplate.getString(EKK0811B001CBSMsg1List.SHK_OP_SVC_CNT));
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.最大オプションサービス数
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.最大オプションサービス数
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.MAX_OP_SVC_CNT))
					{
						childMap.put("kk0811_max_op_svc_cnt", "");
					}
					else
					{
						childMap.put("kk0811_max_op_svc_cnt", childTemplate.getString(EKK0811B001CBSMsg1List.MAX_OP_SVC_CNT));
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.無料オプションサービス数
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.無料オプションサービス数
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.MRYO_OP_SVC_CNT))
					{
						childMap.put("kk0811_mryo_op_svc_cnt", "");
					}
					else
					{
						childMap.put("kk0811_mryo_op_svc_cnt", childTemplate.getString(EKK0811B001CBSMsg1List.MRYO_OP_SVC_CNT));
					}

					// 料金コース_オプションサービス一覧照会.料金コース_オプションサービス一覧照会（料金コースコード）明細.自動付与有無
					//   ← 料金コース_オプションサービス一覧照会（料金コースコード）明細.自動付与有無
					if (childTemplate.isNull(EKK0811B001CBSMsg1List.AUTO_FUYO_UM))
					{
						childMap.put("kk0811_auto_fuyo_um", "");
					}
					else
					{
						childMap.put("kk0811_auto_fuyo_um", childTemplate.getString(EKK0811B001CBSMsg1List.AUTO_FUYO_UM));
					}
				}
			}
		}
		setWorkMapValue(param, "add_op_list", dataList);

		// エラー情報の設定
		editErrInfoEKK0811B001(param, template, (Integer)returnCode, 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));

		return param;
	}

	/**
	 * 料金コース_サブオプションサービス一覧照会下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK1881B001(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		/* 業務データ設定 */
		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}

		ArrayList dataList = null;

		templateArray = template.getCAANMsgList(EKK1881B001CBSMsg.EKK1881B001CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EKK1881B001CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}

		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.料金コースコード
				//   ← 料金コース_サブオプションサービス一覧照会明細.料金コースコード
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.PCRS_CD))
				{
					childMap.put("kk1881_pcrs_cd", "");
				}
				else
				{
					childMap.put("kk1881_pcrs_cd", childTemplate.getString(EKK1881B001CBSMsg1List.PCRS_CD));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.サブオプションサービスコード
				//   ← 料金コース_サブオプションサービス一覧照会明細.サブオプションサービスコード
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.SBOP_SVC_CD))
				{
					childMap.put("kk1881_sbop_svc_cd", "");
				}
				else
				{
					childMap.put("kk1881_sbop_svc_cd", childTemplate.getString(EKK1881B001CBSMsg1List.SBOP_SVC_CD));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.サービス提供物初期値
				//   ← 料金コース_サブオプションサービス一覧照会明細.サービス提供物初期値
				capa = null;
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.SVCTK_BUT_SHK_VALUE))
				{
					childMap.put("kk1881_svctk_but_shk_value", "");
				}
				else
				{
					String shkValue = childTemplate.getString(EKK1881B001CBSMsg1List.SVCTK_BUT_SHK_VALUE);
					childMap.put("kk1881_svctk_but_shk_value", shkValue);
					capa = shkValue;
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.サービス提供物最大値
				//   ← 料金コース_サブオプションサービス一覧照会明細.サービス提供物最大値
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.SVCTK_BUT_MAX_VALUE))
				{
					childMap.put("kk1881_svctk_but_max_value", "");
				}
				else
				{
					childMap.put("kk1881_svctk_but_max_value", childTemplate.getString(EKK1881B001CBSMsg1List.SVCTK_BUT_MAX_VALUE));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.サービス提供物増減値
				//   ← 料金コース_サブオプションサービス一覧照会明細.サービス提供物増減値
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.SVCTK_BUT_ZOUGEN_VALUE))
				{
					childMap.put("kk1881_svctk_but_zougen_value", "");
				}
				else
				{
					childMap.put("kk1881_svctk_but_zougen_value", childTemplate.getString(EKK1881B001CBSMsg1List.SVCTK_BUT_ZOUGEN_VALUE));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.サービス提供物無料値
				//   ← 料金コース_サブオプションサービス一覧照会明細.サービス提供物無料値
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.SVCTK_BUT_MRYO_VALUE))
				{
					childMap.put("kk1881_svctk_but_mryo_value", "");
				}
				else
				{
					childMap.put("kk1881_svctk_but_mryo_value", childTemplate.getString(EKK1881B001CBSMsg1List.SVCTK_BUT_MRYO_VALUE));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.料金コース_サブオプションサービス適用開始年月日
				//   ← 料金コース_サブオプションサービス一覧照会明細.料金コース_サブオプションサービス適用開始年月日
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.PCRS_SBOP_SVC_TSTAYMD))
				{
					childMap.put("kk1881_pcrs_sbop_svc_tstaymd", "");
				}
				else
				{
					childMap.put("kk1881_pcrs_sbop_svc_tstaymd", childTemplate.getString(EKK1881B001CBSMsg1List.PCRS_SBOP_SVC_TSTAYMD));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.料金コース_サブオプションサービス適用終了年月日
				//   ← 料金コース_サブオプションサービス一覧照会明細.料金コース_サブオプションサービス適用終了年月日
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.PCRS_SBOP_SVC_TENDYMD))
				{
					childMap.put("kk1881_pcrs_sbop_svc_tendymd", "");
				}
				else
				{
					childMap.put("kk1881_pcrs_sbop_svc_tendymd", childTemplate.getString(EKK1881B001CBSMsg1List.PCRS_SBOP_SVC_TENDYMD));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.登録年月日時分秒
				//   ← 料金コース_サブオプションサービス一覧照会明細.登録年月日時分秒
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.ADD_DTM))
				{
					childMap.put("kk1881_add_dtm", "");
				}
				else
				{
					childMap.put("kk1881_add_dtm", childTemplate.getString(EKK1881B001CBSMsg1List.ADD_DTM));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.登録オペレータアカウント
				//   ← 料金コース_サブオプションサービス一覧照会明細.登録オペレータアカウント
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.ADD_OPEACNT))
				{
					childMap.put("kk1881_add_opeacnt", "");
				}
				else
				{
					childMap.put("kk1881_add_opeacnt", childTemplate.getString(EKK1881B001CBSMsg1List.ADD_OPEACNT));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.更新年月日時分秒
				//   ← 料金コース_サブオプションサービス一覧照会明細.更新年月日時分秒
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.UPD_DTM))
				{
					childMap.put("kk1881_upd_dtm", "");
				}
				else
				{
					childMap.put("kk1881_upd_dtm", childTemplate.getString(EKK1881B001CBSMsg1List.UPD_DTM));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.更新オペレータアカウント
				//   ← 料金コース_サブオプションサービス一覧照会明細.更新オペレータアカウント
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.UPD_OPEACNT))
				{
					childMap.put("kk1881_upd_opeacnt", "");
				}
				else
				{
					childMap.put("kk1881_upd_opeacnt", childTemplate.getString(EKK1881B001CBSMsg1List.UPD_OPEACNT));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.削除年月日時分秒
				//   ← 料金コース_サブオプションサービス一覧照会明細.削除年月日時分秒
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.DEL_DTM))
				{
					childMap.put("kk1881_del_dtm", "");
				}
				else
				{
					childMap.put("kk1881_del_dtm", childTemplate.getString(EKK1881B001CBSMsg1List.DEL_DTM));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.削除オペレータアカウント
				//   ← 料金コース_サブオプションサービス一覧照会明細.削除オペレータアカウント
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.DEL_OPEACNT))
				{
					childMap.put("kk1881_del_opeacnt", "");
				}
				else
				{
					childMap.put("kk1881_del_opeacnt", childTemplate.getString(EKK1881B001CBSMsg1List.DEL_OPEACNT));
				}

				// 料金コース_サブオプションサービス一覧照会.料金コース_サブオプションサービス一覧照会明細.無効フラグ
				//   ← 料金コース_サブオプションサービス一覧照会明細.無効フラグ
				if (childTemplate.isNull(EKK1881B001CBSMsg1List.MK_FLG))
				{
					childMap.put("kk1881_mk_flg", "");
				}
				else
				{
					childMap.put("kk1881_mk_flg", childTemplate.getString(EKK1881B001CBSMsg1List.MK_FLG));
				}
			}
		}
		dataMap.put("EKK1881B001CBSMsg1List", dataList);

		// エラー情報の設定
		editErrInfoEKK1881B001(param, template, (Integer)returnCode, 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));

		return param;
	}

	/**
	 * オプションサービス契約<ISP>登録下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0361D010(Map<?, ?> msgList, 	IRequestParameterReadWrite param, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		/* 業務データ設定 */
		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}

		// オプションサービス契約番号
		if (template.isNull(EKK0361D010CBSMsg.OP_SVC_KEI_NO))
		{
			dataMap.put("kk0361_op_svc_kei_no", "");
		}
		else
		{
			dataMap.put("kk0361_op_svc_kei_no", template.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO));
		}

		// 世代登録年月日時分秒(オプションサービス契約)
		if (template.isNull(EKK0361D010CBSMsg.KK0351_GENE_ADD_DTM))
		{
			dataMap.put("kk0361_kk0351_gene_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_kk0351_gene_add_dtm", template.getString(EKK0361D010CBSMsg.KK0351_GENE_ADD_DTM));
		}

		// オプションサービス契約ステータス
		if (template.isNull(EKK0361D010CBSMsg.OP_SVC_KEI_STAT))
		{
			dataMap.put("kk0361_op_svc_kei_stat", "");
		}
		else
		{
			dataMap.put("kk0361_op_svc_kei_stat", template.getString(EKK0361D010CBSMsg.OP_SVC_KEI_STAT));
		}

		// 予約適用年月日
		if (template.isNull(EKK0361D010CBSMsg.RSV_APLY_YMD))
		{
			dataMap.put("kk0361_rsv_aply_ymd", "");
		}
		else
		{
			dataMap.put("kk0361_rsv_aply_ymd", template.getString(EKK0361D010CBSMsg.RSV_APLY_YMD));
		}

		// 予約適用コード
		if (template.isNull(EKK0361D010CBSMsg.RSV_APLY_CD))
		{
			dataMap.put("kk0361_rsv_aply_cd", "");
		}
		else
		{
			dataMap.put("kk0361_rsv_aply_cd", template.getString(EKK0361D010CBSMsg.RSV_APLY_CD));
		}

		// 登録年月日時分秒
		if (template.isNull(EKK0361D010CBSMsg.ADD_DTM))
		{
			dataMap.put("kk0361_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_add_dtm", template.getString(EKK0361D010CBSMsg.ADD_DTM));
		}

		// 登録オペレータアカウント
		if (template.isNull(EKK0361D010CBSMsg.ADD_OPEACNT))
		{
			dataMap.put("kk0361_add_opeacnt", "");
		}
		else
		{
			dataMap.put("kk0361_add_opeacnt", template.getString(EKK0361D010CBSMsg.ADD_OPEACNT));
		}

		// 更新年月日時分秒
		if (template.isNull(EKK0361D010CBSMsg.UPD_DTM))
		{
			dataMap.put("kk0361_upd_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_upd_dtm", template.getString(EKK0361D010CBSMsg.UPD_DTM));

			JKKBpCommon.setLastDtmBySvcKeiNo(param, svcKeiNo,
					template.getString(EKK0361D010CBSMsg.UPD_DTM));
		}

		// 更新オペレータアカウント
		if (template.isNull(EKK0361D010CBSMsg.UPD_OPEACNT))
		{
			dataMap.put("kk0361_upd_opeacnt", "");
		}
		else
		{
			dataMap.put("kk0361_upd_opeacnt", template.getString(EKK0361D010CBSMsg.UPD_OPEACNT));
		}

		// 無効フラグ
		if (template.isNull(EKK0361D010CBSMsg.MK_FLG))
		{
			dataMap.put("kk0361_mk_flg", "");
		}
		else
		{
			dataMap.put("kk0361_mk_flg", template.getString(EKK0361D010CBSMsg.MK_FLG));
		}

		// 世代登録年月日時分秒(オプションサービス契約<ISP>)
		if (template.isNull(EKK0361D010CBSMsg.KK0361_GENE_ADD_DTM))
		{
			dataMap.put("kk0361_kk0361_gene_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_kk0361_gene_add_dtm", template.getString(EKK0361D010CBSMsg.KK0361_GENE_ADD_DTM));
		}

		// メーリングリスト名（出力）
		if (template.isNull(EKK0361D010CBSMsg.MLLIST_NM_O))
		{
			dataMap.put("kk0361_mllist_nm_o", "");
		}
		else
		{
			dataMap.put("kk0361_mllist_nm_o", template.getString(EKK0361D010CBSMsg.MLLIST_NM_O));
		}

		// 課金先番号
		if (template.isNull(EKK0361D010CBSMsg.KAKINS_NO))
		{
			dataMap.put("kk0361_kakins_no", "");
		}
		else
		{
			dataMap.put("kk0361_kakins_no", template.getString(EKK0361D010CBSMsg.KAKINS_NO));
		}

		// 課金先適用開始年月日
		if (template.isNull(EKK0361D010CBSMsg.KAKINS_TSTAYMD))
		{
			dataMap.put("kk0361_kakins_tstaymd", "");
		}
		else
		{
			dataMap.put("kk0361_kakins_tstaymd", template.getString(EKK0361D010CBSMsg.KAKINS_TSTAYMD));
		}

		// 課金先適用終了年月日
		if (template.isNull(EKK0361D010CBSMsg.KAKINS_TENDYMD))
		{
			dataMap.put("kk0361_kakins_tendymd", "");
		}
		else
		{
			dataMap.put("kk0361_kakins_tendymd", template.getString(EKK0361D010CBSMsg.KAKINS_TENDYMD));
		}

		// サブオプションサービス契約番号
		if (template.isNull(EKK0361D010CBSMsg.SBOP_SVC_KEI_NO))
		{
			dataMap.put("kk0361_sbop_svc_kei_no", "");
		}
		else
		{
			dataMap.put("kk0361_sbop_svc_kei_no", template.getString(EKK0361D010CBSMsg.SBOP_SVC_KEI_NO));
		}

		// 世代登録年月日時分秒(サブオプションサービス契約)
		if (template.isNull(EKK0361D010CBSMsg.KK0401_GENE_ADD_DTM))
		{
			dataMap.put("kk0361_kk0401_gene_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_kk0401_gene_add_dtm", template.getString(EKK0361D010CBSMsg.KK0401_GENE_ADD_DTM));
		}

		// 表示用サービス提供開始年月日(サブオプションサービス契約)
		if (template.isNull(EKK0361D010CBSMsg.DSP_SVCTK_STAYMD))
		{
			dataMap.put("kk0361_dsp_svctk_staymd", "");
		}
		else
		{
			dataMap.put("kk0361_dsp_svctk_staymd", template.getString(EKK0361D010CBSMsg.DSP_SVCTK_STAYMD));
		}

		// 更新年月日時分秒（サブオプションサービス契約）
		if (template.isNull(EKK0361D010CBSMsg.KK0401_UPD_DTM))
		{
			dataMap.put("kk0361_kk0401_upd_dtm", "");
		}
		else
		{
			dataMap.put("kk0361_kk0401_upd_dtm", template.getString(EKK0361D010CBSMsg.KK0401_UPD_DTM));

			JKKBpCommon.setLastDtmBySvcKeiNo(param, svcKeiNo,
					template.getString(EKK0361D010CBSMsg.KK0401_UPD_DTM));
		}

		// フェムトセル用認証ID
		if (template.isNull(EKK0361D010CBSMsg.FMTCEL_NINSHO_ID))
		{
			dataMap.put("kk0361_fmtcel_ninsho_id", "");
		}
		else
		{
			dataMap.put("kk0361_fmtcel_ninsho_id", template.getString(EKK0361D010CBSMsg.FMTCEL_NINSHO_ID));
		}

		// フェムトセル用認証IDパスワード
		if (template.isNull(EKK0361D010CBSMsg.FMTCEL_NINSHO_ID_PWD))
		{
			dataMap.put("kk0361_fmtcel_ninsho_id_pwd", "");
		}
		else
		{
			dataMap.put("kk0361_fmtcel_ninsho_id_pwd", template.getString(EKK0361D010CBSMsg.FMTCEL_NINSHO_ID_PWD));
		}

		// エラー情報の設定
		editErrInfoEKK0361D010(param, template, (Integer)returnCode, 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));

		return param;
	}

	/**
	 * オプションサービス契約<ISP>登録下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0361D010ISP(Map<?, ?> msgList, 	IRequestParameterReadWrite param, HashMap dataMap, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		String prefix = "kk0361_";

		// オプションサービス契約番号 ← オプションサービス契約＜ISP＞登録.オプションサービス契約番号
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.OP_SVC_KEI_NO, template, EKK0361D010CBSMsg.OP_SVC_KEI_NO);
		// 世代登録年月日時分秒(オプションサービス契約) ← オプションサービス契約＜ISP＞登録.世代登録年月日時分秒(オプションサービス契約)                 
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KK0351_GENE_ADD_DTM, template, EKK0361D010CBSMsg.KK0351_GENE_ADD_DTM);
		// オプションサービス契約ステータス ← オプションサービス契約＜ISP＞登録.オプションサービス契約ステータス
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.OP_SVC_KEI_STAT, template, EKK0361D010CBSMsg.OP_SVC_KEI_STAT);
		// 予約適用年月日 ← オプションサービス契約＜ISP＞登録.予約適用年月日
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.RSV_APLY_YMD, template, EKK0361D010CBSMsg.RSV_APLY_YMD);
		// 予約適用コード ← オプションサービス契約＜ISP＞登録.予約適用コード
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.RSV_APLY_CD, template, EKK0361D010CBSMsg.RSV_APLY_CD);
		// 登録年月日時分秒 ← オプションサービス契約＜ISP＞登録.登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.ADD_DTM, template, EKK0361D010CBSMsg.ADD_DTM);
		// 登録オペレータアカウント ← オプションサービス契約＜ISP＞登録.登録オペレータアカウント
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.ADD_OPEACNT, template, EKK0361D010CBSMsg.ADD_OPEACNT);
		// 更新年月日時分秒 ← オプションサービス契約＜ISP＞登録.更新年月日時分秒
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.UPD_DTM, template, EKK0361D010CBSMsg.UPD_DTM);
		// 更新オペレータアカウント ← オプションサービス契約＜ISP＞登録.更新オペレータアカウント
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.UPD_OPEACNT, template, EKK0361D010CBSMsg.UPD_OPEACNT);
		// 無効フラグ ← オプションサービス契約＜ISP＞登録.無効フラグ
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.MK_FLG, template, EKK0361D010CBSMsg.MK_FLG);
		// 世代登録年月日時分秒(オプションサービス契約<ISP>) ← オプションサービス契約＜ISP＞登録.世代登録年月日時分秒(オプションサービス契約<ISP>)
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KK0361_GENE_ADD_DTM, template, EKK0361D010CBSMsg.KK0361_GENE_ADD_DTM);
		// メーリングリスト名（出力） ← オプションサービス契約＜ISP＞登録.メーリングリスト名（出力）
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.MLLIST_NM_O, template, EKK0361D010CBSMsg.MLLIST_NM_O);
		// 課金先番号 ← オプションサービス契約＜ISP＞登録.課金先番号
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KAKINS_NO, template, EKK0361D010CBSMsg.KAKINS_NO);
		// 課金先適用開始年月日 ← オプションサービス契約＜ISP＞登録.課金先適用開始年月日
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KAKINS_TSTAYMD, template, EKK0361D010CBSMsg.KAKINS_TSTAYMD);
		// 課金先適用終了年月日 ← オプションサービス契約＜ISP＞登録.課金先適用終了年月日
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KAKINS_TENDYMD, template, EKK0361D010CBSMsg.KAKINS_TENDYMD);
		// サブオプションサービス契約番号 ← オプションサービス契約＜ISP＞登録.サブオプションサービス契約番号
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.SBOP_SVC_KEI_NO, template, EKK0361D010CBSMsg.SBOP_SVC_KEI_NO);
		// 世代登録年月日時分秒(サブオプションサービス契約) ← オプションサービス契約＜ISP＞登録.世代登録年月日時分秒(サブオプションサービス契約)
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.KK0401_GENE_ADD_DTM, template, EKK0361D010CBSMsg.KK0401_GENE_ADD_DTM);
		// 更新年月日時分秒（サブオプションサービス契約） ← オプションサービス契約＜ISP＞登録.更新年月日時分秒（サブオプションサービス契約）
		setDataMap(dataMap, prefix, EKK0361D010CBSMsg.UPD_DTM, template, EKK0361D010CBSMsg.UPD_DTM);
		JKKBpCommon.setLastDtmBySvcKeiNo(param, this.svcKeiNo, template.getString(EKK0361D010CBSMsg.UPD_DTM));

		// エラー情報の設定
		editErrInfoEKK0361D010ISP(param, template, (Integer)returnCode, dataMap, 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));

		return param;
	}

	/**
	 * オプションサービス契約＜電話＞登録の下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0371D010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		/* 業務データ設定 */
		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}

		// オプションサービス契約＜電話＞登録マップ.オプションサービス契約番号 ← オプションサービス契約番号
		if (template.isNull(EKK0371D010CBSMsg.OP_SVC_KEI_NO))
		{
			dataMap.put("op_svc_kei_no", "");
		}
		else
		{
			dataMap.put("op_svc_kei_no", template.getString(EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		}

		// オプションサービス契約＜電話＞登録マップ.世代登録年月日時分秒（オプションサービス契約） ← 世代登録年月日時分秒(オプションサービス契約)
		if (template.isNull(EKK0371D010CBSMsg.KK0351_GENE_ADD_DTM))
		{
			dataMap.put("kk0351_gene_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0351_gene_add_dtm", template.getString(EKK0371D010CBSMsg.KK0351_GENE_ADD_DTM));
		}

		// オプションサービス契約＜電話＞登録マップ.オプションサービス契約ステータス ← オプションサービス契約ステータス
		if (template.isNull(EKK0371D010CBSMsg.OP_SVC_KEI_STAT))
		{
			dataMap.put("op_svc_kei_stat", "");
		}
		else
		{
			dataMap.put("op_svc_kei_stat", template.getString(EKK0371D010CBSMsg.OP_SVC_KEI_STAT));
		}

		// オプションサービス契約＜電話＞登録マップ.予約適用年月日 ← 予約適用年月日
		if (template.isNull(EKK0371D010CBSMsg.RSV_APLY_YMD))
		{
			dataMap.put("rsv_aply_ymd", "");
		}
		else
		{
			dataMap.put("rsv_aply_ymd", template.getString(EKK0371D010CBSMsg.RSV_APLY_YMD));
		}

		// オプションサービス契約＜電話＞登録マップ.予約適用コード ← 予約適用コード
		if (template.isNull(EKK0371D010CBSMsg.RSV_APLY_CD))
		{
			dataMap.put("rsv_aply_cd", "");
		}
		else
		{
			dataMap.put("rsv_aply_cd", template.getString(EKK0371D010CBSMsg.RSV_APLY_CD));
		}

		// オプションサービス契約＜電話＞登録マップ.世代登録年月日時分秒（オプションサービス契約＜電話＞）
		// ← 世代登録年月日時分秒(オプションサービス契約<電話>)
		if (template.isNull(EKK0371D010CBSMsg.KK0371_GENE_ADD_DTM))
		{
			dataMap.put("kk0371_gene_add_dtm", "");
		}
		else
		{
			dataMap.put("kk0371_gene_add_dtm", template.getString(EKK0371D010CBSMsg.KK0371_GENE_ADD_DTM));
		}

		// オプションサービス契約＜電話＞登録マップ.更新年月日時分秒 ← 更新年月日時分秒
		if (template.isNull(EKK0371D010CBSMsg.UPD_DTM))
		{
			dataMap.put("kk0371_upd_dtm", "");
		}
		else
		{
			dataMap.put("kk0371_upd_dtm", template.getString(EKK0371D010CBSMsg.UPD_DTM));
			
			JKKBpCommon.setLastDtmBySvcKeiNo(param,
					(String)((HashMap)param.getData(fixedText)).get("svc_kei_no"), 
					template.getString(EKK0371D010CBSMsg.UPD_DTM));
		}
		
		// オプションサービス契約＜電話＞登録マップ.表示用サービス提供開始年月日 ← 表示用サービス提供開始年月日
		if (template.isNull(EKK0371D010CBSMsg.DSP_SVCTK_STAYMD))
		{
			dataMap.put("kk0371_dsp_svctk_staymd", "");
		}
		else
		{
			dataMap.put("kk0371_dsp_svctk_staymd", template.getString(EKK0371D010CBSMsg.DSP_SVCTK_STAYMD));
		}

		// エラー情報の設定
		editErrInfoEKK0371D010(param, template, (Integer)returnCode, 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));

		return param;
	}

	/**
	 * サブオプションサービス契約キャンセル下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0401C150(Map<?, ?> msgList, 	IRequestParameterReadWrite param, HashMap dataMap, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		String prefix = "kk0401_";

		// 世代登録年月日時分秒 ← サブオプションサービス契約キャンセル.世代登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.GENE_ADD_DTM, template, EKK0401C150CBSMsg.GENE_ADD_DTM);
		// サブオプションサービス契約ステータス ← サブオプションサービス契約キャンセル.サブオプションサービス契約ステータス
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.SBOP_SVC_KEI_STAT, template, EKK0401C150CBSMsg.SBOP_SVC_KEI_STAT);
		// 予約適用年月日 ← サブオプションサービス契約キャンセル.予約適用年月日
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.RSV_APLY_YMD, template, EKK0401C150CBSMsg.RSV_APLY_YMD);
		// 予約適用コード ← サブオプションサービス契約キャンセル.予約適用コード
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.RSV_APLY_CD, template, EKK0401C150CBSMsg.RSV_APLY_CD);
		// サービスキャンセル年月日 ← サブオプションサービス契約キャンセル.サービスキャンセル年月日
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.SVC_CANCEL_YMD, template, EKK0401C150CBSMsg.SVC_CANCEL_YMD);
		// サービスキャンセル取消年月日 ← サブオプションサービス契約キャンセル.サービスキャンセル取消年月日
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.SVC_CANCEL_CL_YMD, template, EKK0401C150CBSMsg.SVC_CANCEL_CL_YMD);
		// 登録年月日時分秒 ← サブオプションサービス契約キャンセル.登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.ADD_DTM, template, EKK0401C150CBSMsg.ADD_DTM);
		// 登録オペレータアカウント ← サブオプションサービス契約キャンセル.登録オペレータアカウント
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.ADD_OPEACNT, template, EKK0401C150CBSMsg.ADD_OPEACNT);
		// 更新年月日時分秒 ← サブオプションサービス契約キャンセル.更新年月日時分秒
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.UPD_DTM, template, EKK0401C150CBSMsg.UPD_DTM);
		JKKBpCommon.setLastDtmBySvcKeiNo(param, this.svcKeiNo, template.getString(EKK0401C150CBSMsg.UPD_DTM));
		// 更新オペレータアカウント ← サブオプションサービス契約キャンセル.更新オペレータアカウント
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.UPD_OPEACNT, template, EKK0401C150CBSMsg.UPD_OPEACNT);
		// 無効フラグ ← サブオプションサービス契約キャンセル.無効フラグ
		setDataMap(dataMap, prefix, EKK0401C150CBSMsg.MK_FLG, template, EKK0401C150CBSMsg.MK_FLG);

		// エラー情報の設定
		editErrInfoEKK0401C150(param, template, (Integer)returnCode, dataMap, 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));

		return param;
	}

	/**
	 * オプションサービス契約キャンセル下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0351C220(Map<?, ?> msgList, 	IRequestParameterReadWrite param, HashMap dataMap, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		String prefix = "kk0351_";

		// 世代登録年月日時分秒 ← オプションサービス契約キャンセル.世代登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.GENE_ADD_DTM, template, EKK0351C220CBSMsg.GENE_ADD_DTM);
		// オプションサービス契約ステータス ← オプションサービス契約キャンセル.オプションサービス契約ステータス
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.OP_SVC_KEI_STAT, template, EKK0351C220CBSMsg.OP_SVC_KEI_STAT);
		// 予約適用年月日 ← オプションサービス契約キャンセル.予約適用年月日
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.RSV_APLY_YMD, template, EKK0351C220CBSMsg.RSV_APLY_YMD);
		// 予約適用コード ← オプションサービス契約キャンセル.予約適用コード
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.RSV_APLY_CD, template, EKK0351C220CBSMsg.RSV_APLY_CD);
		// サービスキャンセル年月日 ← オプションサービス契約キャンセル.サービスキャンセル年月日
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.SVC_CANCEL_YMD, template, EKK0351C220CBSMsg.SVC_CANCEL_YMD);
		// サービスキャンセル取消年月日 ← オプションサービス契約キャンセル.サービスキャンセル取消年月日
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.SVC_CANCEL_CL_YMD, template, EKK0351C220CBSMsg.SVC_CANCEL_CL_YMD);
		// 登録年月日時分秒 ← オプションサービス契約キャンセル.登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.ADD_DTM, template, EKK0351C220CBSMsg.ADD_DTM);
		// 登録オペレータアカウント ← オプションサービス契約キャンセル.登録オペレータアカウント
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.ADD_OPEACNT, template, EKK0351C220CBSMsg.ADD_OPEACNT);
		// 更新年月日時分秒 ← オプションサービス契約キャンセル.更新年月日時分秒
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.UPD_DTM, template, EKK0351C220CBSMsg.UPD_DTM);
		JKKBpCommon.setLastDtmBySvcKeiNo(param, this.svcKeiNo, template.getString(EKK0351C220CBSMsg.UPD_DTM));
		// 更新オペレータアカウント ← オプションサービス契約キャンセル.更新オペレータアカウント
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.UPD_OPEACNT, template, EKK0351C220CBSMsg.UPD_OPEACNT);
		// 無効フラグ ← オプションサービス契約キャンセル.無効フラグ
		setDataMap(dataMap, prefix, EKK0351C220CBSMsg.MK_FLG, template, EKK0351C220CBSMsg.MK_FLG);

		// エラー情報の設定
		editErrInfoEKK0351C220(param, template, (Integer)returnCode, dataMap, 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));

		return param;
	}

	/**
	 * 料金コース_オプションサービス一覧照会（料金コースコード）エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0811B001(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0811B001CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = (HashMap)(param.getData(fixedText));

		// ＫＥＹ_料金コースコード
		if (!template.isNull(EKK0811B001CBSMsg.KEY_PCRS_CD_ERR))
		{
			if (!inMap.containsKey("key_pcrs_cd_err"))
			{
				inMap.put("key_pcrs_cd_err", template.getString(EKK0811B001CBSMsg.KEY_PCRS_CD_ERR));
			}
		}

		return param;
	}

	/**
	 * 料金コース_サブオプションサービス一覧照会エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1881B001(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK1881B001CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = (HashMap)(param.getData(fixedText));

		// ＫＥＹ_料金コースコード
		if (!template.isNull(EKK1881B001CBSMsg.KEY_PCRS_CD_ERR))
		{
			if (!inMap.containsKey("key_pcrs_cd_err"))
			{
				inMap.put("key_pcrs_cd_err", template.getString(EKK1881B001CBSMsg.KEY_PCRS_CD_ERR));
			}
		}

		// ＫＥＹ＿サブオプションサービスコード
		if (!template.isNull(EKK1881B001CBSMsg.KEY_SBOP_SVC_CD_ERR))
		{
			if (!inMap.containsKey("key_sbop_svc_cd_err"))
			{
				inMap.put("key_sbop_svc_cd_err", template.getString(EKK1881B001CBSMsg.KEY_SBOP_SVC_CD_ERR));
			}
		}

		return param;
	}

	/**
	 * オプションサービス契約＜ISP＞登録エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0361D010(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0361D010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = (HashMap)(param.getData(fixedText));

		// オプションサービスコード
		if (!template.isNull(EKK0361D010CBSMsg.OP_SVC_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_op_svc_cd_err"))
			{
				inMap.put("kk0361_op_svc_cd_err", template.getString(EKK0361D010CBSMsg.OP_SVC_CD_ERR));
			}
		}

		// 料金コースコード
		if (!template.isNull(EKK0361D010CBSMsg.PCRS_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_pcrs_cd_err"))
			{
				inMap.put("kk0361_pcrs_cd_err", template.getString(EKK0361D010CBSMsg.PCRS_CD_ERR));
			}
		}

		// 料金プランコード
		if (!template.isNull(EKK0361D010CBSMsg.PPLAN_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_pplan_cd_err"))
			{
				inMap.put("kk0361_pplan_cd_err", template.getString(EKK0361D010CBSMsg.PPLAN_CD_ERR));
			}
		}

		// 親契約識別コード
		if (!template.isNull(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_oya_kei_skbt_cd_err"))
			{
				inMap.put("kk0361_oya_kei_skbt_cd_err", template.getString(EKK0361D010CBSMsg.OYA_KEI_SKBT_CD_ERR));
			}
		}

		// サービス契約番号
		if (!template.isNull(EKK0361D010CBSMsg.SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("kk0361_svc_kei_no_err"))
			{
				inMap.put("kk0361_svc_kei_no_err", template.getString(EKK0361D010CBSMsg.SVC_KEI_NO_ERR));
			}
		}

		// サービス契約内訳番号
		if (!template.isNull(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("kk0361_svc_kei_ucwk_no_err"))
			{
				inMap.put("kk0361_svc_kei_ucwk_no_err", template.getString(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO_ERR));
			}
		}

		// SYSID
		if (!template.isNull(EKK0361D010CBSMsg.SYSID_ERR))
		{
			if (!inMap.containsKey("kk0361_sysid_err"))
			{
				inMap.put("kk0361_sysid_err", template.getString(EKK0361D010CBSMsg.SYSID_ERR));
			}
		}

		// 申込明細番号
		if (!template.isNull(EKK0361D010CBSMsg.MSKM_DTL_NO_ERR))
		{
			if (!inMap.containsKey("kk0361_mskm_dtl_no_err"))
			{
				inMap.put("kk0361_mskm_dtl_no_err", template.getString(EKK0361D010CBSMsg.MSKM_DTL_NO_ERR));
			}
		}

		// 試用加入年月日
		if (!template.isNull(EKK0361D010CBSMsg.FTRIAL_KANYU_YMD_ERR))
		{
			if (!inMap.containsKey("kk0361_ftrial_kanyu_ymd_err"))
			{
				inMap.put("kk0361_ftrial_kanyu_ymd_err", template.getString(EKK0361D010CBSMsg.FTRIAL_KANYU_YMD_ERR));
			}
		}

		// 試用期間終了年月日
		if (!template.isNull(EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR))
		{
			if (!inMap.containsKey("kk0361_ftrial_prd_endymd_err"))
			{
				inMap.put("kk0361_ftrial_prd_endymd_err", template.getString(EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR));
			}
		}

		// 本加入年月日
		if (!template.isNull(EKK0361D010CBSMsg.HONKANYU_YMD_ERR))
		{
			if (!inMap.containsKey("kk0361_honkanyu_ymd_err"))
			{
				inMap.put("kk0361_honkanyu_ymd_err", template.getString(EKK0361D010CBSMsg.HONKANYU_YMD_ERR));
			}
		}

		// 本加入移行期限年月日
		if (!template.isNull(EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR))
		{
			if (!inMap.containsKey("kk0361_honkanyu_iko_kigen_ymd_err"))
			{
				inMap.put("kk0361_honkanyu_iko_kigen_ymd_err", template.getString(EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR));
			}
		}

		// サービス利用開始希望年月日
		if (!template.isNull(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR))
		{
			if (!inMap.containsKey("kk0361_svc_use_sta_kibo_ymd_err"))
			{
				inMap.put("kk0361_svc_use_sta_kibo_ymd_err", template.getString(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR));
			}
		}

		// 予約適用開始希望年月日
		if (!template.isNull(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR))
		{
			if (!inMap.containsKey("kk0361_rsv_tsta_kibo_ymd_err"))
			{
				inMap.put("kk0361_rsv_tsta_kibo_ymd_err", template.getString(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR));
			}
		}

		// 違約金発生コード
		if (!template.isNull(EKK0361D010CBSMsg.PNLTY_HASSEI_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_pnlty_hassei_cd_err"))
			{
				inMap.put("kk0361_pnlty_hassei_cd_err", template.getString(EKK0361D010CBSMsg.PNLTY_HASSEI_CD_ERR));
			}
		}

		// 異動区分
		if (!template.isNull(EKK0361D010CBSMsg.IDO_DIV_ERR))
		{
			if (!inMap.containsKey("kk0361_ido_div_err"))
			{
				inMap.put("kk0361_ido_div_err", template.getString(EKK0361D010CBSMsg.IDO_DIV_ERR));
			}
		}

		// 希望メールアカウント1
		if (!template.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1_ERR))
		{
			if (!inMap.containsKey("kk0361_kibo_ml_account_1_err"))
			{
				inMap.put("kk0361_kibo_ml_account_1_err", template.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1_ERR));
			}
		}

		// 希望メールアカウント2
		if (!template.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2_ERR))
		{
			if (!inMap.containsKey("kk0361_kibo_ml_account_2_err"))
			{
				inMap.put("kk0361_kibo_ml_account_2_err", template.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2_ERR));
			}
		}

		// 希望メールアカウント3
		if (!template.isNull(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3_ERR))
		{
			if (!inMap.containsKey("kk0361_kibo_ml_account_3_err"))
			{
				inMap.put("kk0361_kibo_ml_account_3_err", template.getString(EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3_ERR));
			}
		}

		// マルチセッション用セッション数
		if (!template.isNull(EKK0361D010CBSMsg.MLTISE_SESSION_CNT_ERR))
		{
			if (!inMap.containsKey("kk0361_mltise_session_cnt_err"))
			{
				inMap.put("kk0361_mltise_session_cnt_err", template.getString(EKK0361D010CBSMsg.MLTISE_SESSION_CNT_ERR));
			}
		}

		// マルチセッション用初期認証IDパスワード
		if (!template.isNull(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD_ERR))
		{
			if (!inMap.containsKey("kk0361_mltise_shk_ninsho_id_pwd_err"))
			{
				inMap.put("kk0361_mltise_shk_ninsho_id_pwd_err", template.getString(EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD_ERR));
			}
		}

		// マルチセッション用認証ID
		if (!template.isNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_ERR))
		{
			if (!inMap.containsKey("kk0361_mltise_ninsho_id_err"))
			{
				inMap.put("kk0361_mltise_ninsho_id_err", template.getString(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_ERR));
			}
		}

		// マルチセッション用認証IDパスワード
		if (!template.isNull(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD_ERR))
		{
			if (!inMap.containsKey("kk0361_mltise_ninsho_id_pwd_err"))
			{
				inMap.put("kk0361_mltise_ninsho_id_pwd_err", template.getString(EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD_ERR));
			}
		}

		// 固定IPアドレス
		if (!template.isNull(EKK0361D010CBSMsg.KOTEI_IP_AD_ERR))
		{
			if (!inMap.containsKey("kk0361_kotei_ip_ad_err"))
			{
				inMap.put("kk0361_kotei_ip_ad_err", template.getString(EKK0361D010CBSMsg.KOTEI_IP_AD_ERR));
			}
		}

		// ネットマスク
		if (!template.isNull(EKK0361D010CBSMsg.NETMASK_ERR))
		{
			if (!inMap.containsKey("kk0361_netmask_err"))
			{
				inMap.put("kk0361_netmask_err", template.getString(EKK0361D010CBSMsg.NETMASK_ERR));
			}
		}

		// 容量
		if (!template.isNull(EKK0361D010CBSMsg.CAPA_ERR))
		{
			if (!inMap.containsKey("kk0361_capa_err"))
			{
				inMap.put("kk0361_capa_err", template.getString(EKK0361D010CBSMsg.CAPA_ERR));
			}
		}

		// URL(ドメイン)
		if (!template.isNull(EKK0361D010CBSMsg.URL_DOMAIN_ERR))
		{
			if (!inMap.containsKey("kk0361_url_domain_err"))
			{
				inMap.put("kk0361_url_domain_err", template.getString(EKK0361D010CBSMsg.URL_DOMAIN_ERR));
			}
		}

		// URL(アカウント)
		if (!template.isNull(EKK0361D010CBSMsg.URL_ACCOUNT_ERR))
		{
			if (!inMap.containsKey("kk0361_url_account_err"))
			{
				inMap.put("kk0361_url_account_err", template.getString(EKK0361D010CBSMsg.URL_ACCOUNT_ERR));
			}
		}

		// メーリングリスト名
		if (!template.isNull(EKK0361D010CBSMsg.MLLIST_NM_ERR))
		{
			if (!inMap.containsKey("kk0361_mllist_nm_err"))
			{
				inMap.put("kk0361_mllist_nm_err", template.getString(EKK0361D010CBSMsg.MLLIST_NM_ERR));
			}
		}

		// メーリングリスト呼称
		if (!template.isNull(EKK0361D010CBSMsg.MLLIST_KOSHO_ERR))
		{
			if (!inMap.containsKey("kk0361_mllist_kosho_err"))
			{
				inMap.put("kk0361_mllist_kosho_err", template.getString(EKK0361D010CBSMsg.MLLIST_KOSHO_ERR));
			}
		}

		// メーリングリスト公開要否
		if (!template.isNull(EKK0361D010CBSMsg.MLLIST_KOKAI_YH_ERR))
		{
			if (!inMap.containsKey("kk0361_mllist_kokai_yh_err"))
			{
				inMap.put("kk0361_mllist_kokai_yh_err", template.getString(EKK0361D010CBSMsg.MLLIST_KOKAI_YH_ERR));
			}
		}

		// メーリングリスト最大ユーザー数
		if (!template.isNull(EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT_ERR))
		{
			if (!inMap.containsKey("kk0361_mllist_max_user_cnt_err"))
			{
				inMap.put("kk0361_mllist_max_user_cnt_err", template.getString(EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT_ERR));
			}
		}

		// メーリングリスト管理者メールアドレス
		if (!template.isNull(EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD_ERR))
		{
			if (!inMap.containsKey("kk0361_mllist_krisha_mlad_err"))
			{
				inMap.put("kk0361_mllist_krisha_mlad_err", template.getString(EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD_ERR));
			}
		}

		// 独自ドメイン名
		if (!template.isNull(EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM_ERR))
		{
			if (!inMap.containsKey("kk0361_dokuji_domain_nm_err"))
			{
				inMap.put("kk0361_dokuji_domain_nm_err", template.getString(EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM_ERR));
			}
		}

		// ホスティングメールアカウント数
		if (!template.isNull(EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT_ERR))
		{
			if (!inMap.containsKey("kk0361_hosml_account_cnt_err"))
			{
				inMap.put("kk0361_hosml_account_cnt_err", template.getString(EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT_ERR));
			}
		}

		// ホスティングメールボックス総容量
		if (!template.isNull(EKK0361D010CBSMsg.HOSML_BOX_CAPA_ERR))
		{
			if (!inMap.containsKey("kk0361_hosml_box_capa_err"))
			{
				inMap.put("kk0361_hosml_box_capa_err", template.getString(EKK0361D010CBSMsg.HOSML_BOX_CAPA_ERR));
			}
		}

		// ダイヤルパッドPIN
		if (!template.isNull(EKK0361D010CBSMsg.DPAD_PIN_ERR))
		{
			if (!inMap.containsKey("kk0361_dpad_pin_err"))
			{
				inMap.put("kk0361_dpad_pin_err", template.getString(EKK0361D010CBSMsg.DPAD_PIN_ERR));
			}
		}

		// ダイヤルパッドID公開要否
		if (!template.isNull(EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH_ERR))
		{
			if (!inMap.containsKey("kk0361_dpad_id_kokai_yh_err"))
			{
				inMap.put("kk0361_dpad_id_kokai_yh_err", template.getString(EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH_ERR));
			}
		}

		// ダイヤルアップ接続用認証ID
		if (!template.isNull(EKK0361D010CBSMsg.DUPCON_NINSHO_ID_ERR))
		{
			if (!inMap.containsKey("kk0361_dupcon_ninsho_id_err"))
			{
				inMap.put("kk0361_dupcon_ninsho_id_err", template.getString(EKK0361D010CBSMsg.DUPCON_NINSHO_ID_ERR));
			}
		}

		// DNS設定コード
		if (!template.isNull(EKK0361D010CBSMsg.DNS_SETTE_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_dns_sette_cd_err"))
			{
				inMap.put("kk0361_dns_sette_cd_err", template.getString(EKK0361D010CBSMsg.DNS_SETTE_CD_ERR));
			}
		}

		// スポット有害サイトブロック対象SYSID
		if (!template.isNull(EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID_ERR))
		{
			if (!inMap.containsKey("kk0361_spot_ygsiteblck_trgt_sysid_err"))
			{
				inMap.put("kk0361_spot_ygsiteblck_trgt_sysid_err", template.getString(EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID_ERR));
			}
		}

		// サービス個別設定連絡先メールアドレス
		if (!template.isNull(EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD_ERR))
		{
			if (!inMap.containsKey("kk0361_svc_kbt_set_rrks_mlad_err"))
			{
				inMap.put("kk0361_svc_kbt_set_rrks_mlad_err", template.getString(EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD_ERR));
			}
		}

		// 通話明細公開要否
		if (!template.isNull(EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH_ERR))
		{
			if (!inMap.containsKey("kk0361_tuwa_dtl_kokai_yh_err"))
			{
				inMap.put("kk0361_tuwa_dtl_kokai_yh_err", template.getString(EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH_ERR));
			}
		}

		// IPv6アドレス(インターフェイスID)
		if (!template.isNull(EKK0361D010CBSMsg.IPV6_AD_IFID_ERR))
		{
			if (!inMap.containsKey("kk0361_ipv6_ad_ifid_err"))
			{
				inMap.put("kk0361_ipv6_ad_ifid_err", template.getString(EKK0361D010CBSMsg.IPV6_AD_IFID_ERR));
			}
		}

		// 請求契約番号
		if (!template.isNull(EKK0361D010CBSMsg.SEIKY_KEI_NO_ERR))
		{
			if (!inMap.containsKey("kk0361_seiky_kei_no_err"))
			{
				inMap.put("kk0361_seiky_kei_no_err", template.getString(EKK0361D010CBSMsg.SEIKY_KEI_NO_ERR));
			}
		}

		// 料金項目コード
		if (!template.isNull(EKK0361D010CBSMsg.PRC_KMK_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_prc_kmk_cd_err"))
			{
				inMap.put("kk0361_prc_kmk_cd_err", template.getString(EKK0361D010CBSMsg.PRC_KMK_CD_ERR));
			}
		}

		// 更新年月日時分秒(更新前)
		if (!template.isNull(EKK0361D010CBSMsg.UPD_DTM_BF_ERR))
		{
			if (!inMap.containsKey("kk0361_upd_dtm_bf_err"))
			{
				inMap.put("kk0361_upd_dtm_bf_err", template.getString(EKK0361D010CBSMsg.UPD_DTM_BF_ERR));
			}
		}

		// 初期POPIDパスワード
		if (!template.isNull(EKK0361D010CBSMsg.SHK_POP_ID_PWD_ERR))
		{
			if (!inMap.containsKey("kk0361_shk_pop_id_pwd_err"))
			{
				inMap.put("kk0361_shk_pop_id_pwd_err", template.getString(EKK0361D010CBSMsg.SHK_POP_ID_PWD_ERR));
			}
		}

		// POPID
		if (!template.isNull(EKK0361D010CBSMsg.POP_ID_ERR))
		{
			if (!inMap.containsKey("kk0361_pop_id_err"))
			{
				inMap.put("kk0361_pop_id_err", template.getString(EKK0361D010CBSMsg.POP_ID_ERR));
			}
		}

		// メールアドレス
		if (!template.isNull(EKK0361D010CBSMsg.MLAD_ERR))
		{
			if (!inMap.containsKey("kk0361_mlad_err"))
			{
				inMap.put("kk0361_mlad_err", template.getString(EKK0361D010CBSMsg.MLAD_ERR));
			}
		}

		// 初期WebIDパスワード
		if (!template.isNull(EKK0361D010CBSMsg.SHK_WEB_ID_PWD_ERR))
		{
			if (!inMap.containsKey("kk0361_shk_web_id_pwd_err"))
			{
				inMap.put("kk0361_shk_web_id_pwd_err", template.getString(EKK0361D010CBSMsg.SHK_WEB_ID_PWD_ERR));
			}
		}

		// WebID
		if (!template.isNull(EKK0361D010CBSMsg.WEB_ID_ERR))
		{
			if (!inMap.containsKey("kk0361_web_id_err"))
			{
				inMap.put("kk0361_web_id_err", template.getString(EKK0361D010CBSMsg.WEB_ID_ERR));
			}
		}
		
		// フェムトセル事業者コード
		if (!template.isNull(EKK0361D010CBSMsg.FMTCEL_JGS_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_fmtcel_jgs_cd_err"))
			{
				inMap.put("kk0361_fmtcel_jgs_cd_err", template.getString(EKK0361D010CBSMsg.FMTCEL_JGS_CD_ERR));
			}
		}
		
		// フェムトセル事業者使用コード
		if (!template.isNull(EKK0361D010CBSMsg.FMTCEL_JGS_USE_CD_ERR))
		{
			if (!inMap.containsKey("kk0361_fmtcel_jgs_use_cd_err"))
			{
				inMap.put("kk0361_fmtcel_jgs_use_cd_err", template.getString(EKK0361D010CBSMsg.FMTCEL_JGS_USE_CD_ERR));
			}
		}
		
		return param;
	}

	/**
	 * オプションサービス契約<ISP>登録エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0361D010ISP(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0361D010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		String prefix = "kk0361_";

		// オプションサービス契約＜ISP＞登録.オプションサービスコード → オプションサービスコードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.OP_SVC_CD_ERR, template, EKK0361D010CBSMsg.OP_SVC_CD_ERR);
		// オプションサービス契約＜ISP＞登録.料金コースコード → 料金コースコードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.PCRS_CD_ERR, template, EKK0361D010CBSMsg.PCRS_CD_ERR);
		// オプションサービス契約＜ISP＞登録.料金プランコード → 料金プランコードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.PPLAN_CD_ERR, template, EKK0361D010CBSMsg.PPLAN_CD_ERR);
		// オプションサービス契約＜ISP＞登録.親契約識別コード → 親契約識別コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.OYA_KEI_SKBT_CD_ERR, template, EKK0361D010CBSMsg.OYA_KEI_SKBT_CD_ERR);
		// オプションサービス契約＜ISP＞登録.サービス契約番号 → サービス契約番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SVC_KEI_NO_ERR, template, EKK0361D010CBSMsg.SVC_KEI_NO_ERR);
		// オプションサービス契約＜ISP＞登録.サービス契約内訳番号 → サービス契約内訳番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SVC_KEI_UCWK_NO_ERR, template, EKK0361D010CBSMsg.SVC_KEI_UCWK_NO_ERR);
		// オプションサービス契約＜ISP＞登録.SYSID → SYSIDのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SYSID_ERR, template, EKK0361D010CBSMsg.SYSID_ERR);
		// オプションサービス契約＜ISP＞登録.申込明細番号 → 申込明細番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MSKM_DTL_NO_ERR, template, EKK0361D010CBSMsg.MSKM_DTL_NO_ERR);
		// オプションサービス契約＜ISP＞登録.試用加入年月日 → 試用加入年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.FTRIAL_KANYU_YMD_ERR, template, EKK0361D010CBSMsg.FTRIAL_KANYU_YMD_ERR);
		// オプションサービス契約＜ISP＞登録.試用期間終了年月日 → 試用期間終了年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR, template, EKK0361D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR);
		// オプションサービス契約＜ISP＞登録.本加入年月日 → 本加入年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.HONKANYU_YMD_ERR, template, EKK0361D010CBSMsg.HONKANYU_YMD_ERR);
		// オプションサービス契約＜ISP＞登録.本加入移行期限年月日 → 本加入移行期限年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR, template, EKK0361D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR);
		// オプションサービス契約＜ISP＞登録.サービス利用開始希望年月日 → サービス利用開始希望年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR, template, EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR);
		// オプションサービス契約＜ISP＞登録.予約適用開始希望年月日 → 予約適用開始希望年月日のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR, template, EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR);
		// オプションサービス契約＜ISP＞登録.違約金発生コード → 違約金発生コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.PNLTY_HASSEI_CD_ERR, template, EKK0361D010CBSMsg.PNLTY_HASSEI_CD_ERR);
		// オプションサービス契約＜ISP＞登録.異動区分 → 異動区分のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.IDO_DIV_ERR, template, EKK0361D010CBSMsg.IDO_DIV_ERR);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント1 → 希望メールアカウント1のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1_ERR, template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_1_ERR);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント2 → 希望メールアカウント2のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2_ERR, template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_2_ERR);
		// オプションサービス契約＜ISP＞登録.希望メールアカウント3 → 希望メールアカウント3のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3_ERR, template, EKK0361D010CBSMsg.KIBO_ML_ACCOUNT_3_ERR);
		// オプションサービス契約＜ISP＞登録.マルチセッション用セッション数 → マルチセッション用セッション数のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLTISE_SESSION_CNT_ERR, template, EKK0361D010CBSMsg.MLTISE_SESSION_CNT_ERR);
		// オプションサービス契約＜ISP＞登録.マルチセッション用初期認証IDパスワード → マルチセッション用初期認証IDパスワードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD_ERR, template, EKK0361D010CBSMsg.MLTISE_SHK_NINSHO_ID_PWD_ERR);
		// オプションサービス契約＜ISP＞登録.マルチセッション用認証ID → マルチセッション用認証IDのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_ERR, template, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_ERR);
		// オプションサービス契約＜ISP＞登録.マルチセッション用認証IDパスワード → マルチセッション用認証IDパスワードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD_ERR, template, EKK0361D010CBSMsg.MLTISE_NINSHO_ID_PWD_ERR);
		// オプションサービス契約＜ISP＞登録.固定IPアドレス → 固定IPアドレスのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.KOTEI_IP_AD_ERR, template, EKK0361D010CBSMsg.KOTEI_IP_AD_ERR);
		// オプションサービス契約＜ISP＞登録.ネットマスク → ネットマスクのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.NETMASK_ERR, template, EKK0361D010CBSMsg.NETMASK_ERR);
		// オプションサービス契約＜ISP＞登録.容量 → 容量のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.CAPA_ERR, template, EKK0361D010CBSMsg.CAPA_ERR);
		// オプションサービス契約＜ISP＞登録.URL(ドメイン) → URL(ドメイン)のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.URL_DOMAIN_ERR, template, EKK0361D010CBSMsg.URL_DOMAIN_ERR);
		// オプションサービス契約＜ISP＞登録.URL(アカウント) → URL(アカウント)のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.URL_ACCOUNT_ERR, template, EKK0361D010CBSMsg.URL_ACCOUNT_ERR);
		// オプションサービス契約＜ISP＞登録.メーリングリスト名 → メーリングリスト名のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLLIST_NM_ERR, template, EKK0361D010CBSMsg.MLLIST_NM_ERR);
		// オプションサービス契約＜ISP＞登録.メーリングリスト呼称 → メーリングリスト呼称のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLLIST_KOSHO_ERR, template, EKK0361D010CBSMsg.MLLIST_KOSHO_ERR);
		// オプションサービス契約＜ISP＞登録.メーリングリスト公開要否 → メーリングリスト公開要否のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLLIST_KOKAI_YH_ERR, template, EKK0361D010CBSMsg.MLLIST_KOKAI_YH_ERR);
		// オプションサービス契約＜ISP＞登録.メーリングリスト最大ユーザー数 → メーリングリスト最大ユーザー数のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT_ERR, template, EKK0361D010CBSMsg.MLLIST_MAX_USER_CNT_ERR);
		// オプションサービス契約＜ISP＞登録.メーリングリスト管理者メールアドレス → メーリングリスト管理者メールアドレスのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD_ERR, template, EKK0361D010CBSMsg.MLLIST_KRISHA_MLAD_ERR);
		// オプションサービス契約＜ISP＞登録.独自ドメイン名 → 独自ドメイン名のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM_ERR, template, EKK0361D010CBSMsg.DOKUJI_DOMAIN_NM_ERR);
		// オプションサービス契約＜ISP＞登録.ホスティングメールアカウント数 → ホスティングメールアカウント数のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT_ERR, template, EKK0361D010CBSMsg.HOSML_ACCOUNT_CNT_ERR);
		// オプションサービス契約＜ISP＞登録.ホスティングメールボックス総容量 → ホスティングメールボックス総容量のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.HOSML_BOX_CAPA_ERR, template, EKK0361D010CBSMsg.HOSML_BOX_CAPA_ERR);
		// オプションサービス契約＜ISP＞登録.ダイヤルパッドPIN → ダイヤルパッドPINのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.DPAD_PIN_ERR, template, EKK0361D010CBSMsg.DPAD_PIN_ERR);
		// オプションサービス契約＜ISP＞登録.ダイヤルパッドID公開要否 → ダイヤルパッドID公開要否のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH_ERR, template, EKK0361D010CBSMsg.DPAD_ID_KOKAI_YH_ERR);
		// オプションサービス契約＜ISP＞登録.ダイヤルアップ接続用認証ID → ダイヤルアップ接続用認証IDのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.DUPCON_NINSHO_ID_ERR, template, EKK0361D010CBSMsg.DUPCON_NINSHO_ID_ERR);
		// オプションサービス契約＜ISP＞登録.DNS設定コード → DNS設定コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.DNS_SETTE_CD_ERR, template, EKK0361D010CBSMsg.DNS_SETTE_CD_ERR);
		// オプションサービス契約＜ISP＞登録.スポット有害サイトブロック対象SYSID → スポット有害サイトブロック対象SYSIDのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID_ERR, template, EKK0361D010CBSMsg.SPOT_YGSITEBLCK_TRGT_SYSID_ERR);
		// オプションサービス契約＜ISP＞登録.サービス個別設定連絡先メールアドレス → サービス個別設定連絡先メールアドレスのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD_ERR, template, EKK0361D010CBSMsg.SVC_KBT_SET_RRKS_MLAD_ERR);
		// オプションサービス契約＜ISP＞登録.通話明細公開要否 → 通話明細公開要否のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH_ERR, template, EKK0361D010CBSMsg.TUWA_DTL_KOKAI_YH_ERR);
		// オプションサービス契約＜ISP＞登録.請求契約番号 → 請求契約番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.SEIKY_KEI_NO_ERR, template, EKK0361D010CBSMsg.SEIKY_KEI_NO_ERR);
		// オプションサービス契約＜ISP＞登録.料金項目コード → 料金項目コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.PRC_KMK_CD_ERR, template, EKK0361D010CBSMsg.PRC_KMK_CD_ERR);
		// オプションサービス契約＜ISP＞登録.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)のエラー情報返却
		setErrInfo(inMap, prefix, EKK0361D010CBSMsg.UPD_DTM_BF_ERR, template, EKK0361D010CBSMsg.UPD_DTM_BF_ERR);

// ANK-4427-00-00 ADD START
		// 項目転送
		String[] itemList = new String[] {
				EKK0361D010CBSMsg.TYPEN_TELNO_ERR,				// typeN電話番号
				EKK0361D010CBSMsg.TYPEN_BMP_SBT_ERR,			// typeN番ポ種別
				EKK0361D010CBSMsg.TYPEN_KEISHA_NM_ERR,			// typeN契約者名
				EKK0361D010CBSMsg.TYPEN_AD_CD_ERR,				// typeN住所コード
				EKK0361D010CBSMsg.TYPEN_PCD_ERR,				// typeN郵便番号
				EKK0361D010CBSMsg.TYPEN_STATE_NM_ERR,			// typeN都道府県名 
				EKK0361D010CBSMsg.TYPEN_CITY_NM_ERR,			// typeN市区町村名
				EKK0361D010CBSMsg.TYPEN_OAZTSU_NM_ERR,			// typeN大字通称名
				EKK0361D010CBSMsg.TYPEN_AZCHO_NM_ERR,			// typeN字丁目名
				EKK0361D010CBSMsg.TYPEN_BNCHIGO_ERR,			// typeN番地号
				EKK0361D010CBSMsg.TYPEN_ADRTTM_ERR,				// typeN住所補記・建物名
				EKK0361D010CBSMsg.TYPEN_ADRRM_ERR,				// typeN住所補記・部屋番号
				EKK0361D010CBSMsg.TYPEN_AD_MAN_INPUT_FLG_ERR,	// typeN住所手動入力フラグ
				EKK0361D010CBSMsg.TYPEN_TEL_KNKN_TRAT_CD_ERR,	// typeN電話加入権取扱コード	
				EKK0361D010CBSMsg.TYPEN_TELNO_SBT_CD_ERR,		// typeN電話番号種別コード 
// ANK-4640-00-00 ADD START
				EKK0361D010CBSMsg.TYPEN_TSJGS_CD_ERR,			// typeN通信事業者コードエラー
// ANK-4640-00-00 ADD END
		};

		for (String item : itemList)
		{
			// エラー項目を返却マップへprefix付きで設定
			setErrInfo(inMap, prefix, item, template, item);
		}
// ANK-4427-00-00 ADD END
		return param;
	}

	/**
	 * オプションサービス契約＜電話＞登録のエラー情報マッピング処理を行います。
	 * <br>
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0371D010(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0371D010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = (HashMap)(param.getData(fixedText));

		// オプションサービス契約＜電話＞登録マップ.オプションサービスコード → オプションサービスコード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.OP_SVC_CD_ERR))
		{
			if (!inMap.containsKey("op_svc_cd_err"))
			{
				inMap.put("op_svc_cd_err", template.getString(EKK0371D010CBSMsg.OP_SVC_CD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.料金コースコード → 料金コースコード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.PCRS_CD_ERR))
		{
			if (!inMap.containsKey("pcrs_cd_err"))
			{
				inMap.put("pcrs_cd_err", template.getString(EKK0371D010CBSMsg.PCRS_CD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.料金プランコード → 料金プランコード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.PPLAN_CD_ERR))
		{
			if (!inMap.containsKey("pplan_cd_err"))
			{
				inMap.put("pplan_cd_err", template.getString(EKK0371D010CBSMsg.PPLAN_CD_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.親契約識別コード → 親契約識別コード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD_ERR))
		{
			if (!inMap.containsKey("oya_kei_skbt_cd_err"))
			{
				inMap.put("oya_kei_skbt_cd_err", template.getString(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.サービス契約番号 → サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_no_err"))
			{
				inMap.put("svc_kei_no_err", template.getString(EKK0371D010CBSMsg.SVC_KEI_NO_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.サービス契約内訳番号 → サービス契約内訳番号 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_ucwk_no_err"))
			{
				inMap.put("svc_kei_ucwk_no_err", template.getString(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.ＳＹＳＩＤ → SYSID のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.SYSID_ERR))
		{
			if (!inMap.containsKey("sysid_err"))
			{
				inMap.put("sysid_err", template.getString(EKK0371D010CBSMsg.SYSID_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.申込明細番号 → 申込明細番号 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.MSKM_DTL_NO_ERR))
		{
			if (!inMap.containsKey("mskm_dtl_no_err"))
			{
				inMap.put("mskm_dtl_no_err", template.getString(EKK0371D010CBSMsg.MSKM_DTL_NO_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.試用加入年月日 → 試用加入年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.FTRIAL_KANYU_YMD_ERR))
		{
			if (!inMap.containsKey("ftrial_kanyu_ymd_err"))
			{
				inMap.put("ftrial_kanyu_ymd_err", template.getString(EKK0371D010CBSMsg.FTRIAL_KANYU_YMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.試用期間終了年月日 → 試用期間終了年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR))
		{
			if (!inMap.containsKey("ftrial_prd_endymd_err"))
			{
				inMap.put("ftrial_prd_endymd_err", template.getString(EKK0371D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.本加入年月日 → 本加入年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.HONKANYU_YMD_ERR))
		{
			if (!inMap.containsKey("honkanyu_ymd_err"))
			{
				inMap.put("honkanyu_ymd_err", template.getString(EKK0371D010CBSMsg.HONKANYU_YMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.本加入移行期限年月日 → 本加入移行期限年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR))
		{
			if (!inMap.containsKey("honkanyu_iko_kigen_ymd_err"))
			{
				inMap.put("honkanyu_iko_kigen_ymd_err", template.getString(EKK0371D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.サービス利用開始希望年月日 → サービス利用開始希望年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR))
		{
			if (!inMap.containsKey("svc_use_sta_kibo_ymd_err"))
			{
				inMap.put("svc_use_sta_kibo_ymd_err", template.getString(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.予約適用開始希望年月日 → 予約適用開始希望年月日 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR))
		{
			if (!inMap.containsKey("rsv_tsta_kibo_ymd_err"))
			{
				inMap.put("rsv_tsta_kibo_ymd_err", template.getString(EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.違約金発生コード → 違約金発生コード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.PNLTY_HASSEI_CD_ERR))
		{
			if (!inMap.containsKey("pnlty_hassei_cd_err"))
			{
				inMap.put("pnlty_hassei_cd_err", template.getString(EKK0371D010CBSMsg.PNLTY_HASSEI_CD_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.異動区分 → 異動区分 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.IDO_DIV_ERR))
		{
			if (!inMap.containsKey("ido_div_err"))
			{
				inMap.put("ido_div_err", template.getString(EKK0371D010CBSMsg.IDO_DIV_ERR));
			}
		}
		// オプションサービス契約＜電話＞登録マップ.０５０オプション電話番号 → 050オプション電話番号 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.N_050_OP_TELNO_ERR))
		{
			if (!inMap.containsKey("op_050_telno_err"))
			{
				inMap.put("op_050_telno_err", template.getString(EKK0371D010CBSMsg.N_050_OP_TELNO_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.通話料指定額到達通知指定金額 → 通話料指定額到達通知指定金額 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM_ERR))
		{
			if (!inMap.containsKey("twryo_stiam_ttu_tchi_stiam_err"))
			{
				inMap.put("twryo_stiam_ttu_tchi_stiam_err", template.getString(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.請求契約番号 → 請求契約番号 のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.SEIKY_KEI_NO_ERR))
		{
			if (!inMap.containsKey("seiky_kei_no_err"))
			{
				inMap.put("seiky_kei_no_err", template.getString(EKK0371D010CBSMsg.SEIKY_KEI_NO_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.料金項目コード → 料金項目コード のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.PRC_KMK_CD_ERR))
		{
			if (!inMap.containsKey("prc_kmk_cd_err"))
			{
				inMap.put("prc_kmk_cd_err", template.getString(EKK0371D010CBSMsg.PRC_KMK_CD_ERR));
			}
		}

		// オプションサービス契約＜電話＞登録マップ.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前) のエラー情報返却
		if (!template.isNull(EKK0371D010CBSMsg.UPD_DTM_BF_ERR))
		{
			if (!inMap.containsKey("upd_dtm_bf_err"))
			{
				inMap.put("upd_dtm_err", template.getString(EKK0371D010CBSMsg.UPD_DTM_BF_ERR));
			}
		}

		return param;
	}

	/**
	 * サブオプションサービス契約キャンセルエラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0401C150(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0401C150CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		String prefix = "kk0401_";

		// サブオプションサービス契約キャンセル.オプションサービス契約番号 → オプションサービス契約番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.OP_SVC_KEI_NO_ERR, template, EKK0401C150CBSMsg.OP_SVC_KEI_NO_ERR);
		// サブオプションサービス契約キャンセル.サブオプションサービス契約番号 → サブオプションサービス契約番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.SBOP_SVC_KEI_NO_ERR, template, EKK0401C150CBSMsg.SBOP_SVC_KEI_NO_ERR);
		// サブオプションサービス契約キャンセル.申込明細番号 → 申込明細番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.MSKM_DTL_NO_ERR, template, EKK0401C150CBSMsg.MSKM_DTL_NO_ERR);
		// サブオプションサービス契約キャンセル.サービスキャンセル理由コード → サービスキャンセル理由コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD_ERR, template, EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD_ERR);
		// サブオプションサービス契約キャンセル.異動区分 → 異動区分のエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.IDO_DIV_ERR, template, EKK0401C150CBSMsg.IDO_DIV_ERR);
		// サブオプションサービス契約キャンセル.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)のエラー情報返却
		setErrInfo(inMap, prefix, EKK0401C150CBSMsg.UPD_DTM_BF_ERR, template, EKK0401C150CBSMsg.UPD_DTM_BF_ERR);

		return param;
	}

	/**
	 * オプションサービス契約キャンセルエラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0351C220(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0351C220CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		String prefix = "kk0351_";

		// オプションサービス契約キャンセル.オプションサービス契約番号 → オプションサービス契約番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0351C220CBSMsg.OP_SVC_KEI_NO_ERR, template, EKK0351C220CBSMsg.OP_SVC_KEI_NO_ERR);
		// オプションサービス契約キャンセル.申込明細番号 → 申込明細番号のエラー情報返却
		setErrInfo(inMap, prefix, EKK0351C220CBSMsg.MSKM_DTL_NO_ERR, template, EKK0351C220CBSMsg.MSKM_DTL_NO_ERR);
		// オプションサービス契約キャンセル.サービスキャンセル理由コード → サービスキャンセル理由コードのエラー情報返却
		setErrInfo(inMap, prefix, EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD_ERR, template, EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD_ERR);
		// オプションサービス契約キャンセル.異動区分 → 異動区分のエラー情報返却
		setErrInfo(inMap, prefix, EKK0351C220CBSMsg.IDO_DIV_ERR, template, EKK0351C220CBSMsg.IDO_DIV_ERR);
		// オプションサービス契約キャンセル.更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)のエラー情報返却
		setErrInfo(inMap, prefix, EKK0351C220CBSMsg.UPD_DTM_BF_ERR, template, EKK0351C220CBSMsg.UPD_DTM_BF_ERR);

		return param;
	}

	/**
	 * 作業マップの値を取得します。
	 * <br>
	 * @param param
	 * @param key
	 * @return 取得した値
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private Object getWorkMapValue(IRequestParameterReadWrite param, String key) throws RequestParameterException
	{
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();

		HashMap inMap = null;
		/* 作業項目情報 */
		if (workMap != null)
		{
			inMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		}
		else
		{
			inMap = null;
		}

		Object result = null;
		if (inMap != null)
		{
			result = inMap.get(key);
		}

		if ("".equals(result))
		{
			result = null;
		}

		return result;
	}

	/**
	 * 作業マップに値を設定します。
	 * <br>
	 * @param param
	 * @param key
	 * @param value
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setWorkMapValue(IRequestParameterReadWrite param, String key, Object value)
	throws RequestParameterException
	{
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();

		HashMap ccWorkMap = null;
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		ccWorkMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (ccWorkMap == null)
		{
			ccWorkMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, ccWorkMap);
		}

		ccWorkMap.put(key, value);
	}

	/**
	 * サブオプション情報を取得するか判定します。
	 * @param opMap 料金コース_オプションサービス一覧照会（料金コースコード）明細
	 * @return true：取得する、false：取得しない
	 */
	@SuppressWarnings("unchecked")
	private boolean isGetSubOption(HashMap opMap)
	{
		String opSvcCd = String.valueOf(opMap.get("kk0811_op_svc_cd"));
		sbopSvcCd = null;
		
		if (OP_SVC_CD_EMAIL.equals(opSvcCd))
		{
			sbopSvcCd = SUB_OP_SVC_CD_EMAIL;
		}
		else if (OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd))
		{
			sbopSvcCd = SUB_OP_SVC_CD_MYHOMEPAGE;
		}
		else
		{
			return false;
		}

		return true;
	}

	/**
	 * 料金コースコードに対応した料金プランコードを返します。
	 * @param pcrsCd 料金コースコード
	 * @return 料金プランコード
	 */
	private String getPplanCd(String pcrsCd)
	{
		String pplanCd = null;

		if("B01".equals(pcrsCd))
		{
			pplanCd = "PB0101";
		}
		else if("B02".equals(pcrsCd))
		{
			pplanCd = "PB0201";
		}
		else if("B76".equals(pcrsCd))
		{
			pplanCd = "PB7601";
		}

		return pplanCd;
	}

	/**
	 * オプションサービスコードに対応した料金コースコードを返します。
	 * @param opSvcCd オプションサービスコード
	 * @return 料金コースコード
	 */
	private String getPcrsCd(String opSvcCd)
	{
		String pcrsCd = null;

		if("B001".equals(opSvcCd))
		{
			pcrsCd = "B01";
		}
		else if("B002".equals(opSvcCd))
		{
			pcrsCd = "B02";
		}
		else if("B072".equals(opSvcCd))
		{
			pcrsCd = "B76";
		}

		return pcrsCd;
	}

	/**
	 * 電話オプションサービス契約登録判定処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite addTelOpSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			//オプション登録しない
			return param;
		}

		svcKeiNo = getMapValue(param, fixedText, "svc_kei_no");
		pcrsCd = getMapValue(param, fixedText, "key_pcrs_cd");

		// 料金コース_オプションサービス一覧照会（料金コースコード）
		template = editInEKK0811B001(param, fixedText); // 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
		editOutEKK0811B001(result, param, fixedText); // 下りマッピング
		if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
		{ // ステータスが単項目エラー以上であれば例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}

		ArrayList<HashMap> addOpList  = (ArrayList<HashMap>)getWorkMapValue(param, "add_op_list");
		int opMax = 0;
		if (addOpList != null)
		{
			opMax = addOpList.size();
		}
		for (int idx = 0; idx < opMax; idx++)
		{
			HashMap opMap = addOpList.get(idx);
			if (isOptionSkip(param, fixedText, opMap))
			{
				continue;
			}

			if(isGetSubOption(opMap))
			{
				// 料金コース_サブオプションサービス一覧照会
				template = editInEKK1881B001(param, fixedText); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editOutEKK1881B001(result, param, fixedText); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{
					// ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}

			// オプションサービス契約<電話>登録
			template = editInEKK0371D010(param, fixedText, idx); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEKK0371D010(result, param, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{
				// ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		
		return param;
	}

	/**
	 * オプションサービス契約キャンセル処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNoExc サービス契約番号（排他用）
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite cancelOpSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String svcKeiNoExc) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}

		this.svcKeiNo = svcKeiNoExc;

		ArrayList<HashMap> opList  = (ArrayList<HashMap>)inMap.get("op_cancel_list");
		int opMax = 0;
		if (opList != null)
		{
			opMax = opList.size();
		}
		for (int idx1 = 0; idx1 < opMax; idx1++)
		{
			HashMap opMap = opList.get(idx1);
			ArrayList<HashMap> sbopList  = (ArrayList<HashMap>)opMap.get("sbop_cancel_list");
			int sbopMax = 0;
			if (sbopList != null)
			{
				sbopMax = sbopList.size();
			}
			for (int idx2 = 0; idx2 < sbopMax; idx2++)
			{
				HashMap sbopMap = sbopList.get(idx2);

				// サブオプションサービス契約キャンセル
				template = editInEKK0401C150(param, sbopMap, fixedText); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editOutEKK0401C150(result, param, sbopMap, fixedText); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{
					// ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}

			String opSvcKeiNo = (String)opMap.get("kk0351_op_svc_kei_no");
			if (null == opSvcKeiNo || "".equals(opSvcKeiNo))
			{
				continue;
			}

			// オプションサービス契約キャンセル
			template = editInEKK0351C220(param, opMap, fixedText); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEKK0351C220(result, param, opMap, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{
				// ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		return param;
	}

	/**
	 * オプションサービス契約<ISP>登録処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNoExc サービス契約番号（排他用）
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite addOpSvcKeiISP(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String svcKeiNoExc) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}
		this.svcKeiNo = svcKeiNoExc;

		ArrayList<HashMap> opList  = (ArrayList<HashMap>)inMap.get("op_isp_add_list");
		int opMax = 0;
		if (opList != null)
		{
			opMax = opList.size();
		}
		for (int idx = 0; idx < opMax; idx++)
		{
			HashMap opMap = opList.get(idx);

			// オプションサービス契約<ISP>登録
			template = editInEKK0361D010ISP(param, opMap, fixedText); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEKK0361D010ISP(result, param, opMap, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{
				// ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
// ▽▽▽ ANK-4427-00-00 ADD START
			// サブオプションサービス契約<ISP>登録
			addSbOpSvcKeiISP(handle, param, fixedText, opMap);
// △△△ ANK-4427-00-00 ADD END
		}

		return param;
	}

	/**
	 * CAANMsgに値を設定します。<br>
	 *  @inMap内にデータが存在する場合、inMap内のデータを設定します。<br>
	 *  A上記以外の場合、setNullを呼び出します。<br>
	 * @param template 値を設定するメッセージキャリア
	 * @param setKey 設定先メッセージキャリアのキー名
	 * @param inMap ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param getKey ユーザデータ情報より取得するキー名
	 */
	private void setTemplate(CAANMsg template, String setKey, HashMap<String, Object> inMap, String prefix, String getKey)
	{
		
		if (null == inMap || null == inMap.get(prefix + getKey) || 0 == ((String)inMap.get(prefix + getKey)).length())
		{
			template.setNull(setKey);
		}
		else
		{
			template.set(setKey, (String)inMap.get(prefix + getKey));
		}
	}
	
	/**
	 * ユーザデータ情報に値を設定します。<br>
	 * 　@CAANMsgにデータが存在する場合、CAANMsgのデータを設定します。<br>
	 * 　A上記以外の場合、空文字を設定します。<br>
	 * @param dataMap 値を設定するユーザデータ情報
	 * @param prefix ユーザデータ情報に設定する際に付加するプレフィックス
	 * @param setKey ユーザデータ情報のキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアのキー名
	 */
	private void setDataMap(HashMap<String, Object> dataMap, String prefix, String setKey, CAANMsg template, String getKey)
	{
		if (template.isNull(getKey))
		{
			dataMap.put(prefix + setKey, "");
		}
		else
		{
			dataMap.put(prefix + setKey, template.getString(getKey));
		}
	}
	
	/**
	 * エラー情報を設定します。<br>
	 * @param inMap ユーザデータ情報
	 * @param prefix ユーザデータ情報に設定する際に付加するプレフィックス
	 * @param setKey ユーザデータ情報のキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアのキー名
	 */
	private void setErrInfo(HashMap<String, Object> inMap, String prefix, String setKey, CAANMsg template, String getKey)
	{
		if (!template.isNull(getKey))
		{
			if (!inMap.containsKey(prefix + setKey))
			{
				inMap.put(prefix + setKey, template.getString(getKey));
			}
		}
	}
// ▽▽▽ ANK-4427-00-00 ADD START

	/**
	 * サブオプションサービス契約<ISP>を登録する。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param opMap
	 */
	@SuppressWarnings("unchecked")
	private void addSbOpSvcKeiISP(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap opMap) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		if (opMap.containsKey("sbop_isp_add_list"))
		{
			// サブオプションを登録する
			java.util.List sbopList = (java.util.List)opMap.get("sbop_isp_add_list");
			for (Object obj : sbopList)
			{
				HashMap sbOpMap = (HashMap)obj;
				// オプションサービス契約番号
				sbOpMap.put("kk0411_op_svc_kei_no", opMap.get("kk0361_op_svc_kei_no"));
				// 申込明細番号
				sbOpMap.put("kk0411_mskm_dtl_no", opMap.get("kk0361_mskm_dtl_no"));
				// 請求契約番号
				if (JKKStringUtil.isNullEmpty(sbOpMap.get("kk0411_seiky_kei_no")))
				{
					sbOpMap.put("kk0411_seiky_kei_no", opMap.get("kk0361_seiky_kei_no"));
				}
				
				// サブオプションサービス契約<ISP>登録
				template = editInEKK0411D010ISP(param, sbOpMap, fixedText); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editOutEKK0411D010ISP(result, param, sbOpMap, fixedText); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{
					// ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}
		}
	
	}
	
	/**
	 * サブオプションサービス契約<ISP>登録上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0411D010ISP(IRequestParameterReadWrite param, HashMap inMap, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0411D010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0411D010CBSMsg.TEMPLATEID, "EKK0411D010");

		// 機能コード（デフォルト：１）
		template.set(EKK0411D010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		String prefix = "kk0411_";

		// オプションサービス契約番号	op_svc_kei_no 〇 ■
		setTemplate(template, EKK0411D010CBSMsg.OP_SVC_KEI_NO, inMap, prefix, EKK0411D010CBSMsg.OP_SVC_KEI_NO);
		// サブオプションサービスコード	sbop_svc_cd 〇
		setTemplate(template, EKK0411D010CBSMsg.SBOP_SVC_CD, inMap, prefix, EKK0411D010CBSMsg.SBOP_SVC_CD);
		// 料金コースコード	pcrs_cd 〇
		setTemplate(template, EKK0411D010CBSMsg.PCRS_CD, inMap, prefix, EKK0411D010CBSMsg.PCRS_CD);
		// 料金プランコード	pplan_cd
		setTemplate(template, EKK0411D010CBSMsg.PPLAN_CD, inMap, prefix, EKK0411D010CBSMsg.PPLAN_CD);
		// 申込明細番号	mskm_dtl_no ■
		setTemplate(template, EKK0411D010CBSMsg.MSKM_DTL_NO, inMap, prefix, EKK0411D010CBSMsg.MSKM_DTL_NO);
		// 試用加入年月日	ftrial_kanyu_ymd
		setTemplate(template, EKK0411D010CBSMsg.FTRIAL_KANYU_YMD, inMap, prefix, EKK0411D010CBSMsg.FTRIAL_KANYU_YMD);
		// 試用期間終了年月日	ftrial_prd_endymd
		setTemplate(template, EKK0411D010CBSMsg.FTRIAL_PRD_ENDYMD, inMap, prefix, EKK0411D010CBSMsg.FTRIAL_PRD_ENDYMD);
		// 本加入年月日	honkanyu_ymd
		setTemplate(template, EKK0411D010CBSMsg.HONKANYU_YMD, inMap, prefix, EKK0411D010CBSMsg.HONKANYU_YMD);
		// 本加入移行期限年月日	honkanyu_iko_kigen_ymd
		setTemplate(template, EKK0411D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, inMap, prefix, EKK0411D010CBSMsg.HONKANYU_IKO_KIGEN_YMD);
		// サービス利用開始希望年月日	svc_use_sta_kibo_ymd
		setTemplate(template, EKK0411D010CBSMsg.SVC_USE_STA_KIBO_YMD, inMap, prefix, EKK0411D010CBSMsg.SVC_USE_STA_KIBO_YMD);
		// 予約適用開始希望年月日	rsv_tsta_kibo_ymd
		setTemplate(template, EKK0411D010CBSMsg.RSV_TSTA_KIBO_YMD, inMap, prefix, EKK0411D010CBSMsg.RSV_TSTA_KIBO_YMD);
		// 違約金発生コード	pnlty_hassei_cd
		setTemplate(template, EKK0411D010CBSMsg.PNLTY_HASSEI_CD, inMap, prefix, EKK0411D010CBSMsg.PNLTY_HASSEI_CD);
		// 異動区分	ido_div 〇
		setTemplate(template, EKK0411D010CBSMsg.IDO_DIV, inMap, prefix, EKK0411D010CBSMsg.IDO_DIV);
		// 追加容量	add_capa
		setTemplate(template, EKK0411D010CBSMsg.ADD_CAPA, inMap, prefix, EKK0411D010CBSMsg.ADD_CAPA);
		// エイリアス	alias
		setTemplate(template, EKK0411D010CBSMsg.ALIAS, inMap, prefix, EKK0411D010CBSMsg.ALIAS);
		// エイリアス変更年月日	alias_chge_ymd
		setTemplate(template, EKK0411D010CBSMsg.ALIAS_CHGE_YMD, inMap, prefix, EKK0411D010CBSMsg.ALIAS_CHGE_YMD);
		// 請求契約番号	seiky_kei_no 〇■
		setTemplate(template, EKK0411D010CBSMsg.SEIKY_KEI_NO, inMap, prefix, EKK0411D010CBSMsg.SEIKY_KEI_NO);
		// 料金項目コード	prc_kmk_cd
		setTemplate(template, EKK0411D010CBSMsg.PRC_KMK_CD, inMap, prefix, EKK0411D010CBSMsg.PRC_KMK_CD);

		// 更新年月日時分秒(更新前)	upd_dtm_bf 〇
		String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, this.svcKeiNo, (String)inMap.get(prefix + EKK0361D010CBSMsg.UPD_DTM_BF));
		template.set(EKK0411D010CBSMsg.UPD_DTM_BF, lastDtm);
		
		// 端末補償申込年月日	tmcp_mskm_ymd
		setTemplate(template, EKK0411D010CBSMsg.TMCP_MSKM_YMD, inMap, prefix, EKK0411D010CBSMsg.TMCP_MSKM_YMD);
		// 端末補償申込連携年月日	tmcp_mskm_rnki_ymd
		setTemplate(template, EKK0411D010CBSMsg.TMCP_MSKM_RNKI_YMD, inMap, prefix, EKK0411D010CBSMsg.TMCP_MSKM_RNKI_YMD);
		// 端末補償キャンセル連携年月日	tmcp_cncl_rnki_ymd
		setTemplate(template, EKK0411D010CBSMsg.TMCP_CNCL_RNKI_YMD, inMap, prefix, EKK0411D010CBSMsg.TMCP_CNCL_RNKI_YMD);
		// 端末補償解約連携年月日	tmcp_dsl_rnki_ymd
		setTemplate(template, EKK0411D010CBSMsg.TMCP_DSL_RNKI_YMD, inMap, prefix, EKK0411D010CBSMsg.TMCP_DSL_RNKI_YMD);
		// 端末補償住所変更引継有無	tmcp_adchg_hktgi_um
		setTemplate(template, EKK0411D010CBSMsg.TMCP_ADCHG_HKTGI_UM, inMap, prefix, EKK0411D010CBSMsg.TMCP_ADCHG_HKTGI_UM);
		
		return template;
	}
	
	/**
	 * サブオプションサービス契約<ISP>登録エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0411D010ISP(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0411D010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		String prefix = "kk0411_";

		// オプションサービス契約番号	op_svc_kei_no 
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.OP_SVC_KEI_NO_ERR, template, EKK0411D010CBSMsg.OP_SVC_KEI_NO_ERR);
		// サブオプションサービスコード	sbop_svc_cd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.SBOP_SVC_CD_ERR, template, EKK0411D010CBSMsg.SBOP_SVC_CD_ERR);
		// 料金コースコード	pcrs_cd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.PCRS_CD_ERR, template, EKK0411D010CBSMsg.PCRS_CD_ERR);
		// 料金プランコード	pplan_cd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.PPLAN_CD_ERR, template, EKK0411D010CBSMsg.PPLAN_CD_ERR);
		// 申込明細番号	mskm_dtl_no
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.MSKM_DTL_NO_ERR, template, EKK0411D010CBSMsg.MSKM_DTL_NO_ERR);
		// 試用加入年月日	ftrial_kanyu_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.FTRIAL_KANYU_YMD_ERR, template, EKK0411D010CBSMsg.FTRIAL_KANYU_YMD_ERR);
		// 試用期間終了年月日	ftrial_prd_endymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR, template, EKK0411D010CBSMsg.FTRIAL_PRD_ENDYMD_ERR);
		// 本加入年月日	honkanyu_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.HONKANYU_YMD_ERR, template, EKK0411D010CBSMsg.HONKANYU_YMD_ERR);
		// 本加入移行期限年月日	honkanyu_iko_kigen_ymd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR, template, EKK0411D010CBSMsg.HONKANYU_IKO_KIGEN_YMD_ERR);
		// サービス利用開始希望年月日	svc_use_sta_kibo_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR, template, EKK0411D010CBSMsg.SVC_USE_STA_KIBO_YMD_ERR);
		// 予約適用開始希望年月日	rsv_tsta_kibo_ymd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR, template, EKK0411D010CBSMsg.RSV_TSTA_KIBO_YMD_ERR);
		// 違約金発生コード	pnlty_hassei_cd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.PNLTY_HASSEI_CD_ERR, template, EKK0411D010CBSMsg.PNLTY_HASSEI_CD_ERR);
		// 異動区分	ido_div
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.IDO_DIV_ERR, template, EKK0411D010CBSMsg.IDO_DIV_ERR);
		// 追加容量	add_capa
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.ADD_CAPA_ERR, template, EKK0411D010CBSMsg.ADD_CAPA_ERR);
		// エイリアス	alias
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.ALIAS_ERR, template, EKK0411D010CBSMsg.ALIAS_ERR);
		// エイリアス変更年月日	alias_chge_ymd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.ALIAS_CHGE_YMD_ERR, template, EKK0411D010CBSMsg.ALIAS_CHGE_YMD_ERR);
		// 請求契約番号	seiky_kei_no
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.SEIKY_KEI_NO_ERR, template, EKK0411D010CBSMsg.SEIKY_KEI_NO_ERR);
		// 料金項目コード	prc_kmk_cd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.PRC_KMK_CD_ERR, template, EKK0411D010CBSMsg.PRC_KMK_CD_ERR);

		// 更新年月日時分秒(更新前)	upd_dtm_bf 〇
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.UPD_DTM_BF_ERR, template, EKK0411D010CBSMsg.UPD_DTM_BF_ERR);
		
		// 端末補償申込年月日	tmcp_mskm_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.TMCP_MSKM_YMD_ERR, template, EKK0411D010CBSMsg.TMCP_MSKM_YMD_ERR);
		// 端末補償申込連携年月日	tmcp_mskm_rnki_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.TMCP_MSKM_RNKI_YMD_ERR, template, EKK0411D010CBSMsg.TMCP_MSKM_RNKI_YMD_ERR);
		// 端末補償キャンセル連携年月日	tmcp_cncl_rnki_ymd
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.TMCP_CNCL_RNKI_YMD_ERR, template, EKK0411D010CBSMsg.TMCP_CNCL_RNKI_YMD_ERR);
		// 端末補償解約連携年月日	tmcp_dsl_rnki_ymd
		setErrInfo(inMap, prefix,  EKK0411D010CBSMsg.TMCP_DSL_RNKI_YMD_ERR, template, EKK0411D010CBSMsg.TMCP_DSL_RNKI_YMD_ERR);
		// 端末補償住所変更引継有無	tmcp_adchg_hktgi_um
		setErrInfo(inMap, prefix, EKK0411D010CBSMsg.TMCP_ADCHG_HKTGI_UM_ERR, template, EKK0411D010CBSMsg.TMCP_ADCHG_HKTGI_UM_ERR);

		return param;
	}
	
	/**
	 * サブオプションサービス契約<ISP>登録下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0411D010ISP(Map<?, ?> msgList, 	IRequestParameterReadWrite param, HashMap dataMap, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		String prefix = "kk0411_";

		// サブオプションサービス契約番号 ← オプションサービス契約＜ISP＞登録.サブオプションサービス契約番号
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.SBOP_SVC_KEI_NO, template, EKK0411D010CBSMsg.SBOP_SVC_KEI_NO);
		// 世代登録年月日時分秒(サブオプションサービス契約) ← オプションサービス契約＜ISP＞登録.世代登録年月日時分秒(サブオプションサービス契約)                
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.KK0401_GENE_ADD_DTM, template, EKK0411D010CBSMsg.KK0401_GENE_ADD_DTM);
		// サブオプションサービス契約ステータス ← オプションサービス契約＜ISP＞登録.サブオプションサービス契約ステータス
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.SBOP_SVC_KEI_STAT, template, EKK0411D010CBSMsg.SBOP_SVC_KEI_STAT);
		// 予約適用年月日 ← オプションサービス契約＜ISP＞登録.予約適用年月日
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.RSV_APLY_YMD, template, EKK0411D010CBSMsg.RSV_APLY_YMD);
		// 予約適用コード ← オプションサービス契約＜ISP＞登録.予約適用コード
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.RSV_APLY_CD, template, EKK0411D010CBSMsg.RSV_APLY_CD);
		// 登録年月日時分秒 ← オプションサービス契約＜ISP＞登録.登録年月日時分秒
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.ADD_DTM, template, EKK0411D010CBSMsg.ADD_DTM);
		// 登録オペレータアカウント ← オプションサービス契約＜ISP＞登録.登録オペレータアカウント
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.ADD_OPEACNT, template, EKK0411D010CBSMsg.ADD_OPEACNT);
		// 更新年月日時分秒 ← オプションサービス契約＜ISP＞登録.更新年月日時分秒
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.UPD_DTM, template, EKK0411D010CBSMsg.UPD_DTM);
		// 更新オペレータアカウント ← オプションサービス契約＜ISP＞登録.更新オペレータアカウント
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.UPD_OPEACNT, template, EKK0411D010CBSMsg.UPD_OPEACNT);
		// 無効フラグ ← オプションサービス契約＜ISP＞登録.無効フラグ
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.MK_FLG, template, EKK0411D010CBSMsg.MK_FLG);
		// 課金先番号 ← オプションサービス契約＜ISP＞登録.課金先番号
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.KAKINS_NO, template, EKK0411D010CBSMsg.KAKINS_NO);
		// 課金先適用開始年月日 ← オプションサービス契約＜ISP＞登録.課金先適用開始年月日
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.KAKINS_TSTAYMD, template, EKK0411D010CBSMsg.KAKINS_TSTAYMD);
		// 課金先適用終了年月日 ← オプションサービス契約＜ISP＞登録.課金先適用終了年月日
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.KAKINS_TENDYMD, template, EKK0411D010CBSMsg.KAKINS_TENDYMD);
		// 更新年月日時分秒（サブオプションサービス契約） ← オプションサービス契約＜ISP＞登録.更新年月日時分秒（サブオプションサービス契約）
		setDataMap(dataMap, prefix, EKK0411D010CBSMsg.UPD_DTM, template, EKK0411D010CBSMsg.UPD_DTM);
		JKKBpCommon.setLastDtmBySvcKeiNo(param, this.svcKeiNo, template.getString(EKK0411D010CBSMsg.UPD_DTM));
		
		// エラー情報の設定
		editErrInfoEKK0411D010ISP(param, template, (Integer)returnCode, dataMap, 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));

		return param;
	}
	
	// オプション更新
	
	
	/**
	 * オプションサービス契約＜ISP＞情報変更上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0361C050ISP(IRequestParameterReadWrite param, HashMap inMap, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361C050CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0361C050CBSMsg.TEMPLATEID, "EKK0361C050");

		// 機能コード（デフォルト：１）
		template.set(EKK0361C050CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		String prefix = "kk0361_";

		// オプションサービス契約番号	op_svc_kei_no
		setTemplate(template, EKK0361C050CBSMsg.OP_SVC_KEI_NO, inMap, prefix, EKK0361C050CBSMsg.OP_SVC_KEI_NO);
		// 申込明細番号	mskm_dtl_no
		setTemplate(template, EKK0361C050CBSMsg.MSKM_DTL_NO, inMap, prefix, EKK0361C050CBSMsg.MSKM_DTL_NO);
		// 異動区分	ido_div
		setTemplate(template, EKK0361C050CBSMsg.IDO_DIV, inMap, prefix, EKK0361C050CBSMsg.IDO_DIV);
		// 更新年月日時分秒(更新前)	upd_dtm_bf
		String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, this.svcKeiNo, (String)inMap.get(prefix + EKK0361D010CBSMsg.UPD_DTM_BF));
		template.set(EKK0361C050CBSMsg.UPD_DTM_BF, lastDtm);

		// typeN電話番号	typen_telno
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_TELNO, inMap, prefix, EKK0361C050CBSMsg.TYPEN_TELNO);
		// typeN番ポ種別	typen_bmp_sbt
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_BMP_SBT, inMap, prefix, EKK0361C050CBSMsg.TYPEN_BMP_SBT);
		// typeN契約者名	typen_keisha_nm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_KEISHA_NM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_KEISHA_NM);
		// typeN住所コード	typen_ad_cd
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_AD_CD, inMap, prefix, EKK0361C050CBSMsg.TYPEN_AD_CD);
		// typeN郵便番号	typen_pcd
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_PCD, inMap, prefix, EKK0361C050CBSMsg.TYPEN_PCD);
		// typeN都道府県名	typen_state_nm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_STATE_NM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_STATE_NM);
		// typeN市区町村名	typen_city_nm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_CITY_NM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_CITY_NM);
		// typeN大字通称名	typen_oaztsu_nm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_OAZTSU_NM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_OAZTSU_NM);
		// typeN字丁目名	typen_azcho_nm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_AZCHO_NM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_AZCHO_NM);
		// typeN番地号	typen_bnchigo
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_BNCHIGO, inMap, prefix, EKK0361C050CBSMsg.TYPEN_BNCHIGO);
		// typeN住所補記・建物名	typen_adrttm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_ADRTTM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_ADRTTM);
		// typeN住所補記・部屋番号	typen_adrrm
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_ADRRM, inMap, prefix, EKK0361C050CBSMsg.TYPEN_ADRRM);
		// typeN住所手動入力フラグ	typen_ad_man_input_flg
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_AD_MAN_INPUT_FLG, inMap, prefix, EKK0361C050CBSMsg.TYPEN_AD_MAN_INPUT_FLG);
		// typeN電話加入権取扱コード	typen_tel_knkn_trat_cd
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_TEL_KNKN_TRAT_CD, inMap, prefix, EKK0361C050CBSMsg.TYPEN_TEL_KNKN_TRAT_CD);
		// typeN電話番号種別コード	typen_telno_sbt_cd
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_TELNO_SBT_CD, inMap, prefix, EKK0361C050CBSMsg.TYPEN_TELNO_SBT_CD);
// ANK-4640-00-00 ADD START
		// typeN通信事業者コード	typen_tsjgs_cd
		setTemplate(template, EKK0361C050CBSMsg.TYPEN_TSJGS_CD, inMap, prefix, EKK0361C050CBSMsg.TYPEN_TSJGS_CD);
// ANK-4640-00-00 ADD END
		
		return template;
	}
	
	/**
	 * オプションサービス契約＜ISP＞情報変更エラー情報マッピング処理
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0361C050ISP(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String fixedText) throws RequestParameterException
	{
		int templateStatus = template.getInt(EKK0361C050CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, 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)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		String prefix = "kk0361_";

		// オプションサービス契約番号	op_svc_kei_no
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.OP_SVC_KEI_NO_ERR, template, EKK0361C050CBSMsg.OP_SVC_KEI_NO_ERR);
		// 申込明細番号	mskm_dtl_no
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.MSKM_DTL_NO_ERR, template, EKK0361C050CBSMsg.MSKM_DTL_NO_ERR);
		// 異動区分	ido_div
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.IDO_DIV_ERR, template, EKK0361C050CBSMsg.IDO_DIV_ERR);
		// 更新年月日時分秒(更新前)	upd_dtm_bf
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.UPD_DTM_BF_ERR, template, EKK0361C050CBSMsg.UPD_DTM_BF_ERR);

		// typeN電話番号	typen_telno
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_TELNO_ERR, template, EKK0361C050CBSMsg.TYPEN_TELNO_ERR);
		// typeN番ポ種別	typen_bmp_sbt
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_BMP_SBT_ERR, template, EKK0361C050CBSMsg.TYPEN_BMP_SBT_ERR);
		// typeN契約者名	typen_keisha_nm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_KEISHA_NM_ERR, template, EKK0361C050CBSMsg.TYPEN_KEISHA_NM_ERR);
		// typeN住所コード	typen_ad_cd
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_AD_CD_ERR, template, EKK0361C050CBSMsg.TYPEN_AD_CD_ERR);
		// typeN郵便番号	typen_pcd
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_PCD_ERR, template, EKK0361C050CBSMsg.TYPEN_PCD_ERR);
		// typeN都道府県名	typen_state_nm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_STATE_NM_ERR, template, EKK0361C050CBSMsg.TYPEN_STATE_NM_ERR);
		// typeN市区町村名	typen_city_nm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_CITY_NM_ERR, template, EKK0361C050CBSMsg.TYPEN_CITY_NM_ERR);
		// typeN大字通称名	typen_oaztsu_nm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_OAZTSU_NM_ERR, template, EKK0361C050CBSMsg.TYPEN_OAZTSU_NM_ERR);
		// typeN字丁目名	typen_azcho_nm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_AZCHO_NM_ERR, template, EKK0361C050CBSMsg.TYPEN_AZCHO_NM_ERR);
		// typeN番地号	typen_bnchigo
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_BNCHIGO_ERR, template, EKK0361C050CBSMsg.TYPEN_BNCHIGO_ERR);
		// typeN住所補記・建物名	typen_adrttm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_ADRTTM_ERR, template, EKK0361C050CBSMsg.TYPEN_ADRTTM_ERR);
		// typeN住所補記・部屋番号	typen_adrrm
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_ADRRM_ERR, template, EKK0361C050CBSMsg.TYPEN_ADRRM_ERR);
		// typeN住所手動入力フラグ	typen_ad_man_input_flg
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_AD_MAN_INPUT_FLG_ERR, template, EKK0361C050CBSMsg.TYPEN_AD_MAN_INPUT_FLG_ERR);
		// typeN電話加入権取扱コード	typen_tel_knkn_trat_cd
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_TEL_KNKN_TRAT_CD_ERR, template, EKK0361C050CBSMsg.TYPEN_TEL_KNKN_TRAT_CD_ERR);
		// typeN電話番号種別コード	typen_telno_sbt_cd
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_TELNO_SBT_CD_ERR, template, EKK0361C050CBSMsg.TYPEN_TELNO_SBT_CD_ERR);
// ANK-4640-00-00 ADD START
		// typeN通信事業者コード	typen_tsjgs_cd
		setErrInfo(inMap, prefix, EKK0361C050CBSMsg.TYPEN_TSJGS_CD_ERR, template, EKK0361C050CBSMsg.TYPEN_TSJGS_CD_ERR);
// ANK-4640-00-00 ADD END

		return param;
	}
	
	/**
	 * オプションサービス契約＜ISP＞情報変更下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEKK0361C050ISP(Map<?, ?> msgList, 	IRequestParameterReadWrite param, HashMap dataMap, String fixedText)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		String prefix = "kk0361_";

		// 世代登録年月日時分秒(オプションサービス契約)	kk0351_gene_add_dtm
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.KK0351_GENE_ADD_DTM, template, EKK0361C050CBSMsg.KK0351_GENE_ADD_DTM);
		// 予約適用年月日	rsv_aply_ymd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.RSV_APLY_YMD, template, EKK0361C050CBSMsg.RSV_APLY_YMD);
		// 予約適用コード	rsv_aply_cd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.RSV_APLY_CD, template, EKK0361C050CBSMsg.RSV_APLY_CD);
		// 登録年月日時分秒	add_dtm
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.ADD_DTM, template, EKK0361C050CBSMsg.ADD_DTM);
		// 登録オペレータアカウント	add_opeacnt
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.ADD_OPEACNT, template, EKK0361C050CBSMsg.ADD_OPEACNT);
		// 更新年月日時分秒	upd_dtm
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.UPD_DTM, template, EKK0361C050CBSMsg.UPD_DTM);
		// 更新オペレータアカウント	upd_opeacnt
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.UPD_OPEACNT, template, EKK0361C050CBSMsg.UPD_OPEACNT);
		// 無効フラグ	mk_flg
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.MK_FLG, template, EKK0361C050CBSMsg.MK_FLG);
		// 世代登録年月日時分秒(オプションサービス契約＜ISP＞)	kk0361_gene_add_dtm
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.KK0361_GENE_ADD_DTM, template, EKK0361C050CBSMsg.KK0361_GENE_ADD_DTM);
		// プラン開始年月日	plan_staymd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.PLAN_STAYMD, template, EKK0361C050CBSMsg.PLAN_STAYMD);
		// プラン終了年月日	plan_endymd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.PLAN_ENDYMD, template, EKK0361C050CBSMsg.PLAN_ENDYMD);
		// プラン課金開始年月日	plan_chrg_staymd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.PLAN_CHRG_STAYMD, template, EKK0361C050CBSMsg.PLAN_CHRG_STAYMD);
		// プラン課金終了年月日	plan_chrg_endymd
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.PLAN_CHRG_ENDYMD, template, EKK0361C050CBSMsg.PLAN_CHRG_ENDYMD);
		
		// 更新年月日時分秒	upd_dtm
		setDataMap(dataMap, prefix, EKK0361C050CBSMsg.UPD_DTM, template, EKK0361C050CBSMsg.UPD_DTM);
		JKKBpCommon.setLastDtmBySvcKeiNo(param, this.svcKeiNo, template.getString(EKK0361C050CBSMsg.UPD_DTM));
		
		// エラー情報の設定
		editErrInfoEKK0361C050ISP(param, template, (Integer)returnCode, dataMap, 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));

		return param;
	}
	
	/**
	 * オプションサービス契約<ISP>登録処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNoExc サービス契約番号（排他用）
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updOpSvcKeiISP(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String svcKeiNoExc) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}
		this.svcKeiNo = svcKeiNoExc;

		ArrayList<HashMap> opList  = (ArrayList<HashMap>)inMap.get("op_isp_upd_list");
		int opMax = 0;
		if (opList != null)
		{
			opMax = opList.size();
		}
		for (int idx = 0; idx < opMax; idx++)
		{
			HashMap opMap = opList.get(idx);

			// オプションサービス契約<ISP>登録
			template = editInEKK0361C050ISP(param, opMap, fixedText); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEKK0361C050ISP(result, param, opMap, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{
				// ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
			// サブオプションサービス契約<ISP>登録
			addSbOpSvcKeiISP(handle, param, fixedText, opMap);
		}

		return param;
	}

// ANK-4427-00-00 ADD END
}