/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKClarisAgingStatUpdCC
*   ソースファイル名：JKKClarisAgingStatUpdCC.java
*   作成者          ：富士通
*   日付            ：2018年11月20日
*＜機能概要＞
*   Clarisエイジングステータス更新コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v39.00.00   2018/11/20   FJ）吉田    新規作成
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.ErrorInfoMapKeys;
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 com.fujitsu.futurity.model.common.check.DatetimeCheck;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.MixCharCheck;

import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361B007CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361B007CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0111C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;

public class JKKClarisAgingStatUpdCC extends AbstractCommonComponent
{
	/** CC名:Clarisエイジングステータス更新 */
	private static final String CC_NAME = "JKKClarisAgingStatUpdCC";
	
	/******************
	 * リクエスト項目
	 ******************/
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** エイジング種別コード */
	private static final String AGING_SBT_CD = "aging_sbt_cd";
	/** 引継元エイジング対象値	 */
	private static final String MOTO_AGING_TG_VALUE = "moto_aging_tg_value";
	/** 引継先エイジング対象値 */
	private static final String SAKI_AGING_TG_VALUE = "saki_aging_tg_value";
	/** 変更依頼年月日時分秒 */
	private static final String CNG_REQ_DTM = "cng_req_dtm";
	
	/******************
	 * 定数
	 ******************/
	/** コード値:CD00412(エイジング種別コード) */
	private static final String CD00412_AGING_SBT_CD = "CD00412";
	
	/** エイジング種別コード:002(固定IPアドレス) */
	private static final String AGING_SBT_CD_002 = "002";
	
	/** エイジングステータス:100(使用中) */
	private static final String AGING_STAT_100 = "100";
	/** エイジングステータス:200(回復可能) */
	private static final String AGING_STAT_200 = "200";
	
	/** オプションサービス契約ステータス:910(解約済) */
	private static final String OP_SVC_KEI_STAT_910 =  "910";
	/** オプションサービス契約ステータス:920(キャンセル済) */
	private static final String OP_SVC_KEI_STAT_920 =  "920";
	
	/******************
	 * 作業マップ用定数
	 ******************/
	/** 作業マップ.Clarisエイジングステータス更新作業マップ */
	private static final String CC_WORK_AREA_CLARIS_AGING_STAT_UPD = "ClarisAgingStatUpdCC";
	/** 作業マップ.オプションサービス契約更新キー情報 */
	private static final String CC_UPD_KEY_OP_SVC_KEI_NO = "upd_key_op_svc_kei_no";
	/** 作業マップ.エイジング更新キー情報 */
	private static final String CC_UPD_KEY_AGING_NO = "upd_key_aging_no";
	/** 作業マップ.エイジング削除キー情報 */
	private static final String CC_DEL_KEY_AGING_NO = "del_key_aging_no";
	/** 作業マップ.キー情報：最終更新年月日時分秒 */
	private static final String CC_UPD_OP_SVC_KEI_LAST_UPD_DTM = "upd_op_svc_kei_last_upd_dtm";
	/** 作業マップ.エイジング更新キー情報 */
	private static final String CC_UPD_AGING_LAST_UPD_DTM = "upd_aging_last_upd_dtm";
	/** 作業マップ.エイジング削除キー情報 */
	private static final String CC_DEL_AGING_LAST_UPD_DTM = "del_aging_last_upd_dtm";
	
	/** 作業マップ.コード名称管理一意照会 */
	private static final String CC_EZM0171A010CBSMSG1LIST = "ezm0171a010cbsmsg1list";
	/** 作業マップ.元エイジング一覧照会(エイジング対象値) */
	private static final String CC_MOTO_EZM0111B030CBSMSG1LIST = "moto_ezm0111b030cbsmsg1list";
	/** 作業マップ.先エイジング一覧照会(エイジング対象値) */
	private static final String CC_SAKI_EZM0111B030CBSMSG1LIST = "saki_ezm0111b030cbsmsg1list";
	/** 作業マップ.元オプションサービス契約ISP一覧照会(固定IPアドレス) */
	private static final String CC_MOTO_EKK0361B007CBSMSG1LIST = "moto_ekk0361b007cbsmsg1list";
	/** 作業マップ.先オプションサービス契約ISP一覧照会(固定IPアドレス) */
	private static final String CC_SAKI_EKK0361B007CBSMSG1LIST = "saki_ekk0361b007cbsmsg1list";
	/** 作業マップ.元オプションサービス契約一意照会 */
	private static final String CC_MOTO_EKK0351A010CBSMSG1LIST = "moto_ekk0351a010cbsmsg1list";
	/** 作業マップ.先オプションサービス契約一意照会 */
	private static final String CC_SAKI_EKK0351A010CBSMSG1LIST = "saki_ekk0351a010cbsmsg1list";
	/** 作業マップ.更新用データ(オプションサービス契約一意照会) */
	private static final String CC_UPD_DATA_EKK0351A010CBSMSG1LIST = "upd_data_ekk0351a010cbsmsg1list";
	/** 作業マップ.更新用データ(オプションサービス契約ISP一意照会) */
	private static final String CC_UPD_DATA_EKK0361A010CBSMSG1LIST = "upd_data_ekk0361a010cbsmsg1list";
	
	/******************
	 * エラー用定数
	 ******************/
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** リターンコード(正常)  */
	private static final int RETURN_CODE_NORMAL = 0;
	
	/** エラー固定文字列：E1 */
	private static final String E1_ERR = "E1";
	/** エラー固定文字列：E2 */
	private static final String E2_ERR = "E2";
	/** エラー固定文字列：E3 */
	private static final String E3_ERR = "E3";
	/** エラー固定文字列：E4 */
	private static final String E4_ERR = "E4";
	/** エラー固定文字列：E5 */
	private static final String E5_ERR = "E5";
	/** エラー固定文字列：E6 */
	private static final String E6_ERR = "E6";
	/** エラー固定文字列：E7 */
	private static final String E7_ERR = "E7";
	/** エラー固定文字列：E8 */
	private static final String E8_ERR = "E8";
	/** エラー項目文字列 */
	private static final String STR_ERR = "_err";
	
	/** エラー用 */
	private static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	
	/******************
	 * tamplateID
	 ******************/
	/** コード名称管理一意照会 */
	private static final String TAMPLATE_ID_EZM0171A010 = "EZM0171A010";
	/** エイジング一覧照会(エイジング対象値) */
	private static final String TAMPLATE_ID_EZM0111B030 = "EZM0111B030";
	/** オプションサービス契約ISP一覧照会(固定IPアドレス) */
	private static final String TAMPLATE_ID_EKK0361B007 = "EKK0361B007";
	/** オプションサービス契約一意照会 */
	private static final String TAMPLATE_ID_EKK0351A010 = "EKK0351A010";
	/** オプションサービス契約ISP一意照会 */
	private static final String TAMPLATE_ID_EKK0361A010 = "EKK0361A010";
	/** エイジング削除 */
	private static final String TAMPLATE_ID_EZM0111E010 = "EZM0111E010";
	/** エイジング対象回復 */
	private static final String TAMPLATE_ID_EZM0111C020 = "EZM0111C020";
	/** オプションサービス契約＜ISP＞情報変更 */
	private static final String TAMPLATE_ID_EKK0361C050 = "EKK0361C050";
	
	/******************
	 * 配列定数
	 ******************/
	/** 処理対象エイジング種別コード */
	private static final String[] TARGET_AGING_SBT_CD = {
		AGING_SBT_CD_002
	};
	
	
	/**
	 * Clarisエイジングステータス更新処理を行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updClarisAgingStat(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}
		
		// 機能コードの空白トリミング(データ受信時になぜかスペースが入るため)
		inMap.put(FUNC_CODE, trimBlank((String)inMap.get(FUNC_CODE)));
		
		// 各種エラーチェック
		if (!errCheck(handle, param, fixedText, inMap))
		{
			return param;
		}
		
		// エイジング種別コードが"002"(固定IPアドレス)の場合
		if (AGING_SBT_CD_002.equals(inMap.get(AGING_SBT_CD)))
		{
			// 固定IP連携処理を実行する
			execKoteiIpAdRnki(handle, param, fixedText);
			
			// 変更依頼年月日時分秒が空であれば、現在日時を返却する
			if (inMap.get(CNG_REQ_DTM) == null || "".equals(inMap.get(CNG_REQ_DTM)))
			{
				String opedate = (String)param.getControlMapData(SCControlMapKeys.OPE_TIME);
				inMap.put(CNG_REQ_DTM, opedate);
			}
		}
		
		return param;
	}
	
	/**
	 * 各種エラーチェックを行います。
	 * <br>
	 * ＜チェック内容＞<br>
	 * 	・単項目エラーチェック<br>
	 * 	・単項目関連エラーチェック<br>
	 * 	・関連エラーチェック<br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 * @throws Exception 
	 */
	private boolean errCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> inMap) throws Exception
	{
		// 単項目チェック
		if (!checkTankoumoku(param, inMap))
		{
			//単項目チェックエラーが発生した場合処理を終了
			return false;
		}
		// 単項目関連チェック
		if (!checkTankoumokuKanren(param, inMap))
		{
			//単項目関連チェックエラーが発生した場合処理を終了
			return false;
		}
		// 関連チェック
		if (!checkKanren(handle, param, fixedText, inMap))
		{
			//関連チェックエラーが発生した場合処理を終了
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目エラーチェックを行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 */
	private boolean checkTankoumoku(IRequestParameterReadWrite param, HashMap<String, Object> inMap)
	{
		// 必須チェック
		if (!hissuCheck(param, inMap))
		{
			return false;
		}
		// 属性チェック
		if (!zokuCheck(param, inMap))
		{
			return false;
		}
		// 桁数チェック
		if (!digitnoCheck(param, inMap))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目エラーチェック：必須チェックを行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 */
	private boolean hissuCheck(IRequestParameterReadWrite param, HashMap<String, Object> inMap)
	{
		// エラーフラグ
		boolean errExists = false;
		// エラーリスト
		ArrayList<Object> errList = new ArrayList<Object>();
		// エラーマップ
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		// エラーマップリスト
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		
		// ********************
		// エラーチェック
		// ********************
		// エイジング種別コード
		if (!checkNotNull(inMap, AGING_SBT_CD))
		{
			setError(inMap, AGING_SBT_CD, errorMapChild, E1_ERR);
			errExists = true;
		}
		// 引継元エイジング対象値
		if (!checkNotNull(inMap, MOTO_AGING_TG_VALUE))
		{
			setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E1_ERR);
			errExists = true;
		}
		// 引継先エイジング対象値
		if (!checkNotNull(inMap, SAKI_AGING_TG_VALUE))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E1_ERR);
			errExists = true;
		}
		
		
		// ********************
		// エラーメッセージ
		// ********************
		// エラーが存在する場合はエラー値を設定
		if (errExists)
		{
			setErrorMessage(param, errorMap, errorMapChild, errList, JPCModelConstant.SINGLEDATA_ERR);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目エラーチェック：属性チェックを行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 */
	private boolean zokuCheck(IRequestParameterReadWrite param, HashMap<String, Object> inMap)
	{
		// エラーフラグ
		boolean errExists = false;
		// エラーリスト
		ArrayList<Object> errList = new ArrayList<Object>();
		// エラーマップ
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		// エラーマップリスト
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		
		// ********************
		// エラーチェック
		// ********************
		// エイジング種別コード:半角英数字1
		if (!HalfCharCheck.isEnNumber1Check((String)inMap.get(AGING_SBT_CD)))
		{
			setError(inMap, AGING_SBT_CD, errorMapChild, E2_ERR);
			errExists = true;
		}
		// 引継元エイジング対象値:MIX2
		if (!MixCharCheck.isMix2Check((String)inMap.get(MOTO_AGING_TG_VALUE)))
		{
			setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E2_ERR);
			errExists = true;
		}
		// 引継先エイジング対象値:MIX2
		if (!MixCharCheck.isMix2Check((String)inMap.get(SAKI_AGING_TG_VALUE)))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E2_ERR);
			errExists = true;
		}
		// 変更依頼年月日時分秒は必須ではないため、入力されていればチェックを行う。
		if (!JKKStringUtil.isNullBlank((String)inMap.get(CNG_REQ_DTM)))
		{
			
			if (!DatetimeCheck.isDatetimeCheck((String)inMap.get(CNG_REQ_DTM)))
			{
				setError(inMap, CNG_REQ_DTM, errorMapChild, E2_ERR);
				errExists = true;
			}
		}
		
		// ********************
		// エラーメッセージ
		// ********************
		// エラーが存在する場合はエラー値を設定
		if (errExists)
		{
			setErrorMessage(param, errorMap, errorMapChild, errList, JPCModelConstant.SINGLEDATA_ERR);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目エラーチェック：桁数チェックを行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 */
	private boolean digitnoCheck(IRequestParameterReadWrite param, HashMap<String, Object> inMap)
	{
		// エラーフラグ
		boolean errExists = false;
		// エラーリスト
		ArrayList<Object> errList = new ArrayList<Object>();
		// エラーマップ
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		// エラーマップリスト
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		
		// ********************
		// エラーチェック
		// ********************
		// エイジング種別コード:MIN=3 MAX=3
		if (!checkLength(inMap, errorMapChild, AGING_SBT_CD, 3, 3))
		{
			setError(inMap, AGING_SBT_CD, errorMapChild, E3_ERR);
			errExists = true;
		}
		// 引継元エイジング対象値:MIN=1 MAX=256
		if (!checkLength(inMap, errorMapChild, MOTO_AGING_TG_VALUE, 1, 256))
		{
			setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E3_ERR);
			errExists = true;
		}
		// 引継先エイジング対象値:MIN=1 MAX=256
		if (!checkLength(inMap, errorMapChild, SAKI_AGING_TG_VALUE, 1, 256))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E3_ERR);
			errExists = true;
		}
		// 変更依頼年月日時分秒は必須ではないため、入力されていればチェックを行う。
		if (!JKKStringUtil.isNullBlank((String)inMap.get(CNG_REQ_DTM)))
		{
			// 変更依頼年月日時分秒:MIN=17 MAX=17
			if (!checkLength(inMap, errorMapChild, CNG_REQ_DTM, 17, 17))
			{
				setError(inMap, CNG_REQ_DTM, errorMapChild, E3_ERR);
				errExists = true;
			}
			
		}
		
		
		// ********************
		// エラーメッセージ
		// ********************
		// エラーが存在する場合はエラー値を設定
		if (errExists)
		{
			setErrorMessage(param, errorMap, errorMapChild, errList, JPCModelConstant.SINGLEDATA_ERR);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目関連エラーチェックを行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラー無し false:エラー有り
	 */
	private boolean checkTankoumokuKanren(IRequestParameterReadWrite param, HashMap<String, Object> inMap)
	{
		// エラーフラグ
		boolean errExists = false;
		// エラーリスト
		ArrayList<Object> errList = new ArrayList<Object>();
		// エラーマップ
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		// エラーマップリスト
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		
		// ********************
		// エラーチェック
		// ********************
		// エイジング種別コード
		if (!Arrays.asList(TARGET_AGING_SBT_CD).contains(inMap.get(AGING_SBT_CD)))
		{
			setError(inMap, AGING_SBT_CD, errorMapChild, E1_ERR);
			errExists = true;
		}
		
		
		// ********************
		// エラーメッセージ
		// ********************
		// エラーが存在する場合はエラー値を設定
		if (errExists)
		{
			setErrorMessage(param, errorMap, errorMapChild, errList, JPCModelConstant.ITEM_RELATION_ERR);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 関連エラーチェックを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param inMap ユーザーデータ情報
	 * @return true:エラーなし false:エラーあり
	 * @throws Exception
	 */
	private boolean checkKanren(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> inMap) throws Exception
	{
		// エラーフラグ
		boolean errExists = false;
		// エラーリスト
		ArrayList<Object> errList = new ArrayList<Object>();
		// エラーマップ
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		// エラーマップリスト
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		
		// ********************
		// エラーチェック
		// ********************
		// エイジング種別コード:CD00412
		callEZM0171A010(handle, param, fixedText, CC_EZM0171A010CBSMSG1LIST);
		if (!checkExistData(param, CC_EZM0171A010CBSMSG1LIST))
		{
			setError(inMap, AGING_SBT_CD, errorMapChild, E1_ERR);
			errExists= true;
		}
		//エイジング種別コードが"002"(固定IPアドレス)の場合
		if (AGING_SBT_CD_002.equals(inMap.get(AGING_SBT_CD)))
		{
			// 引継元エイジング対象値
			if (!checkKanrenMotoAgingTgValue(handle, param, fixedText, inMap, errorMapChild))
			{
				errExists= true;
			}
			// 引継先エイジング対象値
			if (!checkKanrenSakiAgingTgValue(handle, param, fixedText, inMap, errorMapChild))
			{
				errExists= true;
			}
		}
		
		// ********************
		// エラーメッセージ
		// ********************
		// エラーが存在する場合はエラー値を設定
		if (errExists)
		{
			setErrorMessage(param, errorMap, errorMapChild, errList, JPCModelConstant.RELATION_ERR);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 固定IPアドレス連携処理を行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execKoteiIpAdRnki(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 作業領域の取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = getClarisWorkMap(workMap);
		
		// ***************************
		// 更新・削除キー項目チェック
		// ***************************
		// 以降の処理に必要なキー項目が全て揃っていれば更新/削除を行う
		// エイジング削除用キー項目
		if ((String)clarisWorkMap.get(CC_DEL_KEY_AGING_NO) == null || "".equals((String)clarisWorkMap.get(CC_DEL_KEY_AGING_NO)))
		{
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		// エイジング対象回復用キー項目
		if ((String)clarisWorkMap.get(CC_UPD_KEY_AGING_NO) == null || "".equals((String)clarisWorkMap.get(CC_UPD_KEY_AGING_NO)))
		{
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		// オプションサービス契約更新用キー項目
		if ((String)clarisWorkMap.get(CC_UPD_KEY_OP_SVC_KEI_NO) == null || "".equals((String)clarisWorkMap.get(CC_UPD_KEY_OP_SVC_KEI_NO)))
		{
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		// 更新用データ(オプションサービス契約)
		callEKK0351A010(handle, param, fixedText, (String)clarisWorkMap.get(CC_UPD_KEY_OP_SVC_KEI_NO), CC_UPD_DATA_EKK0351A010CBSMSG1LIST);
		
		// 更新用データ(オプションサービス契約ISP)
		callEKK0361A010(handle, param, fixedText, (String)clarisWorkMap.get(CC_UPD_KEY_OP_SVC_KEI_NO), CC_UPD_DATA_EKK0361A010CBSMSG1LIST);
		
		// ********************************************************
		// エイジング削除
		// ********************************************************
		callEZM0111E010(handle, param, fixedText);
		
		// ********************************************************
		// エイジング対象回復
		// ********************************************************
		callEZM0111C020(handle, param, fixedText);
		
		// ********************************************************
		// オプションサービス契約＜ISP＞情報変更
		// ********************************************************
		callEKK0361C050(handle, param, fixedText);
	}
	
	/**
	 * 引継元エイジング対象値の関連チェックを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param inMap ユーザーデータ情報
	 * @param errorMapChild エラーマップリスト
	 * @return true:エラーなし false:エラーあり
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean checkKanrenMotoAgingTgValue(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> inMap, HashMap<String, String> errorMapChild) throws Exception
	{
		// 作業領域の取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = getClarisWorkMap(workMap);
		
		
		// ********************************************************
		// エイジング一覧照会(エイジング対象値)
		// ********************************************************
		callEZM0111B030(handle, param, fixedText, (String)inMap.get(MOTO_AGING_TG_VALUE), CC_MOTO_EZM0111B030CBSMSG1LIST);
		
		// エイジングデータが存在しない場合、エラーを返却する
		if (!checkExistData(param, CC_MOTO_EZM0111B030CBSMSG1LIST))
		{
			setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E2_ERR);
			return false;
		}
		
		CAANMsg agingMap = ((CAANMsg[])clarisWorkMap.get(CC_MOTO_EZM0111B030CBSMSG1LIST))[0];
		String agingStat = agingMap.getString(EZM0111B030CBSMsg1List.AGING_STAT);
		// エイジングステータスが対象のものではない場合、エラーを返却する
		if (!AGING_STAT_100.equals(agingStat))
		{
			setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E3_ERR);
			return false;
		}
		
		// エイジングスキーマ削除キー
		String agingDelKey = agingMap.getString(EZM0111B030CBSMsg1List.AGING_NO);
		clarisWorkMap.put(CC_DEL_KEY_AGING_NO, agingDelKey);
		clarisWorkMap.put(CC_DEL_AGING_LAST_UPD_DTM, agingMap.getString(EZM0111B030CBSMsg1List.UPD_DTM));
		
		// ********************************************************
		// オプションサービス契約ISP一覧照会(固定IPアドレス)
		// ********************************************************
		callEKK0361B007(handle, param, fixedText, (String)inMap.get(MOTO_AGING_TG_VALUE), CC_MOTO_EKK0361B007CBSMSG1LIST);

		// オプションサービス契約ISPデータが存在しない場合、以降の処理を行わない
		if (!checkExistData(param, CC_MOTO_EKK0361B007CBSMSG1LIST))
		{
			return true;
		}
		
		// オプションサービス契約ISP一覧照会(固定IPアドレス)での取得件数分チェックする
		for (int i = 0; i < ((CAANMsg[])clarisWorkMap.get(CC_MOTO_EKK0361B007CBSMSG1LIST)).length; i++)
		{
			CAANMsg opSvcKeiIspMap = ((CAANMsg[])clarisWorkMap.get(CC_MOTO_EKK0361B007CBSMSG1LIST))[i];
			
			String opSvcKeiNo = opSvcKeiIspMap.getString(EKK0361B007CBSMsg1List.OP_SVC_KEI_NO);
			// ********************************************************
			// オプションサービス契約一意照会
			// ********************************************************
			callEKK0351A010(handle, param, fixedText, opSvcKeiNo, CC_MOTO_EKK0351A010CBSMSG1LIST);
			
			// オプションサービス契約データが存在しない場合、以降の処理を行わない
			if (!checkExistData(param, CC_MOTO_EKK0351A010CBSMSG1LIST))
			{
				continue;
			}
			
			CAANMsg opSvcKeiMap = ((CAANMsg[])clarisWorkMap.get(CC_MOTO_EKK0351A010CBSMSG1LIST))[0];
			String opSvcKeiStat = opSvcKeiMap.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
			
			// オプションサービス契約ステータスが対象のものではない場合、エラーを返却する
			if (!OP_SVC_KEI_STAT_910.equals(opSvcKeiStat) && !OP_SVC_KEI_STAT_920.equals(opSvcKeiStat))
			{
				setError(inMap, MOTO_AGING_TG_VALUE, errorMapChild, E4_ERR);
				return false;
			}
		}
		
		return true;
	}
	
	/**
	 * 引継先エイジング対象値の関連チェックを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param inMap ユーザーデータ情報
	 * @param errorMapChild エラーマップリスト
	 * @return true:エラーなし false:エラーあり
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean checkKanrenSakiAgingTgValue(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> inMap, HashMap<String, String> errorMapChild) throws Exception
	{
		// 作業領域の取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = getClarisWorkMap(workMap);
		
		// ********************************************************
		// エイジング一覧照会(エイジング対象値)
		// ********************************************************
		callEZM0111B030(handle, param, fixedText, (String)inMap.get(SAKI_AGING_TG_VALUE), CC_SAKI_EZM0111B030CBSMSG1LIST);
		
		// エイジングデータが存在しない場合、エラーを返却する
		if (!checkExistData(param, CC_SAKI_EZM0111B030CBSMSG1LIST))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E5_ERR);
			return false;
		}
		
		CAANMsg agingMap = ((CAANMsg[])clarisWorkMap.get(CC_SAKI_EZM0111B030CBSMSG1LIST))[0];
		String agingStat = agingMap.getString(EZM0111B030CBSMsg1List.AGING_STAT);
		// エイジングステータスが対象のものではない場合、エラーを返却する
		if (!AGING_STAT_200.equals(agingStat))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E6_ERR);
			return false;
		}
		
		// エイジングスキーマ更新キー
		String agingUpdKey = agingMap.getString(EZM0111B030CBSMsg1List.AGING_NO);
		clarisWorkMap.put(CC_UPD_KEY_AGING_NO, agingUpdKey);
		clarisWorkMap.put(CC_UPD_AGING_LAST_UPD_DTM, agingMap.getString(EZM0111B030CBSMsg1List.UPD_DTM));
		
		// ********************************************************
		// オプションサービス契約ISP一覧照会(固定IPアドレス)
		// ********************************************************
		callEKK0361B007(handle, param, fixedText, (String)inMap.get(SAKI_AGING_TG_VALUE), CC_SAKI_EKK0361B007CBSMSG1LIST);

		// オプションサービス契約ISPデータが存在しない場合、エラーを返却する
		if (!checkExistData(param, CC_SAKI_EKK0361B007CBSMSG1LIST))
		{
			setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E7_ERR);
			return false;
		}
		
		// オプションサービス契約ISP一覧照会(固定IPアドレス)での取得件数分チェックする
		for (int i = 0; i < ((CAANMsg[])clarisWorkMap.get(CC_SAKI_EKK0361B007CBSMSG1LIST)).length; i++)
		{
			CAANMsg opSvcKeiIspMap = ((CAANMsg[])clarisWorkMap.get(CC_SAKI_EKK0361B007CBSMSG1LIST))[i];
			
			String opSvcKeiNo = opSvcKeiIspMap.getString(EKK0361B007CBSMsg1List.OP_SVC_KEI_NO);
			// ********************************************************
			// オプションサービス契約一意照会
			// ********************************************************
			callEKK0351A010(handle, param, fixedText, opSvcKeiNo, CC_SAKI_EKK0351A010CBSMSG1LIST);
			
			// オプションサービス契約データが存在しない場合、エラーを返却する
			if (!checkExistData(param, CC_SAKI_EKK0351A010CBSMSG1LIST))
			{
				setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E7_ERR);
				return false;
			}
			
			CAANMsg opSvcKeiMap = ((CAANMsg[])clarisWorkMap.get(CC_SAKI_EKK0351A010CBSMSG1LIST))[0];
			String opSvcKeiStat = opSvcKeiMap.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
			// オプションサービス契約ステータスが対象のものではない場合、エラーを返却する
			if (!OP_SVC_KEI_STAT_910.equals(opSvcKeiStat) && !OP_SVC_KEI_STAT_920.equals(opSvcKeiStat))
			{
				setError(inMap, SAKI_AGING_TG_VALUE, errorMapChild, E8_ERR);
				return false;
			}
			
			// 最大のオプションサービス契約番号であれば
			if (!checkExistData(param, CC_UPD_KEY_OP_SVC_KEI_NO)) {
				clarisWorkMap.put(CC_UPD_KEY_OP_SVC_KEI_NO, opSvcKeiMap.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO));
				clarisWorkMap.put(CC_UPD_OP_SVC_KEI_LAST_UPD_DTM, opSvcKeiMap.getString(EKK0351A010CBSMsg1List.UPD_DTM));
			}
		}
		
		return true;
	}
	
	/**
	 * EZM0171A010:コード名称管理一意照会の呼び出しを行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param setKey
	 * @throws Exception
	 */
	private void callEZM0171A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String setKey) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// コード名称管理一意照会
		// ********************************************************
		template = editInEZM0171A010Msg(param, fixedText);												// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);									// SC呼び出し
		editOutMsgCommon(result, param, fixedText, EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST, setKey);	// 下りマッピング
		
	}
	
	/**
	 * EZM0111B030:エイジング一覧照会(エイジング対象値)の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param aging_tg_value エイジング対象値
	 * @param setKey CCマップセットキー
	 * @throws Exception
	 */
	private void callEZM0111B030(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String aging_tg_value, String setKey) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// エイジング一覧照会(エイジング対象値)
		// ********************************************************
		template = editInEZM0111B030Msg(param, fixedText, aging_tg_value);								// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);									// SC呼び出し
		editOutMsgCommon(result, param, fixedText, EZM0111B030CBSMsg.EZM0111B030CBSMSG1LIST, setKey);	// 下りマッピング
	}
	
	/**
	 * EKK0361B007:オプションサービス契約ISP一覧照会(固定IPアドレス)の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kotei_ip_ad 固定IPアドレス
	 * @param setKey CCマップセットキー
	 * @throws Exception
	 */
	private void callEKK0361B007(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String kotei_ip_ad, String setKey) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// オプションサービス契約ISP一覧照会(固定IPアドレス)
		// ********************************************************
		template = editInEKK0361B007Msg(param, fixedText, kotei_ip_ad);									// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);									// SC呼び出し
		editOutMsgCommon(result, param, fixedText, EKK0361B007CBSMsg.EKK0361B007CBSMSG1LIST, setKey);	// 下りマッピング
	}
	
	/**
	 * EKK0351A010:オプションサービス契約一意照会の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param setKey CCマップセットキー
	 * @throws Exception
	 */
	private void callEKK0351A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String opSvcKeiNo, String setKey) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// オプションサービス契約一覧照会
		// ********************************************************
		template = editInEKK0351A010Msg(param, fixedText, opSvcKeiNo);									// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);									// SC呼び出し
		editOutMsgCommon(result, param, fixedText, EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST, setKey);	// 下りマッピング
	}
	
	/**
	 * EKK0361A010:オプションサービス契約ISP一意照会の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param setKey CCマップセットキー
	 * @throws Exception
	 */
	private void callEKK0361A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String opSvcKeiNo, String setKey) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// オプションサービス契約ISP一意照会
		// ********************************************************
		template = editInEKK0361A010Msg(param, fixedText, opSvcKeiNo);									// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);									// SC呼び出し
		editOutMsgCommon(result, param, fixedText, EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST, setKey);	// 下りマッピング

	}
	
	/**
	 * EZM0111E010:エイジング削除の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	private void callEZM0111E010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// エイジング削除
		// ********************************************************
		template = editInEZM0111E010Msg(param, fixedText);				// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);	// SC呼び出し
		editOutEZM0111E010Msg(result, param, fixedText);				// 下りマッピング
		checkReturnCode(param);
	}
	
	/**
	 * EZM0111C020:エイジング対象回復の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	private void callEZM0111C020(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// エイジング対象回復
		// ********************************************************
		template = editInEZM0111C020Msg(param, fixedText);				// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);	// SC呼び出し
		editOutEZM0111C020Msg(result, param, fixedText);				// 下りマッピング
		checkReturnCode(param);
	}
	
	/**
	 * EKK0361C050:オプションサービス契約＜ISP＞情報変更の呼び出しを行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	private void callEKK0361C050(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SC呼び出し用
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// パラメータマップ用
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		// SC結果格納用
		Map<?, ?> result = null;
		// マッピング用
		CAANMsg template = null;
		
		// ********************************************************
		// オプションサービス契約＜ISP＞情報変更
		// ********************************************************
		template = editInEKK0361C050Msg(param, fixedText);				// 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle);	// SC呼び出し
		editOutEKK0361C050Msg(result, param, fixedText);				// 下りマッピング
		checkReturnCode(param);
	}
	
	/**
	 * EZM0171A010:コード名称管理一意照会の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0171A010Msg(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0171A010CBSMsg.class.getName());
		// マッピング情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		
		// テンプレートID
		template.set(EZM0171A010CBSMsg.TEMPLATEID, TAMPLATE_ID_EZM0171A010);
		// 機能コード
		template.set(EZM0171A010CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// ＫＥＹ_コード種別コード
		template.set(EZM0171A010CBSMsg.KEY_CD_SBT_CD, CD00412_AGING_SBT_CD);
		// ＫＥＹ_コード区分
		setTemplate(inMap, AGING_SBT_CD, template, EZM0171A010CBSMsg.KEY_CD_DIV);
		
		return template;
	}
	
	/**
	 * エイジング一覧照会(エイジング対象値)の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param agingTgValue エイジング対象値
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0111B030Msg(IRequestParameterReadWrite param, String fixedText, String agingTgValue) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0111B030CBSMsg.class.getName());
		// マッピング情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		
		// テンプレートID
		template.set(EZM0111B030CBSMsg.TEMPLATEID, TAMPLATE_ID_EZM0111B030);
		// 機能コード
		template.set(EZM0111B030CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// ＫＥＹ_エイジング種別コード
		setTemplate(inMap, AGING_SBT_CD, template, EZM0111B030CBSMsg.KEY_AGING_SBT_CD);
		// ＫＥＹ_エイジング対象値
		template.set(EZM0111B030CBSMsg.KEY_AGING_TG_VALUE, agingTgValue);
		
		return template;
	}
	
	/**
	 * オプションサービス契約ISP一覧照会の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param koteiIpAd 固定IPアドレス
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK0361B007Msg(IRequestParameterReadWrite param, String fixedText, String koteiIpAd) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361B007CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0361B007CBSMsg.TEMPLATEID, TAMPLATE_ID_EKK0361B007);
		// 機能コード
		template.set(EKK0361B007CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// ＫＥＹ_固定IPアドレス
		template.set(EKK0361B007CBSMsg.KEY_KOTEI_IP_AD, koteiIpAd);
		
		return template;
	}
	
	/**
	 * オプションサービス契約一意照会の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK0351A010Msg(IRequestParameterReadWrite param, String fixedText, String opSvcKeiNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0351A010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0351A010CBSMsg.TEMPLATEID, TAMPLATE_ID_EKK0351A010);
		// 機能コード
		template.set(EKK0351A010CBSMsg.FUNC_CODE, "2");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// ＫＥＹ_オプションサービス契約番号
		template.set(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		// ＫＥＹ_予約適用年月日
		template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, JKKBpCommon.getOpeDate(null));
		
		return template;
	}
	
	/**
	 * オプションサービス契約ISP一意照会の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK0361A010Msg(IRequestParameterReadWrite param, String fixedText, String opSvcKeiNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0361A010CBSMsg.TEMPLATEID, TAMPLATE_ID_EKK0361A010);
		// 機能コード
		template.set(EKK0361A010CBSMsg.FUNC_CODE, "2");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// ＫＥＹ_オプションサービス契約番号
		template.set(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		
		return template;
	}
	
	/**
	 * エイジング削除の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0111E010Msg(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0111E010CBSMsg.class.getName());
		
		// マッピング情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 作業領域のマップを取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = (HashMap)workMap.get(CC_WORK_AREA_CLARIS_AGING_STAT_UPD);
		
		// テンプレートID
		template.set(EZM0111E010CBSMsg.TEMPLATEID, TAMPLATE_ID_EZM0111E010);
		// 機能コード
		template.set(EZM0111E010CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// エイジング番号
		template.set(EZM0111E010CBSMsg.AGING_NO, clarisWorkMap.get(CC_DEL_KEY_AGING_NO));
		// エイジング種別コード
		setTemplate(inMap, AGING_SBT_CD, template, EZM0111E010CBSMsg.AGING_SBT_CD);
		// エイジング対象値
		setTemplate(inMap, MOTO_AGING_TG_VALUE, template, EZM0111E010CBSMsg.AGING_TG_VALUE);
		// 更新前最終年月日時分秒
		template.set(EZM0111E010CBSMsg.LAST_UPD_DTM_BF, clarisWorkMap.get(CC_DEL_AGING_LAST_UPD_DTM));
		
		return template;
	}
	
	/**
	 * エイジング回復の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0111C020Msg(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0111C020CBSMsg.class.getName());
		
		// マッピング情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 作業領域のマップを取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = (HashMap)workMap.get(CC_WORK_AREA_CLARIS_AGING_STAT_UPD);
		
		// テンプレートID
		template.set(EZM0111C020CBSMsg.TEMPLATEID, TAMPLATE_ID_EZM0111C020);
		// 機能コード
		template.set(EZM0111C020CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// エイジング番号
		template.set(EZM0111C020CBSMsg.AGING_NO, clarisWorkMap.get(CC_UPD_KEY_AGING_NO));
		// エイジング種別コード
		setTemplate(inMap, AGING_SBT_CD, template, EZM0111C020CBSMsg.AGING_SBT_CD);
		// エイジング対象値
		setTemplate(inMap, SAKI_AGING_TG_VALUE, template, EZM0111C020CBSMsg.AGING_TG_VALUE);
		// 更新前最終年月日時分秒
		template.set(EZM0111C020CBSMsg.LAST_UPD_DTM_BF, clarisWorkMap.get(CC_UPD_AGING_LAST_UPD_DTM));
		
		return template;
	}
	
	/**
	 * オプションサービス契約＜ISP＞情報変更の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return テンプレート
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0361C050Msg(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0361C050CBSMsg.class.getName());
		// 作業領域のマップを取得
		Map workMap = getworkMap(param);
		// 作業項目情報
		HashMap clarisWorkMap = (HashMap)workMap.get(CC_WORK_AREA_CLARIS_AGING_STAT_UPD);
		CAANMsg resultListEKK0351 = ((CAANMsg[])clarisWorkMap.get(CC_UPD_DATA_EKK0351A010CBSMSG1LIST))[0];
		CAANMsg resultListEKK0361 = ((CAANMsg[])clarisWorkMap.get(CC_UPD_DATA_EKK0361A010CBSMSG1LIST))[0];
		
		// テンプレートID
		template.set(EKK0361C050CBSMsg.TEMPLATEID, TAMPLATE_ID_EKK0361C050);
		// 機能コード
		template.set(EKK0361C050CBSMsg.FUNC_CODE, "1");
		// 上りマッピング共通項目
		editInDefaultSet(template, param);
		// オプションサービス契約番号
		template.set(EKK0361C050CBSMsg.OP_SVC_KEI_NO, clarisWorkMap.get(CC_UPD_KEY_OP_SVC_KEI_NO));
		// 申込明細番号
		template.set(EKK0361C050CBSMsg.MSKM_DTL_NO, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.MSKM_DTL_NO));
		// 試用加入年月日
		template.set(EKK0361C050CBSMsg.FTRIAL_KANYU_YMD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.FTRIAL_KANYU_YMD));
		// 試用期間終了年月日
		template.set(EKK0361C050CBSMsg.FTRIAL_PRD_ENDYMD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.FTRIAL_PRD_ENDYMD));
		// 本加入年月日
		template.set(EKK0361C050CBSMsg.HONKANYU_YMD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.HONKANYU_YMD));
		// 本加入移行期限年月日
		template.set(EKK0361C050CBSMsg.HONKANYU_IKO_KIGEN_YMD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.HONKANYU_IKO_KIGEN_YMD));
		// サービス解約理由コード
		template.set(EKK0361C050CBSMsg.SVC_DLRE_CD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.SVC_DLRE_CD));
		// 違約金発生コード
		template.set(EKK0361C050CBSMsg.PNLTY_HASSEI_CD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.PNLTY_HASSEI_CD));
		// 異動区分
		template.set(EKK0361C050CBSMsg.IDO_DIV, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.IDO_DIV));
		// 希望メールアカウント1
		template.set(EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_1, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_1));
		// 希望メールアカウント2
		template.set(EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_2, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_2));
		// 希望メールアカウント3
		template.set(EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_3, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_3));
		// マルチセッション用セッション数
		template.set(EKK0361C050CBSMsg.MLTISE_SESSION_CNT, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLTISE_SESSION_CNT));
		// 固定IPアドレス
		template.set(EKK0361C050CBSMsg.KOTEI_IP_AD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.KOTEI_IP_AD));
		// ネットマスク
		template.set(EKK0361C050CBSMsg.NETMASK, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.NETMASK));
		// メールアドレス
		template.set(EKK0361C050CBSMsg.MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLAD));
		// 容量
		template.set(EKK0361C050CBSMsg.CAPA, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.CAPA));
		// URL(ドメイン)
		template.set(EKK0361C050CBSMsg.URL_DOMAIN, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.URL_DOMAIN));
		// URL(アカウント)
		template.set(EKK0361C050CBSMsg.URL_ACCOUNT, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.URL_ACCOUNT));
		// メーリングリスト名
		template.set(EKK0361C050CBSMsg.MLLIST_NM, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLLIST_NM));
		// メーリングリスト呼称
		template.set(EKK0361C050CBSMsg.MLLIST_KOSHO, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLLIST_KOSHO));
		// メーリングリスト公開要否
		template.set(EKK0361C050CBSMsg.MLLIST_KOKAI_YH, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLLIST_KOKAI_YH));
		// メーリングリスト最大ユーザー数
		template.set(EKK0361C050CBSMsg.MLLIST_MAX_USER_CNT, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLLIST_MAX_USER_CNT));
		// メーリングリスト管理者メールアドレス
		template.set(EKK0361C050CBSMsg.MLLIST_KRISHA_MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLLIST_KRISHA_MLAD));
		// 独自ドメイン名
		template.set(EKK0361C050CBSMsg.DOKUJI_DOMAIN_NM, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DOKUJI_DOMAIN_NM));
		// ホスティングメールアカウント数
		template.set(EKK0361C050CBSMsg.HOSML_ACCOUNT_CNT, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_ACCOUNT_CNT));
		// ホスティングメールボックス総容量
		template.set(EKK0361C050CBSMsg.HOSML_BOX_CAPA, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_BOX_CAPA));
		// ホスティングメール管理者ID
		template.set(EKK0361C050CBSMsg.HOSML_KRISHA_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_KRISHA_ID));
		// ホスティング初期メール管理者IDパスワード
		template.set(EKK0361C050CBSMsg.HOSTING_SHKM_KRISHA_ID_PWD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSTING_SHKM_KRISHA_ID_PWD));
		// ホスティングメール管理者POPID
		template.set(EKK0361C050CBSMsg.HOSML_KRISHA_POP_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_KRISHA_POP_ID));
		// ホスティング初期メール管理者POPIDパスワード
		template.set(EKK0361C050CBSMsg.HOS_SHKM_KRISHA_POP_ID_PWD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOS_SHKM_KRISHA_POP_ID_PWD));
		// ホスティングメール管理者メールアドレス
		template.set(EKK0361C050CBSMsg.HOSML_KRISHA_MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_KRISHA_MLAD));
		// ホスティングメール管理者メールボックス容量
		template.set(EKK0361C050CBSMsg.HOSML_KRISHA_MAIL_BOX_CAPA, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.HOSML_KRISHA_MAIL_BOX_CAPA));
		// ダイヤルパッドID
		template.set(EKK0361C050CBSMsg.DPAD_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_ID));
		// ダイヤルパッドISPID
		template.set(EKK0361C050CBSMsg.DPAD_ISP_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_ISP_ID));
		// ダイヤルパッドMAPID
		template.set(EKK0361C050CBSMsg.DPAD_MAPID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_MAPID));
		// ダイヤルパッドPIN
		template.set(EKK0361C050CBSMsg.DPAD_PIN, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_PIN));
		// ダイヤルパッドメールアドレス
		template.set(EKK0361C050CBSMsg.DPAD_MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_MLAD));
		// ダイヤルパッドID公開要否
		template.set(EKK0361C050CBSMsg.DPAD_ID_KOKAI_YH, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DPAD_ID_KOKAI_YH));
		// VoIPユーザーID
		template.set(EKK0361C050CBSMsg.VOIP_USER_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.VOIP_USER_ID));
		// DNS設定コード
		template.set(EKK0361C050CBSMsg.DNS_SETTE_CD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.DNS_SETTE_CD));
		// メールゲートウェイ管理者ID
		template.set(EKK0361C050CBSMsg.MAIL_GW_KRISHA_ID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MAIL_GW_KRISHA_ID));
		// メールゲートウェイ管理者IDパスワード
		template.set(EKK0361C050CBSMsg.MAIL_GW_KRISHA_ID_PWD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MAIL_GW_KRISHA_ID_PWD));
		// メールゲートウェイ管理者メールアドレス
		template.set(EKK0361C050CBSMsg.MAIL_GW_KRISHA_MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MAIL_GW_KRISHA_MLAD));
		// メールゲートウェイ受信メールサーバーIPアドレス
		template.set(EKK0361C050CBSMsg.MAIL_GW_RCV_MSERVER_IP_AD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MAIL_GW_RCV_MSERVER_IP_AD));
		// メールゲートウェイ送信メールサーバーIPアドレス
		template.set(EKK0361C050CBSMsg.MAIL_GW_SEND_MSERVER_IP_AD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MAIL_GW_SEND_MSERVER_IP_AD));
		// メールゲートウェイアカウント数
		template.set(EKK0361C050CBSMsg.ML_GW_ACCOUNT_CNT, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.ML_GW_ACCOUNT_CNT));
		// サービス個別設定連絡先メールアドレス
		template.set(EKK0361C050CBSMsg.SVC_KBT_SET_RRKS_MLAD, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.SVC_KBT_SET_RRKS_MLAD));
		// 通話明細公開要否
		template.set(EKK0361C050CBSMsg.TUWA_DTL_KOKAI_YH, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.TUWA_DTL_KOKAI_YH));
		// IPv6アドレス(インターフェイスID)
		template.set(EKK0361C050CBSMsg.IPV6_AD_IFID, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.IPV6_AD_IFID));
		// 表示用サービス提供開始年月日
		template.set(EKK0361C050CBSMsg.DSP_SVCTK_STAYMD, resultListEKK0351.getObject(EKK0351A010CBSMsg1List.DSP_SVCTK_STAYMD));
		// 更新年月日時分秒(更新前)
		template.set(EKK0361C050CBSMsg.UPD_DTM_BF, clarisWorkMap.get(CC_UPD_OP_SVC_KEI_LAST_UPD_DTM));
		// サービス提供物消去処理実施年月日時分秒
		template.set(EKK0361C050CBSMsg.SVCTK_BUT_DEL_TRN_JSSI_DTM, (String)param.getControlMapData(SCControlMapKeys.OPE_TIME));
		// メール各種設定引継フラグ
		template.set(EKK0361C050CBSMsg.ML_VRSETTE_HKTGI_FLG, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.ML_VRSETTE_HKTGI_FLG));
		// メールアドレス変更時メール転送フラグ
		template.set(EKK0361C050CBSMsg.MLAD_CHGJ_ML_TNS_FLG, resultListEKK0361.getObject(EKK0361A010CBSMsg1List.MLAD_CHGJ_ML_TNS_FLG));
		
		return template;
	}
	
	/**
	 * 上りマッピングの共通項目をセットします。
	 * <br>
	 * @param template テンプレート
	 * @param param リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private void editInDefaultSet(CAANMsg template, IRequestParameterReadWrite param) throws RequestParameterException 
	{
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
	}
	
	/**
	 * 共通の下りマッピングを行います。<br>
	 * 取得結果をそのまま作業項目情報にセットします。<br>
	 * 
	 * @param result SC結果
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param getKey SC結果ゲットキー
	 * @param setKey CCマップセットキー
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void editOutMsgCommon(Map<?, ?> result, IRequestParameterReadWrite param, String fixedText, String getKey, String setKey) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;
		
		// リターンコード取得
		Object returnCode = result.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = getworkMap(param);

		// 作業項目情報
		HashMap clarisWorkMap = getClarisWorkMap(workMap);
		
		templateArray = template.getCAANMsgList(getKey);
		
		if (templateArray != null && templateArray.length > 0)
		{
			// Clarisエイジングステータス更新作業項目マップ. ← 直前に実行したSIF結果
			clarisWorkMap.put(setKey, templateArray);
		}
		else
		{
			clarisWorkMap.remove(setKey);
		}
		
		// エラー情報の設定
		editErrInfoCommon(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(result, errList));
	}
	
	/**
	 * エイジング削除の下りマッピング処理を行います。
	 * <br>
	 * @param result SC結果
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void editOutEZM0111E010Msg(Map<?, ?> result, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		// リターンコード取得
		Object returnCode = result.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		editErrInfoCommon(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(result, errList));
	}
	
	/**
	 * エイジング対象回復の下りマッピング処理を行います。
	 * <br>
	 * @param result SC結果
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void editOutEZM0111C020Msg(Map<?, ?> result, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		// リターンコード取得
		Object returnCode = result.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		editErrInfoCommon(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(result, errList));
	}
	
	/**
	 * オプションサービス契約＜ISP＞情報変更の下りマッピング処理を行います。
	 * <br>
	 * @param result SC結果
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void editOutEKK0361C050Msg(Map<?, ?> result, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		// リターンコード取得
		Object returnCode = result.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		editErrInfoCommon(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(result, errList));
	}
	
	/**
	 * 入力前後の空白をトリミングします。
	 * 
	 * @param inMap
	 * @param funcCode
	 */
	private String trimBlank(String value) {
		
		return value.trim();
	}
	
	/**
	 * 必須チェックを行います。
	 * <br>
	 * @param inMap 入力情報
	 * @param itemNm 項目名
	 * @return true:エラーなし false:エラーあり
	 */
	private boolean checkNotNull(HashMap<String,Object> inMap, String itemNm)
	{
		if (!JKKStringUtil.isNullBlank((String)inMap.get(itemNm)))
		{
			return true;
		}
		return false;
	}
	
	/**
	 * 桁数チェックを行います。
	 * <br>
	 * @param inMap 入力情報
	 * @param errorMapChild エラーマップリスト
	 * @param itemNm 項目名
	 * @param minLength 最小桁数
	 * @param maxLength 最大桁数
	 * @return true:エラーなし false:エラーあり
	 */
	private boolean checkLength(HashMap<String,Object> inMap, HashMap<String, String> errorMapChild, String itemNm, int minLength, int maxLength)
	{
		if (minLength <= inMap.get(itemNm).toString().length() && inMap.get(itemNm).toString().length() <= maxLength)
		{
			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;
	}
	
	/**
	 * 作業領域の取得を行います。<br>
	 * 作業領域がない場合は作成します。<br>
	 * 
	 * @param param リクエストパラメータ
	 * @return 作業領域
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private Map getworkMap(IRequestParameterReadWrite param) throws RequestParameterException {
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		return workMap;
	}
	
	/**
	 * 作業項目情報の取得を行います。<br>
	 * 作業項目情報がない場合は作成します。<br>
	 * 
	 * @param workMap 作業領域
	 * @return 作業項目情報
	 */
	@SuppressWarnings("unchecked")
	private HashMap getClarisWorkMap(Map workMap) {
		HashMap clarisWorkMap = (HashMap)workMap.get(CC_WORK_AREA_CLARIS_AGING_STAT_UPD);
		if (clarisWorkMap == null)
		{
			clarisWorkMap = new HashMap();
			workMap.put(CC_WORK_AREA_CLARIS_AGING_STAT_UPD, clarisWorkMap);
		}
		return clarisWorkMap;
	}
	
	/**
	 * SCのリターンコードをチェックし、正常でない場合は例外を送出します。
	 * <br>
	 * @param param リクエストパラメータ
	 * @throws CCException 
	 * @throws RequestParameterException 
	 */
	private void checkReturnCode(IRequestParameterReadWrite param) throws RequestParameterException, CCException
	{
		if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
		{
			// ステータスが単項目エラー以上であれば例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
	}
	
	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @return SCの実行ステータス
	 * @throws RequestParameterException 
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws RequestParameterException
	{
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			return -1;
		}
		else
		{
			return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
	}
	
	/**
	 * CAANMsgに値を設定します。<br>
	 *  @inMap内にデータが存在する場合、inMap内のデータを設定します。<br>
	 *  A上記以外の場合、setNullを呼び出します。<br>
	 * 
	 * @param inMap ユーザデータ情報
	 * @param getKey ユーザデータ情報より取得するキー名
	 * @param template 値を設定するメッセージキャリア
	 * @param setKey 設定先メッセージキャリアのキー名
	 */
	private void setTemplate(HashMap<String, Object> inMap, String getKey, CAANMsg template, String setKey)
	{
		
		if (null == inMap || null == inMap.get(getKey) || 0 == ((String)inMap.get(getKey)).length())
		{
			template.setNull(setKey);
		}
		else
		{
			template.set(setKey, (String)inMap.get(getKey));
		}
	}
	
	/**
	 * キー項目に指定した照会結果リストが存在するかチェックします。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param resultListKey CCマップゲットキー
	 * @return true:データあり false:データなし
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private boolean checkExistData(IRequestParameterReadWrite param, String resultListKey) throws RequestParameterException
	{
		
		// 作業領域の取得
		Map workMap = getworkMap(param);

		// 作業項目情報
		HashMap clarisWorkMap = getClarisWorkMap(workMap);
		
		// 作業マップに照会データが存在しない場合
		if (clarisWorkMap.get(resultListKey) == null)
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * エラー情報マッピング処理(共通)を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param template テンプレート
	 * @param returnCode SC実行結果コード
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void editErrInfoCommon(IRequestParameterReadWrite param, CAANMsg template, int returnCode, String fixedText) throws RequestParameterException 
	{
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		bpStatus = getReturnCode(param);

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			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 = null;

		// ユーザデータ情報
		inMap = (HashMap)param.getData(fixedText);

		HashMap map = template.getHashMap();
		Iterator it = map.keySet().iterator();
		while (it.hasNext())
		{
			String key = (String)it.next();
			if (key.endsWith("_err"))
			{
				int keyIdx = key.lastIndexOf("_err");
				if (inMap.containsKey(key.substring(0, keyIdx)))
				{
					inMap.put(key, map.get(key));
				}
			}
		}
	}

	/**
	 * エラー返却値とエラーをセットします
	 * 
	 * @param inMap ユーザーデータ
	 * @param itemNm 項目名
	 * @param errorMapChild エラーマップリスト
	 * @param errCd エラーコード
	 */
	private void setError(HashMap<String, Object> inMap, String itemNm, HashMap<String, String> errorMapChild, String errCd)
	{
		inMap.put(itemNm + STR_ERR, errCd);
		errorMapChild.put(itemNm + STR_ERR, errCd);
	}

	/**
	 * エラーメッセージをセットします。
	 * 
	 * @param param リクエストパラメータ
	 * @param errorMap エラーマップ
	 * @param errorMapChild エラーマップリスト
	 * @param errList エラーリスト
	 * @param errorCd エラーコード
	 */
	private void setErrorMessage(IRequestParameterReadWrite param, HashMap<String, Object> errorMap, HashMap<String, String> errorMapChild, ArrayList<Object> errList, int errorCd)
	{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, errorCd);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);

			errorMap.put(ErrorInfoMapKeys.RETURN_CODE, RETURN_CODE_NORMAL);
			errorMap.put(ErrorInfoMapKeys.TEMPLATE_ID, CC_NAME);
			errorMap.put(ErrorInfoMapKeys.STATUS, JPCModelConstant.ITEM_RELATION_ERR);
			errorMap.put(ErrorInfoMapKeys.ITEM_CHECK_ERRORS, errorMapChild);
			errList.add(errorMap);

			param.setControlMapData(SCControlMapKeys.ERROR_INFO, errList);
	}
}
