/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：契約管理
*	モジュール名	：JKKEohTvGuideUpdCC
*	ソースファイル名：JKKEohTvGuideUpdCC.java
*	作成者			：FJ
*	日付			：2013年01月15日
*＜機能概要＞ 
*	eo光テレビガイド誌更新画面の登録確認／確定共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2013/01/15	FJ）稲岡	新規作成
*	v4.01.00    2012/12/21	FJ）稲岡	【ST2-2013-0000443】対応
*	v4.02.00    2013/02/20	FJ）間瀬	【ST3-2013-0000040】対応
* 	v4.03.00	2013/03/04	FJ）稲岡	【ST1-2013-0000253】対応
*	v8.00.00	2014/05/12	FJ）稲岡	【IT1-2014-0000109】対応
**********************************************************************/
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.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171B012CBSMsg;

/**
 * 
 * @author 909837
 *
 */
public class JKKEohTvGuideUpdCC extends AbstractCommonComponent
{
	/**テンプレートID(申込内容承認登録)*/
	private static final String TEMPLATE_ID_EKK0011D020 = "EKK0011D020";
	/**テンプレートID(申込明細照査・後続業務依頼)*/
	private static final String TEMPLATE_ID_EKK0021C060 = "EKK0021C060";
	/**テンプレートID(進捗登録)*/
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/** 異動予約一覧照会 */
	private static final String TEMPLATE_ID_EKK1681B001 = "EKK1681B001";
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
	/** FIXED KEY */
	private static final String FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC = "EohTvGuideUpplChkCC";
	/** FIXED KEY */
	private static final String FIXED_KEY_EOH_TVGUIDE_MSKM_CNT_UPD_CC = "EohTvGuideMskmCntUpdCC";
	/** FIXED KEY */
	private static final String FIXED_KEY_ONESTOP_RIREKI_ADD_CC = "OnestopRirekiAdd";
	
	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_2 = "2";
	
	/** eo光テレビガイド誌申込数「０」 */
	private static final String TV_GUIDE_MSKM_CNT_ZERO = "0";
	
	/** 処理モード 1：更新 */
	private static final String TRAN_MODE_UPD = "1";
	
	/* ++++++++++ v4.02.00 追加開始 ++++++++++ */
	/** 住所チェック対象 */
	private static final String GUIDEMG_SOHUS_AD_CHK_LV_ERR = "guidemg_sohus_ad_chk_lv_err";
	/* ++++++++++ v4.02.00 追加終了 ++++++++++ */
	
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/** 異動予約詳細コード（014:オプション開始） */
	private static final String IDO_RSV_DTL_CD_014 = "014";
	/** 異動予約詳細コード（016:オプション取消） */
	private static final String IDO_RSV_DTL_CD_016 = "016";
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
	/**
	 * 各SC/CCの呼出処理を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite eohTvGuideUpd(
														SessionHandle handle, 
														IRequestParameterReadWrite param, 
														String fixedText) throws Throwable, Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		IRequestParameterReadWrite retParam = param;
		
		// ユーザデータ情報
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		String tranMode = (String)dataMap.get("tran_mode");			// 処理モード
		
		// 作業領域
		HashMap<String, Object> work01Map = (HashMap<String, Object>)param.getData("KKSV0536WORK01");
		String oneStopFlg = (String)work01Map.get("one_stop_flg");	// ワンストップフラグ
		String funcCode = (String)work01Map.get("func_code");		// 機能コード
		
		
/* ++++++++++ v8.00.00 変更開始 ++++++++++ */
		// 登録確認の場合
		if (FUNC_CODE_2.equals(funcCode))
		{
			// 処理モード = "1":更新
			if (TRAN_MODE_UPD.equals(tranMode))
			{
				// ■オプションサービス契約状態チェック
				// オプションサービス契約ステータス＝照査済または締結済の場合
				if(JKKSvcConst.SVC_KEI_STAT_020.equals((String)dataMap.get("op_svc_kei_stat")) 
						|| JKKSvcConst.SVC_KEI_STAT_030.equals((String)dataMap.get("op_svc_kei_stat")))
				{
					// 異動予約にオプション開始予約データが存在する
					if(isExsistOpStaRsv(handle, scCall, param, fixedText, IDO_RSV_DTL_CD_014, dataMap))
					{
						// オプションサービス契約状態エラー
						dataMap.put("opSvcKeiStatChkFlg", false);
						// 処理終了
						return retParam;
					}
				}
				// オプションサービス契約ステータス＝サービス提供中の場合
				else if(JKKSvcConst.SVC_KEI_STAT_100.equals((String)dataMap.get("op_svc_kei_stat")))
				{
					// 異動予約にオプション取消予約データが存在する
					if(isExsistOpStaRsv(handle, scCall, param, fixedText, IDO_RSV_DTL_CD_016, dataMap))
					{
						// オプションサービス契約状態エラー
						dataMap.put("opSvcKeiStatChkFlg", false);
						// 処理終了
						return retParam;
					}
				}
				
				dataMap.put("opSvcKeiStatChkFlg", true);
				
				// 変更後ｅｏ光テレビガイド誌申込数
				int mskmCnt = Integer.parseInt((String)dataMap.get("mskm_cnt"));
				
				// ■eo光テレビガイド誌冊数上限チェックCC
				boolean chkResult = executeEohTvGuideUpplChkCC(handle, param, dataMap);
				// 下りマップ取得
				HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC);
				
				// 上限チェックエラーの場合
				if (!chkResult)
				{
					// エラーメッセージ格納
					dataMap.put("err_msg", (String)outMap.get("err_msg"));
					// 処理終了
					return retParam;
				}
				// 上限チェックエラーなし または 未チェック
				else
				{
					// eo光テレビガイド誌申込数「０」
					if (0 == mskmCnt)
					{
						// ガイド誌冊数上限格納
						dataMap.put("tv_guide_upplno", (String)outMap.get("tv_guide_upplno"));
						// 処理終了
						return retParam;
					}
				}
			}
		}
/* ++++++++++ v8.00.00 変更終了 ++++++++++ */
		
		// ■申込内容承認登録SC実行
		executeEKK0011D020(handle, param, scCall, dataMap, fixedText, funcCode);
		
		// ■申込明細照査・後続業務依頼SC
		executeEKK0021C060(handle, param, scCall, dataMap, fixedText, funcCode);
		
		// ■eo光テレビガイド誌申込数更新CC
		executeEohTvGuideMskmCntUpdCC(handle, param, dataMap);
		
		// ■進捗登録SC実行
		executeEKK1091D010(handle, param, scCall, dataMap, fixedText, funcCode);
		
		// ワンストップメニューから遷移時
		if("1".equals(oneStopFlg))
		{
/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
			// ■ワンストップ対応履歴登録CC
			executeOnestopRirekiAddCC(handle, param, dataMap, funcCode);
/* ++++++++++ v4.01.00 修正終了 ++++++++++ */
		}
		
		return retParam;
	}
	
	/**
	 * チェック処理です。<br>
	 * <br>
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		
		return paramMap;
	}
	
	/**
	 * 申込内容承認登録SC実行
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param dataMap
	 * @param fixedText
	 * @param funcCode
	 * @throws RequestParameterException
	 */
	private void executeEKK0011D020(
										SessionHandle handle, 
										IRequestParameterReadWrite param, 
										ServiceComponentRequestInvoker scCall, 
										HashMap<String, Object> dataMap, 
										String fixedText, 
										String funcCode) throws RequestParameterException, Exception
	{
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		
		// 上りメッセージ作成
		paramMap = editInMsg_EKK0011D020(param, dataMap, funcCode);
		
		// サービスIFの実行
		result = scCall.run(paramMap, handle);
		
		// 実行結果の編集
		editOutMsg_EKK0011D020(result, param, fixedText);
	}
	
	/**
	 * メッセージを作成します。(申込内容承認登録)
	 * 
	 * @param param
	 * @param inMap
	 * @param funcCode
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg_EKK0011D020(
															IRequestParameterReadWrite param, 
															HashMap<String, Object> inMap, 
															String funcCode) throws RequestParameterException
	{
		// 共通領域の情報の設定
		HashMap<String, Object> paramMap = editInMsg(param);
		
		CAANMsg template = new CAANMsg(EKK0011D020CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0011D020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0011D020);
		// 機能コード
		template.set(EKK0011D020CBSMsg.FUNC_CODE, funcCode);
		// オペレータ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);
		
		CAANMsg[] templateArray = null;
		
		// 申込内容承認登録マップ.SYSID → SYSID
		if (inMap == null || inMap.get("sysid") == null || "".equals(inMap.get("sysid"))) {
			template.setNull(EKK0011D020CBSMsg.SYSID);
		} else {
			template.set(EKK0011D020CBSMsg.SYSID, (String) inMap.get("sysid"));
		}
		
		// 申込内容承認登録マップ.申込種別コード → 申込種別コード
		if (inMap == null || inMap.get("mskm_sbt_cd") == null || "".equals(inMap.get("mskm_sbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_SBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_SBT_CD, (String) inMap.get("mskm_sbt_cd"));
		}
		
		// 申込内容承認登録マップ.申込書到着年月日 → 申込書到着年月日
		if (inMap == null || inMap.get("mskmsho_ariv_ymd") == null || "".equals(inMap.get("mskmsho_ariv_ymd"))) {
			template.setNull(EKK0011D020CBSMsg.MSKMSHO_ARIV_YMD);
		} else {
			template.set(EKK0011D020CBSMsg.MSKMSHO_ARIV_YMD, (String) inMap.get("mskmsho_ariv_ymd"));
		}
		
		// 申込内容承認登録マップ.申込受付年月日時分秒 → 申込受付年月日時分秒
		if (inMap == null || inMap.get("mskm_uk_dtm") == null || "".equals(inMap.get("mskm_uk_dtm"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_UK_DTM);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_UK_DTM, (String) inMap.get("mskm_uk_dtm"));
		}
		
		// 申込内容承認登録マップ.申込受付担当ユーザーID → 申込受付担当ユーザーID
		if (inMap == null || inMap.get("mskm_uk_tnt_user_id") == null || "".equals(inMap.get("mskm_uk_tnt_user_id"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_UK_TNT_USER_ID);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_UK_TNT_USER_ID, (String) inMap.get("mskm_uk_tnt_user_id"));
		}
		
		// 申込内容承認登録マップ.申込年月日 → 申込年月日
		if (inMap == null || inMap.get("mskm_ymd") == null || "".equals(inMap.get("mskm_ymd"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_YMD);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_YMD, (String) inMap.get("mskm_ymd"));
		}
		
		// 申込内容承認登録マップ.総合営業センター受付番号 → 総合営業センター受付番号
		if (inMap == null || inMap.get("ttl_business_center_uk_no") == null || "".equals(inMap.get("ttl_business_center_uk_no"))) {
			template.setNull(EKK0011D020CBSMsg.TTL_BUSINESS_CENTER_UK_NO);
		} else {
			template.set(EKK0011D020CBSMsg.TTL_BUSINESS_CENTER_UK_NO, (String) inMap.get("ttl_business_center_uk_no"));
		}
		
		// 申込内容承認登録マップ.総合営業申込契機コード → 総合営業申込契機コード
		if (inMap == null || inMap.get("ttl_business_mskm_opt_cd") == null || "".equals(inMap.get("ttl_business_mskm_opt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.TTL_BUSINESS_MSKM_OPT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.TTL_BUSINESS_MSKM_OPT_CD, (String) inMap.get("ttl_business_mskm_opt_cd"));
		}
		
		// 申込内容承認登録マップ.申込連絡先電話番号 → 申込連絡先電話番号
		if (inMap == null || inMap.get("mskm_rrks_telno") == null || "".equals(inMap.get("mskm_rrks_telno"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_RRKS_TELNO);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_RRKS_TELNO, (String) inMap.get("mskm_rrks_telno"));
		}
		
		// 申込内容承認登録マップ.申込実施者種別コード → 申込実施者種別コード
		if (inMap == null || inMap.get("mskm_jssis_sbt_cd") == null || "".equals(inMap.get("mskm_jssis_sbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_JSSIS_SBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_JSSIS_SBT_CD, (String) inMap.get("mskm_jssis_sbt_cd"));
		}
		
		// 申込内容承認登録マップ.お客様ご要望事項 → お客様ご要望事項
		if (inMap == null || inMap.get("cust_yobo_jiko") == null || "".equals(inMap.get("cust_yobo_jiko"))) {
			template.setNull(EKK0011D020CBSMsg.CUST_YOBO_JIKO);
		} else {
			template.set(EKK0011D020CBSMsg.CUST_YOBO_JIKO, (String) inMap.get("cust_yobo_jiko"));
		}
		
		// 申込内容承認登録マップ.電話連絡希望日種別コード → 電話連絡希望日種別コード
		if (inMap == null || inMap.get("tel_rrk_kibod_sbt_cd") == null || "".equals(inMap.get("tel_rrk_kibod_sbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.TEL_RRK_KIBOD_SBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.TEL_RRK_KIBOD_SBT_CD, (String) inMap.get("tel_rrk_kibod_sbt_cd"));
		}
		
		// 申込内容承認登録マップ.電話連絡希望時間帯コード → 電話連絡希望時間帯コード
		if (inMap == null || inMap.get("tel_rrk_kibo_time_cd") == null || "".equals(inMap.get("tel_rrk_kibo_time_cd"))) {
			template.setNull(EKK0011D020CBSMsg.TEL_RRK_KIBO_TIME_CD);
		} else {
			template.set(EKK0011D020CBSMsg.TEL_RRK_KIBO_TIME_CD, (String) inMap.get("tel_rrk_kibo_time_cd"));
		}
		
		// 申込内容承認登録マップ.宅内調査希望日種別コード → 宅内調査希望日種別コード
		if (inMap == null || inMap.get("takcho_kibod_sbt_cd") == null || "".equals(inMap.get("takcho_kibod_sbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.TAKCHO_KIBOD_SBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.TAKCHO_KIBOD_SBT_CD, (String) inMap.get("takcho_kibod_sbt_cd"));
		}
		
		// 申込内容承認登録マップ.宅内調査希望時間帯コード → 宅内調査希望時間帯コード
		if (inMap == null || inMap.get("takcho_kibo_time_cd") == null || "".equals(inMap.get("takcho_kibo_time_cd"))) {
			template.setNull(EKK0011D020CBSMsg.TAKCHO_KIBO_TIME_CD);
		} else {
			template.set(EKK0011D020CBSMsg.TAKCHO_KIBO_TIME_CD, (String) inMap.get("takcho_kibo_time_cd"));
		}
		
		// 申込内容承認登録マップ.仮申込フラグ → 仮申込フラグ
		if (inMap == null || inMap.get("kari_mskm_flg") == null || "".equals(inMap.get("kari_mskm_flg"))) {
			template.setNull(EKK0011D020CBSMsg.KARI_MSKM_FLG);
		} else {
			template.set(EKK0011D020CBSMsg.KARI_MSKM_FLG, (String) inMap.get("kari_mskm_flg"));
		}
		
		// 申込内容承認登録マップ.リファラー → リファラー
		if (inMap == null || inMap.get("referer") == null || "".equals(inMap.get("referer"))) {
			template.setNull(EKK0011D020CBSMsg.REFERER);
		} else {
			template.set(EKK0011D020CBSMsg.REFERER, (String) inMap.get("referer"));
		}
		
		// 申込内容承認登録マップ.関西電力お客様情報授受同意有無 → 関西電力お客様情報授受同意有無
		if (inMap == null || inMap.get("kepco_custinfo_juju_doi_um") == null || "".equals(inMap.get("kepco_custinfo_juju_doi_um"))) {
			template.setNull(EKK0011D020CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM);
		} else {
			template.set(EKK0011D020CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM, (String) inMap.get("kepco_custinfo_juju_doi_um"));
		}
		
		// 申込内容承認登録マップ.照査前連絡事項要否 → 照査前連絡事項要否
		if (inMap == null || inMap.get("shosa_bf_rrk_jiko_yh") == null || "".equals(inMap.get("shosa_bf_rrk_jiko_yh"))) {
			template.setNull(EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO_YH);
		} else {
			template.set(EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO_YH, (String) inMap.get("shosa_bf_rrk_jiko_yh"));
		}
		
		// 申込内容承認登録マップ.照査前連絡事項 → 照査前連絡事項
		if (inMap == null || inMap.get("shosa_bf_rrk_jiko") == null || "".equals(inMap.get("shosa_bf_rrk_jiko"))) {
			template.setNull(EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO);
		} else {
			template.set(EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO, (String) inMap.get("shosa_bf_rrk_jiko"));
		}
		
		// 申込内容承認登録マップ.利用サービス継続種別コード → 利用サービス継続種別コード
		if (inMap == null || inMap.get("use_svc_keizk_sbt_cd") == null || "".equals(inMap.get("use_svc_keizk_sbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.USE_SVC_KEIZK_SBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.USE_SVC_KEIZK_SBT_CD, (String) inMap.get("use_svc_keizk_sbt_cd"));
		}
		
		// 申込内容承認登録マップ.コンシューマ営業用申込状態識別コード → コンシューマ営業用申込状態識別コード
		if (inMap == null || inMap.get("consmbsn_mskm_stat_skbt_cd") == null || "".equals(inMap.get("consmbsn_mskm_stat_skbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, (String) inMap.get("consmbsn_mskm_stat_skbt_cd"));
		}
		
		// 申込内容承認登録マップ.受付担当者識別コード → 受付担当者識別コード
		if (inMap == null || inMap.get("uk_tntsha_skbt_cd") == null || "".equals(inMap.get("uk_tntsha_skbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.UK_TNTSHA_SKBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.UK_TNTSHA_SKBT_CD, (String) inMap.get("uk_tntsha_skbt_cd"));
		}
		
		// 申込内容承認登録マップ.工事依頼情報連絡事項 → 工事依頼情報連絡事項
		if (inMap == null || inMap.get("koji_req_info_rrk_jiko") == null || "".equals(inMap.get("koji_req_info_rrk_jiko"))) {
			template.setNull(EKK0011D020CBSMsg.KOJI_REQ_INFO_RRK_JIKO);
		} else {
			template.set(EKK0011D020CBSMsg.KOJI_REQ_INFO_RRK_JIKO, (String) inMap.get("koji_req_info_rrk_jiko"));
		}
		
		// 申込内容承認登録マップ.申込経路識別コード → 申込経路識別コード
		if (inMap == null || inMap.get("mskm_route_skbt_cd") == null || "".equals(inMap.get("mskm_route_skbt_cd"))) {
			template.setNull(EKK0011D020CBSMsg.MSKM_ROUTE_SKBT_CD);
		} else {
			template.set(EKK0011D020CBSMsg.MSKM_ROUTE_SKBT_CD, (String) inMap.get("mskm_route_skbt_cd"));
		}
		
		// 申込内容承認登録マップ.代理店申込取次有無 → 代理店申込取次有無
		if (inMap == null || inMap.get("agnt_mskm_trtg_um") == null || "".equals(inMap.get("agnt_mskm_trtg_um"))) {
			template.setNull(EKK0011D020CBSMsg.AGNT_MSKM_TRTG_UM);
		} else {
			template.set(EKK0011D020CBSMsg.AGNT_MSKM_TRTG_UM, (String) inMap.get("agnt_mskm_trtg_um"));
		}
		
		templateArray = new CAANMsg[1];
		CAANMsg childTemplate = templateArray[0];
		if (childTemplate == null) {
			childTemplate = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
		}
		
		// 申込内容承認登録明細(Null設定)
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKMSHO_NO);					// 申込書番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.WEB_UK_NO);					// WEB受付番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKM_FORM_CD);					// 申込形態コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKM_DTL_SBT_CD);				// 申込明細種別コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.RRKS_KTAI_TELNO);				// 連絡先携帯電話番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.RRKS_OFFC_NM);					// 連絡先勤務先名
		childTemplate.setNull(EKK0011D020CBSMsg1List.DT_RRKS_TELNO);				// 昼間連絡先電話番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.NEW_MSKM_SBT_CD);				// 新規申込種別コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKM_OPTNTY_CD);				// 申込契機コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD);	// 宅内調査希望アポ期限年月日
		childTemplate.setNull(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD);		// 工事アポ連絡先指定コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_TELNO);			// 工事アポ連絡先電話番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.RRK_JIKO_ADD_DTM);				// 連絡事項登録年月日時分秒
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKM_RRKS_MLAD);				// 申込連絡先メールアドレス
		childTemplate.setNull(EKK0011D020CBSMsg1List.KOJI_PRG_TCHI_MLAD);			// 工事進捗通知メールアドレス
		childTemplate.setNull(EKK0011D020CBSMsg1List.RRK_JIKO);						// 連絡事項
		childTemplate.setNull(EKK0011D020CBSMsg1List.KJSC_TCH_KTAI_MLAD);			// 工事進捗通知携帯メールアドレス
		childTemplate.setNull(EKK0011D020CBSMsg1List.ML_SEND_JGI_FLG);				// メール送信除外フラグ
		childTemplate.setNull(EKK0011D020CBSMsg1List.ML_SEND_JGI_RSN_MEMO);			// メール送信除外理由メモ
		childTemplate.setNull(EKK0011D020CBSMsg1List.BMP_MSKM_RRKS_TLN);			// 番ポ申込連絡先電話番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.OP_SVC_HKTGI_UM);				// オプションサービス引継有無
		childTemplate.setNull(EKK0011D020CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM);		// 解約書類送付希望有無
		childTemplate.setNull(EKK0011D020CBSMsg1List.RRK_WAY_HOKI);					// 連絡手段補記
		childTemplate.setNull(EKK0011D020CBSMsg1List.NEWCONST_BUKKEN_CD);			// 新築物件コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.HUKKAT_ANKEN_FLG);				// 復活案件フラグ
		childTemplate.setNull(EKK0011D020CBSMsg1List.SAME_EQUIP_RE_MSKM_CD);		// 同一設備再申込コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD);		// 本人確認書類種別コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKMSHO_SBT_CD);				// 申込書種別コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.KEI_HUKA_CD);					// 契約付加コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MAP_TEMP_UM);					// 地図添付有無
		childTemplate.setNull(EKK0011D020CBSMsg1List.KCN_STB_MSKM_CNT);				// KCNSTB申込台数
		childTemplate.setNull(EKK0011D020CBSMsg1List.KCN_STB_KIND_CD);				// KCNSTB種類コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN);	// マンション設備システム連携用記事欄
		childTemplate.setNull(EKK0011D020CBSMsg1List.MANSION_ID);					// マンションID
		childTemplate.setNull(EKK0011D020CBSMsg1List.CATID);						// CAT-ID
		childTemplate.setNull(EKK0011D020CBSMsg1List.MKM_UK_SBT_CD);				// 申込受付種別コード
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM);	// 申込書取扱情報担当者名
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TELNO);		// 申込書取扱情報電話番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.MSKMSHO_DTL_NO);				// 申込書明細番号
		childTemplate.setNull(EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_NM);			// 本人確認書類名
		
		templateArray[0] = childTemplate;
		
		template.set(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST, templateArray);
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList (I) CAANMsgクラス 
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param fixedText
	 * @return 業務データ取得・書込用I/F
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsg_EKK0011D020(
																Map<?, ?> msgList,
																IRequestParameterReadWrite param,
																String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		// リターンコード取得
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = templates[0].getInt(JCMConstants.STATUS_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = null;
		
		retParam = this.editErrorInfo(param, templates, Integer.parseInt(rtnCode), fixedText, EKK0011D020CBSMsg.STATUS);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status)){
/* ++++++++++ v4.02.00 追加開始 ++++++++++ */
			if(!("0".equals(rtnCode) && 4 == status))
			{
/* ++++++++++ v4.02.00 追加終了 ++++++++++ */
				SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
				throw scCallEx;
			}
		}
		
		// 作業領域
		Map workMap = (Map)param.getMappingWorkArea();
		if (workMap == null) {
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 作業項目マップ
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		if (workDataMap == null) {
			workDataMap = new HashMap();
			workMap.put("WORK", workDataMap);
		}
		
		// 作業項目マップ.更新年月日時分秒 ← 更新年月日時分秒
		if (parentTemplate.isNull(EKK0011D020CBSMsg.UPD_DTM)) {
			workDataMap.put("ekk0011_upd_dtm", new String());
		} else {
			workDataMap.put("ekk0011_upd_dtm", parentTemplate.getString(EKK0011D020CBSMsg.UPD_DTM));
		}
		
		templateArray = parentTemplate.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		
		if (templateArray != null && templateArray.length > 0) {
			
			// 作業項目マップ.申込明細番号 ← 申込登録明細.申込明細番号
			if (templateArray[0].isNull(EKK0011D020CBSMsg1List.MSKM_DTL_NO)) {
				workDataMap.put("ekk0011_mskm_dtl_no", new String());
			} else {
				workDataMap.put("ekk0011_mskm_dtl_no", templateArray[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
			}
		}
		
		workMap.put("WORK", workDataMap);
		param.setMappingWorkArea(workMap);
		
		return retParam;
	}
	
	/**
	 * 申込明細照査・後続業務依頼SC実行
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param dataMap
	 * @param fixedText
	 * @param funcCode
	 * @throws RequestParameterException
	 */
	private void executeEKK0021C060(
										SessionHandle handle, 
										IRequestParameterReadWrite param, 
										ServiceComponentRequestInvoker scCall, 
										HashMap<String, Object> dataMap, 
										String fixedText, 
										String funcCode) throws RequestParameterException, Exception
	{
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		
		// 上りメッセージ作成
		paramMap = editInMsg_EKK0021C060(param, dataMap, funcCode);
		
		// サービスIFの実行
		result = scCall.run(paramMap, handle);
		
		// 実行結果の編集
		editOutMsg(result, param, fixedText, EKK0021C060CBSMsg.STATUS);
	}
	
	/**
	 * メッセージを作成します。(申込明細照査・後続業務依頼)
	 * 
	 * @param param
	 * @param inMap
	 * @param funcCode
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg_EKK0021C060(
															IRequestParameterReadWrite param, 
															HashMap<String, Object> inMap, 
															String funcCode) throws RequestParameterException
	{
		// 共通領域の情報の設定
		HashMap<String, Object> paramMap = editInMsg(param);
		
		CAANMsg template = new CAANMsg(EKK0021C060CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0021C060CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0021C060);
		// 機能コード
		template.set(EKK0021C060CBSMsg.FUNC_CODE, funcCode);
		// オペレータ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);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		
		// 作業領域から作業項目マップ取得
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		// 作業領域マップ.申込明細番号 → 申込明細番号
		if (workDataMap == null || workDataMap.get("ekk0011_mskm_dtl_no") == null || "".equals(workDataMap.get("ekk0011_mskm_dtl_no"))) {
			template.setNull(EKK0021C060CBSMsg.MSKM_DTL_NO);
		} else {
			template.set(EKK0021C060CBSMsg.MSKM_DTL_NO, (String) workDataMap.get("ekk0011_mskm_dtl_no"));
		}
		
		// 作業領域マップ.申込更新年月日時分秒 → 更新年月日時分秒（更新前）
		if (workDataMap == null || workDataMap.get("ekk0011_upd_dtm") == null || "".equals(workDataMap.get("ekk0011_upd_dtm"))) {
			template.setNull(EKK0021C060CBSMsg.UPD_DTM_BF);
		} else {
			template.set(EKK0021C060CBSMsg.UPD_DTM_BF, (String) workDataMap.get("ekk0011_upd_dtm"));
		}
		
		// 申込明細照査・後続業務依頼マップ.連絡事項登録年月日時分秒 → 連絡事項登録年月日時分秒
		if (inMap == null || inMap.get("rrk_jiko_add_dtm") == null || "".equals(inMap.get("rrk_jiko_add_dtm"))) {
			template.setNull(EKK0021C060CBSMsg.RRK_JIKO_ADD_DTM);
		} else {
			template.set(EKK0021C060CBSMsg.RRK_JIKO_ADD_DTM, (String) inMap.get("rrk_jiko_add_dtm"));
		}
		
		// 申込明細照査・後続業務依頼マップ.後続業務依頼年月日 → 後続業務依頼年月日
		if (inMap == null || inMap.get("kzkwrk_reqymd") == null || "".equals(inMap.get("kzkwrk_reqymd"))) {
			template.setNull(EKK0021C060CBSMsg.KZKWRK_REQYMD);
		} else {
			template.set(EKK0021C060CBSMsg.KZKWRK_REQYMD, (String) inMap.get("kzkwrk_reqymd"));
		}
		
		// 申込明細照査・後続業務依頼マップ.連絡事項 → 連絡事項
		if (inMap == null || inMap.get("rrk_jiko") == null || "".equals(inMap.get("rrk_jiko"))) {
			template.setNull(EKK0021C060CBSMsg.RRK_JIKO);
		} else {
			template.set(EKK0021C060CBSMsg.RRK_JIKO, (String) inMap.get("rrk_jiko"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 進捗登録SC実行
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param dataMap
	 * @param fixedText
	 * @param funcCode
	 * @throws RequestParameterException
	 */
	private void executeEKK1091D010(
										SessionHandle handle, 
										IRequestParameterReadWrite param, 
										ServiceComponentRequestInvoker scCall, 
										HashMap<String, Object> dataMap, 
										String fixedText, 
										String funcCode) throws RequestParameterException, Exception
	{
		Map<?, ?> result = null;
		HashMap<String, Object> paramMap = null;
		
		// 上りメッセージ作成
		paramMap = editInMsg_EKK1091D010(param, dataMap, funcCode);
		
		// サービスIFの実行
		result = scCall.run(paramMap, handle);
		
		// 実行結果の編集
		editOutMsg(result, param, fixedText, EKK1091D010CBSMsg.STATUS);
	}
	
	/**
	 * メッセージを作成します。(進捗登録)
	 * 
	 * @param param
	 * @param inMap
	 * @param funcCode
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg_EKK1091D010(
															IRequestParameterReadWrite param, 
															HashMap<String, Object> inMap, 
															String funcCode) throws RequestParameterException
	{
		// 共通領域の情報の設定
		HashMap<String, Object> paramMap = editInMsg(param);
		
		CAANMsg template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010);
		// 機能コード
		template.set(EKK1091D010CBSMsg.FUNC_CODE, funcCode);
		// オペレータ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);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		
		// 作業領域から作業項目マップ取得
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		// 作業領域マップ.申込明細番号 → 申込明細番号
		if (workDataMap == null || workDataMap.get("ekk0011_mskm_dtl_no") == null || "".equals(workDataMap.get("ekk0011_mskm_dtl_no"))) {
			template.setNull(EKK1091D010CBSMsg.MSKM_DTL_NO);
		} else {
			template.set(EKK1091D010CBSMsg.MSKM_DTL_NO, (String) workDataMap.get("ekk0011_mskm_dtl_no"));
		}
		
		// 作業領域マップ.オプションサービス契約番号 → オプションサービス契約番号
		if (workDataMap == null || workDataMap.get("ekk0381_op_svc_kei_no") == null || "".equals(workDataMap.get("ekk0381_op_svc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.OP_SVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.OP_SVC_KEI_NO, (String) workDataMap.get("ekk0381_op_svc_kei_no"));
		}
		
		// 進捗登録マップ.請求契約番号 → 請求契約番号
		if (inMap == null || inMap.get("seiky_kei_no") == null || "".equals(inMap.get("seiky_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.SEIKY_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SEIKY_KEI_NO, (String) inMap.get("seiky_kei_no"));
		}
		
		// 進捗登録マップ.請求方法番号（口座） → 請求方法番号（口座）
		if (inMap == null || inMap.get("seiky_way_no_koza") == null || "".equals(inMap.get("seiky_way_no_koza"))) {
			template.setNull(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA);
		} else {
			template.set(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA, (String) inMap.get("seiky_way_no_koza"));
		}
		
		// 進捗登録マップ.請求方法番号（クレジットカード） → 請求方法番号（クレジットカード）
		if (inMap == null || inMap.get("seiky_way_no_crecard") == null || "".equals(inMap.get("seiky_way_no_crecard"))) {
			template.setNull(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD);
		} else {
			template.set(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD, (String) inMap.get("seiky_way_no_crecard"));
		}
		
		// 進捗登録マップ.サービス契約番号 → サービス契約番号
		if (inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.SVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String) inMap.get("svc_kei_no"));
		}
		
		// 進捗登録マップ.サービス契約内訳番号 → サービス契約内訳番号
		if (inMap == null || inMap.get("svc_kei_ucwk_no") == null || "".equals(inMap.get("svc_kei_ucwk_no"))) {
			template.setNull(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO, (String) inMap.get("svc_kei_ucwk_no"));
		}
		
		// 進捗登録マップ.サービス契約回線内訳番号 → サービス契約回線内訳番号
		if (inMap == null || inMap.get("svc_kei_kaisen_ucwk_no") == null || "".equals(inMap.get("svc_kei_kaisen_ucwk_no"))) {
			template.setNull(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, (String) inMap.get("svc_kei_kaisen_ucwk_no"));
		}
		
		// 進捗登録マップ.機器提供サービス契約番号 → 機器提供サービス契約番号
		if (inMap == null || inMap.get("kktk_svc_kei_no") == null || "".equals(inMap.get("kktk_svc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO, (String) inMap.get("kktk_svc_kei_no"));
		}
		
		// 進捗登録マップ.請求オプションサービス契約番号 → 請求オプションサービス契約番号
		if (inMap == null || inMap.get("seiopsvc_kei_no") == null || "".equals(inMap.get("seiopsvc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO, (String) inMap.get("seiopsvc_kei_no"));
		}
		
		// 進捗登録マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		if (inMap == null || inMap.get("sbop_svc_kei_no") == null || "".equals(inMap.get("sbop_svc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO, (String) inMap.get("sbop_svc_kei_no"));
		}
		
		// 進捗登録マップ.割引サービス契約番号 → 割引サービス契約番号
		if (inMap == null || inMap.get("wrib_svc_kei_no") == null || "".equals(inMap.get("wrib_svc_kei_no"))) {
			template.setNull(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO);
		} else {
			template.set(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO, (String) inMap.get("wrib_svc_kei_no"));
		}
		
		// 進捗登録マップ.異動区分 → 異動区分
		if (inMap == null || inMap.get("ido_div") == null || "".equals(inMap.get("ido_div"))) {
			template.setNull(EKK1091D010CBSMsg.IDO_DIV);
		} else {
			template.set(EKK1091D010CBSMsg.IDO_DIV, (String) inMap.get("ido_div"));
		}
		
		// 進捗登録マップ.異動年月日時分秒 → 異動年月日時分秒
		if (inMap == null || inMap.get("ido_dtm") == null || "".equals(inMap.get("ido_dtm"))) {
			template.setNull(EKK1091D010CBSMsg.IDO_DTM);
		} else {
			template.set(EKK1091D010CBSMsg.IDO_DTM, (String) inMap.get("ido_dtm"));
		}
		
		// 進捗登録マップ.進捗ステータス → 進捗ステータス
		if (inMap == null || inMap.get("prg_stat") == null || "".equals(inMap.get("prg_stat"))) {
			template.setNull(EKK1091D010CBSMsg.PRG_STAT);
		} else {
			template.set(EKK1091D010CBSMsg.PRG_STAT, (String) inMap.get("prg_stat"));
		}
		
		// 進捗登録マップ.進捗メモ → 進捗メモ
		if (inMap == null || inMap.get("prg_memo") == null || "".equals(inMap.get("prg_memo"))) {
			template.setNull(EKK1091D010CBSMsg.PRG_MEMO);
		} else {
			template.set(EKK1091D010CBSMsg.PRG_MEMO, (String) inMap.get("prg_memo"));
		}
		
		// 進捗登録マップ.進捗特記事項1 → 進捗特記事項1
		if (inMap == null || inMap.get("prg_tkjk_1") == null || "".equals(inMap.get("prg_tkjk_1"))) {
			template.setNull(EKK1091D010CBSMsg.PRG_TKJK_1);
		} else {
			template.set(EKK1091D010CBSMsg.PRG_TKJK_1, (String) inMap.get("prg_tkjk_1"));
		}
		
		// 進捗登録マップ.進捗特記事項2 → 進捗特記事項2
		if (inMap == null || inMap.get("prg_tkjk_2") == null || "".equals(inMap.get("prg_tkjk_2"))) {
			template.setNull(EKK1091D010CBSMsg.PRG_TKJK_2);
		} else {
			template.set(EKK1091D010CBSMsg.PRG_TKJK_2, (String) inMap.get("prg_tkjk_2"));
		}
		
		ArrayList inList = (ArrayList)inMap.get("EKK1091D010CBSMsg1List");
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST);
		
		if (templateArray == null) {
			templateArray = new CAANMsg[inList.size()];
		}
		
		if (inList != null) {
			for (int i = 0; i < inList.size(); i++) {
				HashMap childMap = (HashMap)inList.get(i);
				
				CAANMsg childTemplate = templateArray[i];
				if (childTemplate == null) {
					childTemplate = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
				}
				// 進捗登録マップ.異動理由明細.異動理由コード → 異動理由明細.異動理由コード
				if (childMap == null || childMap.get("ido_rsn_cd") == null || "".equals(childMap.get("ido_rsn_cd"))) {
					childTemplate.setNull(EKK1091D010CBSMsg1List.IDO_RSN_CD);
				} else {
					childTemplate.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String) childMap.get("ido_rsn_cd"));
				}
				
				// 進捗登録マップ.異動理由明細.異動理由メモ → 異動理由明細.異動理由メモ
				if (childMap == null || childMap.get("ido_rsn_memo") == null || "".equals(childMap.get("ido_rsn_memo"))) {
					childTemplate.setNull(EKK1091D010CBSMsg1List.IDO_RSN_MEMO);
				} else {
					childTemplate.set(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String) childMap.get("ido_rsn_memo"));
				}
				
				templateArray[i] = childTemplate;
			}
		}
		
		template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, templateArray);
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList (I) CAANMsgクラス 
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param fixedText
	 * @param pStatus
	 * @return 業務データ取得・書込用I/F
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsg(
													Map<?, ?> msgList,
													IRequestParameterReadWrite param,
													String fixedText, 
													String pStatus) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		// リターンコード取得
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = templates[0].getInt(JCMConstants.STATUS_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = null;
		
		retParam = this.editErrorInfo(param, templates, Integer.parseInt(rtnCode), fixedText, pStatus);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status)){
/* ++++++++++ v4.02.00 追加開始 ++++++++++ */
			if(!("0".equals(rtnCode) && 4 == status))
			{
/* ++++++++++ v4.02.00 追加終了 ++++++++++ */
				SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
				throw scCallEx;
			}
		}
		
		return retParam;
	}
	
	/**
	 * eo光テレビガイド誌冊数上限チェックCC実行
	 * 
	 * @param handle
	 * @param param
	 * @param dataMap
	 * @return boolean
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private boolean executeEohTvGuideUpplChkCC(
													SessionHandle handle, 
													IRequestParameterReadWrite param, 
													HashMap<String, Object> dataMap) throws Throwable
	{
		// パラメータ格納
		param.setData(FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC, new HashMap<String, Object>());
		
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC);
		
		// サービス契約番号
		outMap.put("svc_kei_no", (String)dataMap.get("svc_kei_no"));
		// 運用日付
		outMap.put("ope_date", (String)dataMap.get("ope_date"));
		// eo光テレビガイド誌申込数
		outMap.put("mskm_cnt", (String)dataMap.get("mskm_cnt"));
		
		// eo光テレビガイド誌冊数上限チェックCC実行
		JKKEohTvGuideUpplChkCC eohTvGuideUpplChkCC = new JKKEohTvGuideUpplChkCC();
		eohTvGuideUpplChkCC.executeChkUppl(handle, param, FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC);
		
		// 画面入力値：eo光テレビガイド誌申込数「０」
		if (TV_GUIDE_MSKM_CNT_ZERO.equals((String)dataMap.get("mskm_cnt")))
		{
			// 未チェック
			return true;
		}
		
		// チェック結果判定
		outMap = (HashMap<String, Object>)param.getData(FIXED_KEY_EOH_TVGUIDE_UPPL_CHK_CC);
		if (isBlank(outMap.get("err_msg")))
		{
			// エラーなし
			return true;
		}
		
		return false;
	}
	
	
	
	
	
	
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/**
	 * オプション開始予約データ存在チェック
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param idoRsvDtlCd
	 * @param dataMap
	 * @return String
	 * @throws Exception
	 */
	private boolean isExsistOpStaRsv(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText, 
			String idoRsvDtlCd, 
			HashMap<String, Object> dataMap) throws Exception
	{
		// 異動予約一覧照会
		Object[][] ekk1681b001In = 
		{
				{EKK1681B001CBSMsg.TEMPLATEID,			TEMPLATE_ID_EKK1681B001},
				{EKK1681B001CBSMsg.FUNC_CODE,			JPCModelConstant.FUNC_CD_1},
				{EKK1681B001CBSMsg.KEY_IDO_DIV,			JKKSvcConst.IDO_DIV_OPSETTE},
				{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD,	idoRsvDtlCd},
				{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,	JKKSvcConst.IDO_RSV_STAT_00},
				{EKK1681B001CBSMsg.KEY_OP_SVC_KEI_NO,	(String)dataMap.get("op_svc_kei_no")}
		};
		
		CAANMsg[] ekk1681b001Out = callSC(handle, scCall, param, fixedText, ekk1681b001In).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
		
		if(ekk1681b001Out != null && ekk1681b001Out.length > 0)
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		int returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(EZM0171B012CBSMsg.STATUS);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		setErrorInf(msg, (HashMap<String, Object>)param.getData(dataMapKey));
		
		//エラー情報のマップを取得
		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));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return msg;
	}
	
	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param, Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
	/**
	 * eo光テレビガイド誌申込数更新CC実行
	 * 
	 * @param handle
	 * @param param
	 * @param dataMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void executeEohTvGuideMskmCntUpdCC(
													SessionHandle handle, 
													IRequestParameterReadWrite param, 
													HashMap<String, Object> dataMap) throws Throwable
	{
		// パラメータ格納
		param.setData(FIXED_KEY_EOH_TVGUIDE_MSKM_CNT_UPD_CC, new HashMap<String, Object>());
		
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(FIXED_KEY_EOH_TVGUIDE_MSKM_CNT_UPD_CC);
		
		// サービス契約番号
		outMap.put("svc_kei_no", (String)dataMap.get("svc_kei_no"));
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
		// サービスステータス
		outMap.put("svc_kei_stat", (String)dataMap.get("svc_kei_stat"));
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
		// ＳＹＳＩＤ
		outMap.put("sysid", (String)dataMap.get("sysid"));
		// 処理モード
		outMap.put("tran_mode", (String)dataMap.get("tran_mode"));
		// オプションサービス契約番号
		outMap.put("op_svc_kei_no", (String)dataMap.get("op_svc_kei_no"));
		// オプションサービス契約ステータス
		outMap.put("op_svc_kei_stat", (String)dataMap.get("op_svc_kei_stat"));
		// 異動区分
		outMap.put("ido_div", (String)dataMap.get("ido_div"));
		// 基準日
		outMap.put("ope_date", (String)dataMap.get("ope_date"));
		// 終了年月日
		outMap.put("end_ymd", (String)dataMap.get("end_ymd"));
		// 更新年月日時分秒(更新前)
		outMap.put("upd_dtm_bf", (String)dataMap.get("upd_dtm_bf"));
		// ＫＥＹ＿オプションサービスコード:"B068"（ケーブルガイド誌）
		outMap.put("key_op_svc_cd", (String)dataMap.get("key_op_svc_cd"));
		// 親契約識別コード:"01"（サービス契約）
		outMap.put("oya_kei_skbt_cd", (String)dataMap.get("oya_kei_skbt_cd"));
		// キャンセル理由コード "20:取消（訂正）
		outMap.put("svc_cancel_rsn_cd", (String)dataMap.get("svc_cancel_rsn_cd"));
		// ケーブルガイド申込数
		outMap.put("cable_guide_mskm_cnt", (String)dataMap.get("cable_guide_mskm_cnt"));
		// ガイド誌送付先名
		outMap.put("guidemg_sohus_nm", (String)dataMap.get("guidemg_sohus_nm"));
		// ガイド誌送付先カナ名
		outMap.put("guidemg_sohus_kana", (String)dataMap.get("guidemg_sohus_kana"));
		// ガイド誌送付先住所コード
		outMap.put("guidemg_sohus_ad_cd", (String)dataMap.get("guidemg_sohus_ad_cd"));
		// ガイド誌送付先郵便番号
		outMap.put("guidemg_sohus_pcd", (String)dataMap.get("guidemg_sohus_pcd"));
		// ガイド誌送付先都道府県名
		outMap.put("guidemg_sohus_state_nm", (String)dataMap.get("guidemg_sohus_state_nm"));
		// ガイド誌送付先市区町村名
		outMap.put("guidemg_sohus_city_nm", (String)dataMap.get("guidemg_sohus_city_nm"));
		// ガイド誌送付先大字通称名
		outMap.put("guidemg_sohus_oaztsu_nm", (String)dataMap.get("guidemg_sohus_oaztsu_nm"));
		// ガイド誌送付先字丁目名
		outMap.put("guidemg_sohus_azcho_nm", (String)dataMap.get("guidemg_sohus_azcho_nm"));
		// ガイド誌送付先番地号
		outMap.put("guidemg_sohus_bnchigo", (String)dataMap.get("guidemg_sohus_bnchigo"));
		// ガイド誌送付先住所補記・建物名
		outMap.put("guidemg_sohus_adrttm", (String)dataMap.get("guidemg_sohus_adrttm"));
		// ガイド誌送付先住所補記・部屋番号
		outMap.put("guidemg_sohus_adrrm", (String)dataMap.get("guidemg_sohus_adrrm"));
		// ガイド誌送付先電話番号
		outMap.put("guidemg_sohus_telno", (String)dataMap.get("guidemg_sohus_telno"));
		// ガイド誌送付先住所手動入力フラグ
		outMap.put("gudmg_shs_ad_man_input_flg", (String)dataMap.get("gudmg_shs_ad_man_input_flg"));
		// ガイド誌送付先住所チェックレベル
		outMap.put("guidemg_sohus_ad_chk_lv", (String)dataMap.get("guidemg_sohus_ad_chk_lv"));
		// サービス開始年月日
		outMap.put("svc_staymd", (String)dataMap.get("svc_staymd"));
		// サービス終了年月日
		outMap.put("svc_endymd", (String)dataMap.get("svc_endymd"));
		// 即時/翌月
		outMap.put("skj_ykgt", (String)dataMap.get("skj_ykgt"));
		// ガイド誌申込フラグ
		outMap.put("guidemg_mskm_flg", (Boolean)dataMap.get("guidemg_mskm_flg"));
		
/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
		// ガイド誌送付先個別指定フラグ
		outMap.put("guidemg_shs_ksitei_flg", (String)dataMap.get("guidemg_shs_ksitei_flg"));
/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
		
		// eo光テレビガイド誌申込数更新CC実行
		JKKEohTvGuideMskmCntUpdCC eohTvGuideMskmCntUpdCC = new JKKEohTvGuideMskmCntUpdCC();
		eohTvGuideMskmCntUpdCC.executeUpd(handle, param, FIXED_KEY_EOH_TVGUIDE_MSKM_CNT_UPD_CC);
		
/* ++++++++++ v4.02.00 追加開始 ++++++++++ */
		if (outMap.get(GUIDEMG_SOHUS_AD_CHK_LV_ERR) != null && !"".equals(outMap.get(GUIDEMG_SOHUS_AD_CHK_LV_ERR))) {
			String chk_lv_err = (String)outMap.get(GUIDEMG_SOHUS_AD_CHK_LV_ERR);
			dataMap.put(GUIDEMG_SOHUS_AD_CHK_LV_ERR, chk_lv_err);
		}
/* ++++++++++ v4.02.00 追加終了 ++++++++++ */
	}
	
	/**
	 * ワンストップ対応履歴登録CC実行
	 * 
	 * @param handle
	 * @param param
	 * @param dataMap
	 * @param funcCode
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void executeOnestopRirekiAddCC(
												SessionHandle handle, 
												IRequestParameterReadWrite param, 
												HashMap<String, Object> dataMap, 
												String funcCode) throws Throwable
	{
		// パラメータ格納
		param.setData(FIXED_KEY_ONESTOP_RIREKI_ADD_CC, new HashMap<String, Object>());
		
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(FIXED_KEY_ONESTOP_RIREKI_ADD_CC);
		
/* ++++++++++ v4.00.01 追加開始 ++++++++++ */
		// 機能コード
		outMap.put("func_code", funcCode);
/* ++++++++++ v4.00.01 追加終了 ++++++++++ */
		// サービス契約番号
		outMap.put("svc_kei_no", (String)dataMap.get("svc_kei_no"));
		// ユーザーＩＤ
		outMap.put("user_id", (String)dataMap.get("user_id"));
		// ユーザー名
		outMap.put("user_nm", (String)dataMap.get("user_nm"));
		// 組織コード
		outMap.put("org_cd", (String)dataMap.get("org_cd"));
		// 組織名
		outMap.put("org_nm", (String)dataMap.get("org_nm"));
		// タイトルパラメータＩＤ
		outMap.put("title_param_id", (String)dataMap.get("title_param_id"));
		// ワンストップフラグ
		outMap.put("onestop_flg", (String)dataMap.get("onestop_flg"));
		// 回答内容編集リスト
		outMap.put("ans_list", (ArrayList)dataMap.get("ans_list"));
		
		// ワンストップ対応履歴登録CC実行
		JKKOnestopRirekiAddCC onestopRirekiAddCC = new JKKOnestopRirekiAddCC();
		onestopRirekiAddCC.rirekiAdd(handle, param, FIXED_KEY_ONESTOP_RIREKI_ADD_CC);
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param fixedText
	 * @param key
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfo(
														IRequestParameterReadWrite param, 
														CAANMsg[] templates,
														int returnCode,
														String fixedText, 
														String key) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(key);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// エラー情報の設定
		setErrorInf(template, (HashMap<String, Object>)param.getData(fixedText));
		
		return param;
	}
	
	/**
	 * 共通領域メッセージを作成します。
	 * 
	 * @param param
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		return paramMap;
	}
	
	/**
	 * エラー情報を設定します。
	 * 
	 * @param msg
	 * @param map
	 */
	@SuppressWarnings("unchecked")
	private void setErrorInf(CAANMsg msg, HashMap<String, Object> map)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			if (key.endsWith("_err"))
			{
				if (!msg.isNull(key))
				{
					if (!map.containsKey(key))
					{
						map.put(key, msg.getString(key));
					}
				}
			}
		}
	}
	
	/**
	 * 引数に値が設定されているか判定します。
	 * <br>
	 * @param	obj	判定する引数
	 * @return	boolean	引数に値が設定されている場合はtrue
	 */
	private boolean isBlank(Object obj)
	{
		if (obj == null || obj.equals(""))
		{
			return true;
		}
		
		return false;
	}
	
}