/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：同番移転情報更新コンポーネント部品クラス
 *  ソースファイル名：JKKDobanitenjhUpdCC.java
 *  作成者          ：FJ
 *  日付            ：2012年6月27日
 *＜機能概要＞
 *  同番移転情報の更新、取消を行う部品クラス。
 *
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/06/27  FJ          新規作成
 *  v20.00.00   2015/12/15  FJ)森脇     OM-2015-0002926対応
 *
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C060CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0021C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171B010CBSMsg;

@SuppressWarnings({"unchecked"})
public class JKKDobanitenjhUpdCC extends AbstractCommonComponent {

	//*********************************************
	//                ユーザ定義
	//*********************************************
	/** ユーザデータのマップキー */
	private static final String USER_DATA_KEY_KKSV059710CC = "KKSV059710CC";
	/** ユーザデータのマップキー */
	private static final String USER_DATA_KEY_KKSV059810CC = "KKSV059810CC";
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	//*********************************************
	//                サービスIF
	//*********************************************
	
	/** サービス契約一意照会 */
	private static final String EKK0081A010 = "EKK0081A010";
	
	/** コード名称管理一覧照会 */
	private static final String EZM0171B010 = "EZM0171B010";
	
	/** サービス契約内訳一意照会 */
	private static final String EKK0161A010 = "EKK0161A010";
	
	/** サービス契約内訳＜eo光電話＞一意照会 */
	private static final String EKK0191A010 = "EKK0191A010";
	
	/** サービス契約内訳＜eo光電話＞情報変更 */
	private static final String EKK0191C060 = "EKK0191C060";
	
	/** 同番移転一意照会 */
	private static final String ETU0021A010 = "ETU0021A010";
	
	/** 同番移転取消依頼 */
	private static final String ETU0021C030 = "ETU0021C030";
	
	//******************************************
	//             機能コード
	//******************************************
	/** 機能コード；１ */
	private static final String FUNC_CD_1 = "1";
	/** 機能コード：２ */
	private static final String FUNC_CD_2 = "2";
	/** 機能コード：３ */
	private static final String FUNC_CD_3 = "3";
	// OM-2015-0002926 ADD START
	/** 機能コード：４ */
	private static final String FUNC_CD_4 = "4";
	// OM-2015-0002926 ADD END
	
	//******************************************
	//             ユーザ定義文字列
	//******************************************
	// IT1-2013-0000291 2013/02/26 MOD START
//	private static String fixText = null;
	private String fixText = null;
	// IT1-2013-0000291 2013/02/26 MOD END
	
	/** 更新処理 */
	private static final String CTRL_CD_UPD = "0";
	
	/** 同番移転可否調査結果登録リスト */
	private static final String[] KEYARRAY_DOBANITEN_JDG_CD = { "cd_sbt_cd",
			"cd_sbt_nm", "cd_sbt_setmei", "cd_div", "cd_div_nm", "cd_div_ali",
			"cd_tstaymd", "cd_tendymd", "dsp_jun", "shk_dsp_cd",
			"shk_dsp_cd_nm" };
	
	
	/**
	 * 同番移転情報更新初期表示用メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite initDobanitenjh(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();
		
		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);
		// 引継ぎ情報取得
		work = getHktgData(userData);
		
		// サービス契約一意照会（最終更新日時取得）
		callEKK0081A010SC(param, handle, work, resultHash, fixedText);
		
		// コード名称管理一覧照会
		callEZM0171B010SC(param, handle, work, resultHash, fixedText);
		
		// 同番移転一意照会
		callETU0021A010SC(param, handle, work, resultHash);
		
		// 返却用に取得データを編集
		editReturnMapInit(userData, resultHash);
		
		// 処理終了
		return param;
	}
	
	
	public IRequestParameterReadWrite updDobanitenIni(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		
		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);
		
		// 引継ぎ情報取得
		work = getHktgData(userData);
		
		// 更新処理、取消処理判断
		if (CTRL_CD_UPD.equals((String)work.get("ctrl_cd")))
		{
			// 更新
			param = updDobanitenjh(handle, param, work, userData);
		}
		else
		{
			// 取消
			param = clDobanitenjh(handle, param, work, userData);
		}
		
		return param;
	}
	
	/**
	 * 同番移転情報更新メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite updDobanitenjh(SessionHandle handle,
			IRequestParameterReadWrite param, HashMap<String, Object> work,
			Map<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> resultHash= new HashMap<String, Object>();
		
		// 同番移転一意照会
		callETU0021A010SC(param, handle, work, resultHash);
		
		// サービス契約内訳一意照会
		callEKK0161A010SC(param, handle, work, resultHash);
		
		// サービス契約内訳<eo光電話>一意照会
		callEKK0191A010SC(param, handle, work, resultHash);
		
		// サービス契約内訳<eo光電話>情報変更
		callEKK0191C060SC(param, handle, work, resultHash);
		
		// 返却用に取得データを編集
		editReturnMapUpd(userData, resultHash);
		
		// 処理終了
		return param;
	}
	
	/**
	 * 同番移転情報取消メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite clDobanitenjh(SessionHandle handle,
			IRequestParameterReadWrite param, HashMap<String, Object> work,
			Map<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> resultHash= new HashMap<String, Object>();
		
		// 同番移転一意照会
		callETU0021A010SC(param, handle, work, resultHash);
		
		// 同番移転取消依頼
		callETU0021C030SC(param, handle, work, resultHash);
		
		// 返却用に取得データを編集
		editReturnMapUpd(userData, resultHash);
		
		// 処理終了
		return param;
	}
	
	/**
	 * 返却用に取得データを編集しセットする
	 * @param param
	 * @param resultHash
	 * @throws Throwable 
	 */
	private void editReturnMapInit(Map<String, Object> userData, HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> svcKeiMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> svcKeiList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> dobanitenMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dobanitenList = new ArrayList<HashMap<String, Object>>();
		
		///////// サービス契約一意照会結果 /////////
		CAANMsg[] eKK0081A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if (eKK0081A010CBSMSG1list != null && eKK0081A010CBSMSG1list.length > 0)
		{
			HashMap<String, Object> eKK0081A010CBSMSG1 = eKK0081A010CBSMSG1list[0].getMsgData();
			
			// サービス契約番号
			svcKeiMap.put("svc_svc_kei_no", (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.SVC_KEI_NO));
			// 最終更新日時
			svcKeiMap.put("last_upd_dtm", (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
			
			svcKeiList.add(svcKeiMap);
		}
		userData.put("svcKeiList", svcKeiList);
		
		///////// コード名称管理一覧照会結果 /////////
		CAANMsg[] eZM0171B010CBSMSG1list = (CAANMsg[])resultHash.get(EZM0171B010CBSMsg.EZM0171B010CBSMSG1LIST);
		
		userData.put("dobaniten_jdg_list", copyMsgsList(eZM0171B010CBSMSG1list, KEYARRAY_DOBANITEN_JDG_CD));
		
		///////// 同番移転一意照会結果 /////////
		editReturnMapUpd(userData, resultHash);
		
	}

	/**
	 * 返却用に取得データを編集しセットする
	 * @param userData
	 * @param resultHash
	 * @throws Throwable
	 */
	private void editReturnMapUpd(Map<String, Object> userData, HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> dobanitenMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dobanitenList = new ArrayList<HashMap<String, Object>>();
		
		// 同番移転一意照会結果
		CAANMsg[] eTU0021A010CBSMSG1list = (CAANMsg[])resultHash.get(ETU0021A010CBSMsg.ETU0021A010CBSMSG1LIST);
		
		if (eTU0021A010CBSMSG1list != null && eTU0021A010CBSMSG1list.length > 0)
		{
			HashMap<String, Object> eTU0021A010CBSMSG1 = eTU0021A010CBSMSG1list[0].getMsgData();
			
			// 同番移転可否
			dobanitenMap.put("dobaniten_kh", (String)eTU0021A010CBSMSG1.get("dobaniten_kh"));
			// 同番移転ステータス
			dobanitenMap.put("dobaniten_stat", (String)eTU0021A010CBSMSG1.get("dobaniten_stat"));
		}
		
		dobanitenList.add(dobanitenMap);
		
		userData.put("dobanitenList", dobanitenList);
	}
	
	/**
	 * 全処理共通（引継ぎデータ取得）
	 * @param userData
	 * @return
	 */
	private HashMap<String, Object> getHktgData(Map<String, Object> userData)
	{
		
		HashMap<String, Object> work = new HashMap<String, Object>();
		// 顧客契約引継ぎリスト取得
		ArrayList cust_kei_hktgi_list = (ArrayList)userData.get("cust_kei_hktgi_list");
		// サービス契約情報取得（初期表示処理時はNULL）
		ArrayList svcKeiList = (ArrayList)userData.get("svcKeiList");
		HashMap<String, Object> custHktgiMap = (HashMap)cust_kei_hktgi_list.get(0);
		
		// お客様ID（初期表示）
		work.put("svc_kei_no", (String)custHktgiMap.get("svc_kei_no"));
		
		// サービス契約内訳番号（更新時）
		work.put("svc_kei_ucwk_no", (String)custHktgiMap.get("svc_kei_ucwk_no"));
		
		// 同番移転番号
		work.put("dobaniten_no", (String)custHktgiMap.get("dobaniten_no"));
		
		// 異動区分
		work.put("ido_div", "00045");
		
		// サービス契約情報（更新時のみ使用）
		if (svcKeiList != null && svcKeiList.size() != 0)
		{
			HashMap<String, Object> svcKeiMap = (HashMap)svcKeiList.get(0);
			// 最終更新日時分秒
			work.put("last_upd_dtm", (String)svcKeiMap.get("last_upd_dtm"));
		}
		
		// 機能コード（更新時）
		work.put("func_code", (String)userData.get("func_code"));
		
		// 可否調査結果登録
		work.put("dobaniten_jdg_cd", (String)userData.get("dobaniten_jdg_cd"));
		
		// 更新取消区分
		work.put("ctrl_cd", (String)userData.get("ctrl_kbn"));
		return work;
	}
	
	/**
	 * サービス契約一意照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0081A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, String fixedText) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0081A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		mappingEKK0081A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEKK0081A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0081A010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081A010CBSMsg.TEMPLATEID, EKK0081A010);

		// 機能コード--サービス契約一意照会
		template.set(EKK0081A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));

		// ＫＥＹ＿予約適用年月日
		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
	}
	
	/**
	 * コード名称管理一覧照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEZM0171B010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, String fixedText) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EZM0171B010への呼び出しパラメータ設定
		template = new CAANMsg(EZM0171B010CBSMsg.class.getName());
		mappingEZM0171B010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEZM0171B010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEZM0171B010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EZM0171B010CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(EZM0171B010CBSMsg.TEMPLATEID, EZM0171B010);
		
		// 機能コード-- コード名称管理一覧照会
		template.set(EZM0171B010CBSMsg.FUNC_CODE, FUNC_CD_3);
		
		// CD00658:同番移転可否調査結果コード
		// ＫＥＹ＿コード種別コード
		template.set(EZM0171B010CBSMsg.KEY_CD_SBT_CD, "CD00658");
		
	}
	
	/**
	 * サービス契約内訳一意照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0161A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap work,
			HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0161A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0161A010CBSMsg.class.getName());
		mappingEKK0161A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEKK0161A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0161A010InMsg(CAANMsg template, HashMap work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0161A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0161A010CBSMsg.TEMPLATEID, EKK0161A010);

		// 機能コード--サービス契約内訳一意照会
		template.set(EKK0161A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, (String)work.get("svc_kei_ucwk_no"));

		// ＫＥＹ＿予約適用年月日
		template.set(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
	}
	
	/**
	 * サービス契約内訳＜eo光電話＞一意照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0191A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap work,
			HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		mappingEKK0191A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEKK0191A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0191A010InMsg(CAANMsg template, HashMap work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191A010CBSMsg.TEMPLATEID, EKK0191A010);

		// 機能コード--サービス契約内訳＜eo光電話＞一意照会
		// OM-2015-0002926 MOD START
//		template.set(EKK0191A010CBSMsg.FUNC_CODE, FUNC_CD_2);
		template.set(EKK0191A010CBSMsg.FUNC_CODE, FUNC_CD_4);
		// OM-2015-0002926 MOD END

		// サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, (String)work.get("svc_kei_ucwk_no"));

	}
	
	/**
	 * サービス契約内訳＜eo光電話＞情報変更照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0191C060SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap work,
			HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191C060への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191C060CBSMsg.class.getName());
		mappingEKK0191C060InMsg(template, work, resultHash);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEKK0191C060の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0191C060InMsg(CAANMsg template, HashMap work, HashMap<String, Object> resultHash)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191C060CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191C060CBSMsg.TEMPLATEID, EKK0191C060);

		// 機能コード--サービス契約内訳＜eo光電話＞一意照会
		template.set(EKK0191C060CBSMsg.FUNC_CODE, (String)work.get("func_code"));

		// サービス契約内訳一意照会結果取得
		CAANMsg[] eKK0161A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		HashMap<String, Object> eKK0161A010CBSMSG1 = eKK0161A010CBSMSG1list[0].getMsgData();

		// サービス契約内訳＜eo光電話＞一意照会結果取得
		CAANMsg[] eKK0191A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		HashMap<String, Object> eKK0191A010CBSMSG1 = eKK0191A010CBSMSG1list[0].getMsgData();
		
		
		// サービス契約内訳番号
		template.set(EKK0191C060CBSMsg.SVC_KEI_UCWK_NO, (String)eKK0161A010CBSMSG1.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));

		// 申込明細番号	
		template.set(EKK0191C060CBSMsg.MSKM_DTL_NO, (String)eKK0161A010CBSMSG1.get(EKK0161A010CBSMsg1List.MSKM_DTL_NO));

		// サービス利用開始希望時間帯コード	svc_uest_kbtmz_cd
		template.set(EKK0191C060CBSMsg.SVC_UEST_KBTMZ_CD, (String)eKK0161A010CBSMSG1.get(EKK0161A010CBSMsg1List.SVC_UEST_KBTMZ_CD));

		// サービス利用開始希望時間コード	svc_uest_kbtm_cd
		template.set(EKK0191C060CBSMsg.SVC_UEST_KBTM_CD, (String)eKK0161A010CBSMSG1.get(EKK0161A010CBSMsg1List.SVC_UEST_KBTM_CD));

		// 違約金発生コード	pnlty_hassei_cd
		template.set(EKK0191C060CBSMsg.PNLTY_HASSEI_CD, (String)eKK0161A010CBSMSG1.get(EKK0161A010CBSMsg1List.PNLTY_HASSEI_CD));

		// 異動区分	ido_div
		template.set(EKK0191C060CBSMsg.IDO_DIV, (String)work.get("ido_div"));

		// 電話番号	telno
		template.set(EKK0191C060CBSMsg.TELNO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TELNO));

		// 電話番号使用場所番号	telno_use_place_no
		template.set(EKK0191C060CBSMsg.TELNO_USE_PLACE_NO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TELNO_USE_PLACE_NO));

		// 緊急通報用住所コード	emg_ad_cd
		template.set(EKK0191C060CBSMsg.EMG_AD_CD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_AD_CD));

		// 緊急通報用補正郵便番号	emg_hosei_pcd
		template.set(EKK0191C060CBSMsg.EMG_HOSEI_PCD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_HOSEI_PCD));

		// 緊急通報用番地号	emg_bnchigo
		template.set(EKK0191C060CBSMsg.EMG_BNCHIGO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_BNCHIGO));

		// 緊急通報用住所補記・建物名	emg_adrttm
		template.set(EKK0191C060CBSMsg.EMG_ADRTTM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_ADRTTM));

		// 緊急通報用住所補記・部屋番号	emg_adrrm
		template.set(EKK0191C060CBSMsg.EMG_ADRRM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_ADRRM));

		//template.set(EKK0191C060CBSMsg.EMG_KSH_KSITEI_FLG, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_KSH_KSITEI_FLG));
		
		// 緊急通報用契約者名	emg_ksh_nm
		template.set(EKK0191C060CBSMsg.EMG_KSH_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_KSH_NM));

		// 緊急通報用契約者カナ名	emg_ksh_kana
		template.set(EKK0191C060CBSMsg.EMG_KSH_KANA, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_KSH_KANA));

		// 初回CDR発生年月日	first_cdr_hassei_ymd
		template.set(EKK0191C060CBSMsg.FIRST_CDR_HASSEI_YMD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.FIRST_CDR_HASSEI_YMD));

		// 電話番号順番	telno_jun
		template.set(EKK0191C060CBSMsg.TELNO_JUN, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TELNO_JUN));

		// NTT番号案内有無	ntt_no_guide_um
		template.set(EKK0191C060CBSMsg.NTT_NO_GUIDE_UM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.NTT_NO_GUIDE_UM));

		// ハローページ掲載有無	hellopage_keisai_um
		template.set(EKK0191C060CBSMsg.HELLOPAGE_KEISAI_UM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.HELLOPAGE_KEISAI_UM));

		// 通話明細公開要否	tuwa_dtl_kokai_yh
		template.set(EKK0191C060CBSMsg.TUWA_DTL_KOKAI_YH, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TUWA_DTL_KOKAI_YH));

		// 電番事前通知コード	tel_no_pre_tchi_cd
		template.set(EKK0191C060CBSMsg.TEL_NO_PRE_TCHI_CD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TEL_NO_PRE_TCHI_CD));

		// 通信事業者コード	tsjgs_cd
		template.set(EKK0191C060CBSMsg.TSJGS_CD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TSJGS_CD));

		// 手動切替予定年月日時分秒	man_switch_rsv_dtm
		template.set(EKK0191C060CBSMsg.MAN_SWITCH_RSV_DTM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.MAN_SWITCH_RSV_DTM));

		// タウンページ掲載カナ名	townpage_keisai_kana
		template.set(EKK0191C060CBSMsg.TOWNPAGE_KEISAI_KANA, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_KANA));

		// タウンページ掲載名	townpage_keisai_nm
		template.set(EKK0191C060CBSMsg.TOWNPAGE_KEISAI_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_NM));

		// VA宅内機器型式コード	va_taknkiki_model_cd
		template.set(EKK0191C060CBSMsg.VA_TAKNKIKI_MODEL_CD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.VA_TAKNKIKI_MODEL_CD));

		// VA機器製造番号	va_kiki_seizo_no
		template.set(EKK0191C060CBSMsg.VA_KIKI_SEIZO_NO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.VA_KIKI_SEIZO_NO));

		// VAポート番号	va_port_no
		template.set(EKK0191C060CBSMsg.VA_PORT_NO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.VA_PORT_NO));

		// 更新年月日時分秒(更新前)	upd_dtm_bf
		template.set(EKK0191C060CBSMsg.UPD_DTM_BF, (String)work.get("last_upd_dtm"));

		// 事務手数料自動適用要否	rule0059_auto_aply
		template.set(EKK0191C060CBSMsg.RULE0059_AUTO_APLY, "0");

		// 同番移転申込有無	dobaniten_mskm_um
		template.set(EKK0191C060CBSMsg.DOBANITEN_MSKM_UM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.DOBANITEN_MSKM_UM));

		// 同番移転依頼制御コード	dobaniten_req_ctrl_cd
		template.set(EKK0191C060CBSMsg.DOBANITEN_REQ_CTRL_CD, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.DOBANITEN_REQ_CTRL_CD));

		// 同番移転判定コード	dobaniten_jdg_cd
		template.set(EKK0191C060CBSMsg.DOBANITEN_JDG_CD, (String)work.get("dobaniten_jdg_cd"));
		
		//↓↓↓2012-10-22追加　ロット２IT1-2012-0001473横展開対応（ＩＮ項目追加）↓↓↓
		// 緊急通報用住所チェックレベル
		template.set(EKK0191C060CBSMsg.EMG_AD_CHK_LV, "0");

		// 緊急通報用契約者個別指定フラグ
		template.set(EKK0191C060CBSMsg.EMG_KSH_KSITEI_FLG, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_KSH_KSITEI_FLG));
		//↑↑↑2012-10-22追加　ロット２IT1-2012-0001473横展開対応（ＩＮ項目追加）↑↑↑
		// IT1-2012-0001565 2012/10/29 start
		// 緊急通報用都道府県名
		template.set(EKK0191C060CBSMsg.EMG_STATE_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_STATE_NM));
		
		// 緊急通報用市区町村名
		template.set(EKK0191C060CBSMsg.EMG_CITY_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_CITY_NM));
		
		// 緊急通報用大字通称名
		template.set(EKK0191C060CBSMsg.EMG_OAZTSU_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_OAZTSU_NM));
		
		// 緊急通報用字丁目名
		template.set(EKK0191C060CBSMsg.EMG_AZCHO_NM, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.EMG_AZCHO_NM));
		// IT1-2012-0001565 2012/10/29 end
		
		// OT-2013-0000311 2013/03/30 start
		// VA機器変更NO
		template.set(EKK0191C060CBSMsg.VA_KIKI_CHG_NO, (String)eKK0191A010CBSMSG1.get(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO));
		// OT-2013-0000311 2013/03/30 end
	}
	
	/**
	 * 同番移転一意照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callETU0021A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap work,
			HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// ETU0021A010への呼び出しパラメータ設定
		template = new CAANMsg(ETU0021A010CBSMsg.class.getName());
		mappingETU0021A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してETU0021A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingETU0021A010InMsg(CAANMsg template, HashMap work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new ETU0021A010CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(ETU0021A010CBSMsg.TEMPLATEID, ETU0021A010);
		
		// 機能コード--同番移転一意照会
		template.set(ETU0021A010CBSMsg.FUNC_CODE, FUNC_CD_2);
		
		// 同番移転番号
		template.set(ETU0021A010CBSMsg.KEY_DOBANITEN_NO, (String)work.get("dobaniten_no"));
		
	}
	
	/**
	 * 同番移転取消依頼SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callETU0021C030SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap work,
			HashMap<String, Object> resultHash) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// ETU0021C030への呼び出しパラメータ設定
		template = new CAANMsg(ETU0021C030CBSMsg.class.getName());
		mappingETU0021C030InMsg(template, resultHash);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してETU0021C030の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingETU0021C030InMsg(CAANMsg template, HashMap resultHash)
	{
		// 同番移転一意照会結果取得
		CAANMsg[] eTU0021A010CBSMSG1list = (CAANMsg[])resultHash.get(ETU0021A010CBSMsg.ETU0021A010CBSMSG1LIST);
		HashMap<String, Object> eTU0021A010CBSMSG1 = eTU0021A010CBSMSG1list[0].getMsgData();
		
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new ETU0021C030CBSMsg().getContents());
		
		// テンプレートID(SIFのID)
		template.set(ETU0021C030CBSMsg.TEMPLATEID, ETU0021C030);
		
		// 機能コード--同番移転取消依頼
		template.set(ETU0021C030CBSMsg.FUNC_CODE, FUNC_CD_1);
		
		// 同番移転番号
		template.set(ETU0021C030CBSMsg.DOBANITEN_NO, (String)eTU0021A010CBSMSG1.get(ETU0021A010CBSMsg1List.DOBANITEN_NO));
		
		// 世代登録年月日時分秒
		template.set(ETU0021C030CBSMsg.GENE_ADD_DTM, (String)eTU0021A010CBSMSG1.get(ETU0021A010CBSMsg1List.GENE_ADD_DTM));

		// 更新前更新年月日時分秒
		template.set(ETU0021C030CBSMsg.UPD_DTM_BF, (String)eTU0021A010CBSMSG1.get(ETU0021A010CBSMsg1List.UPD_DTM));

	}
	
	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * 
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Throwableがスローされます 。
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		HashMap<String, Object> map = new HashMap<String, Object>();
		// SCインプット共通データ
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		map.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		map.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		map.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		map.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		map.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		map.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		map.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		map.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		map.put(JCMConstants.TEMPLATE_LIST_KEY, null);

		return map;
	}
	
	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		return param;
	}
	
	/**
	 * 業務データの取得処理です。
	 * 
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}
	
	/**
	 * Nullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];

			//Nullでマッピング
			msg.setNull((String)element);
			
		}
		
	}
	
	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly 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;
		
	}
	
	/**
	 * 項目がNULLの場合は空白を設定する（住所用）
	 * @param arg
	 * @return
	 */
	private String setEmtpyString(String arg)
	{
		
		if (arg == null){
			arg = "";
		}
		
		return arg;
	}
	
	/**
	 * 値がnullか空白かのチェック
	 * @param arg
	 * @return 値がnullまたは空白の場合true
	 */
	private boolean isNullorEmpty(String arg)
	{
		if (arg == null || "".equals(arg))
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * エラーチェック処理です。 <br>
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws SCCallException
	 */
	private void errChk(Map<?, ?> msgList) throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * 結果をリスト形式に変換する
	 * @param msgs
	 * @param keyArray
	 * @return
	 * @throws Throwable 
	 */
	private List<Map<String, Object>> copyMsgsList(CAANMsg[] msgs, String[] keyArray) throws Throwable
	{
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		for (int i = 0; i < msgs.length; i++)
		{
			Map<String, Object> map = new HashMap<String, Object>();
			for (int j = 0; j < keyArray.length; j++)
			{
				map.put(keyArray[j], msgs[i].getString(keyArray[j]));
			}
			list.add(map);
		}
		return list;
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param)
			throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixText);
		
		// ユーザデータ情報にエラー情報をマッピング
		Object[][] contents = null;
		if (EKK0081A010.equals(templateId))
		{
			contents = new EKK0081A010CBSMsg().getContents();
		}
		else if (EZM0171B010.equals(templateId))
		{
			contents = new EZM0171B010CBSMsg().getContents();
		}
		
		for (int i = 0; contents != null && i < contents.length; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
}
