/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCKMailSendRirekiSearchCC
*	ソースファイル名：JCKMailSendRirekiSearchCC.java
*	作成者			：Fujitsu
*	日付			：2011年11月23日
*＜機能概要＞
*	メール送信履歴照会の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/23	Fujitsu		新規作成
*	v5.00.00	2013/07/10	Fujitsu		【LT-2013-0000377】対応
*	v7.00.00	2014/04/04	FJ)澁谷		【TAI-2014-0000010】対応
*   v29.00.00   2017/01/06  FJ) 二村    【ANK-3112-00-00】訪販チャネルのタブレット対応
*   v65.00.00	2023/11/14	FJ)北村		【ANK-4346-00-00】【eo定期】CCMG再構築対応 新規作成
*   v74.00.00	2025/02/17	FJ)藤井		【ANK-4656-00-00】eo光シンプルプラン提供(STEP3)
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.lang3.time.DateFormatUtils;

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.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.JCKStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCNStringUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA0290001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0290001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1121B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1121B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1121B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1121B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1121B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1121B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1121B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1121B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1121B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1121B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg1List;

/**
 * メール送信履歴一覧を抽出します。<p>
 * <BR>
 * @author 富士通
 */
public class JCKMailSendRirekiSearchCC extends AbstractCommonComponent
{
	/**
	 * テンプレートID
	 */
	/** メール送信履歴一覧照会 */
	private static final String TEMPLATE_ID_01 = "EKK1121B001";
	/** コンテンツサービス一覧照会 */
	private static final String TEMPLATE_ID_02 = "ECN0041B001";
	/** コード名称管理一意照会 */
	private static final String TEMPLATE_ID_03 = "EZM0171A010";
	/** メール情報一覧照会（コンテンツサービスコード取得） */
	private static final String TEMPLATE_ID_04 = "EKK1121B002";
	/** メール情報一覧照会（eoID取得） */
	private static final String TEMPLATE_ID_05 = "EKK1121B003";
	/** メール情報一覧照会（送信先メールアドレス取得） */
	private static final String TEMPLATE_ID_06 = "EKK1121B004";
	/** メール情報一覧照会（メールコード取得） */
	private static final String TEMPLATE_ID_07 = "EKK1121B005";
	// ANK-3112-00-00 DEL START
//	/** サービス契約一覧照会（料金グループコード） */
//	private static final String TEMPLATE_ID_08 = "EKK0081B016";
	// ANK-3112-00-00 DEL END

// ANK-4346-00-00 ADD START
	/** テンプレートID(ECNA0290001) コンテンツメール情報取得（CCMG） */
	private static final String TEMPLATE_ID_ECNA0290001 = "ECNA0290001";

	/** テンプレートID(ECK0011A010) お客様一意照会 */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";

	/** リターンコード 正常値 */
	private static final String RETURN_CODE_OK = "00000";

	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";

	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";

	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";

	/** メールコード：コンテンツメール */
	private static final String MAIL_CD_CONT = "0000009001";

	/** ソート項目No：メールID */
	private static final String SORT_ITEM_NO_MAIL = "1";

	/** ソート項目No：eoID */
	private static final String SORT_ITEM_NO_EOID = "2";

	/** ソート項目No：送信日時 */
	private static final String SORT_ITEM_NO_SEND_DATE = "3";
// ANK-4346-00-00 ADD START

	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite searchList(SessionHandle handle, 
														IRequestParameterReadWrite param, 
														String fixedText) throws Throwable
	{
		// ◇ 上りマッピング処理
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = editInMsg(param);
		
// ANK-4346-00-00 ADD START
		// 検索対象メールの内容を取得する。
		HashMap<String, Object> inMap_cont = (HashMap<String, Object>)param.getData("CKSV002101CC");
		String key_search_trgt_mail = (String)inMap_cont.get("key_search_trgt_mail");

		// コンテンツメールの検索の場合、コンテンツメール取得処理を行う。
		if (JCKStrConst.SEARCH_TRGT_MAIL_CONT.equals(key_search_trgt_mail)) {
			// コンテンツ情報を取得し、返却する。
			return getContMailInfo(paramMap, param, handle, fixedText, inMap_cont);
		}
// ANK-4346-00-00 ADD END
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索リストを取得する
		CAANMsg[] searchList = msg.getCAANMsgList(EKK1121B001CBSMsg.EKK1121B001CBSMSG1LIST);
		
		// 最大検索件数超えエラーの場合
		if("2".equals(msg.getString(EKK1121B001CBSMsg.SEARCH_ERR_FLG)))
		{
			// ◇ 下りマッピング処理
			return editOutMsg(result, param, handle);
		}
		
		// 画面で選択していたデータが検索結果に存在するかチェックを行う
		boolean isMatchedKey = false;
		
		// ユーザデータ情報
		// 画面で選択されていたデータを取得する
		HashMap<String, Object> inParamMap = (HashMap<String, Object>)param.getData("CKSV002101CC");
		String key = (String)inParamMap.get("select_ml_sendno") + (String)inParamMap.get("select_send_cnt");
		
		// 検索条件キーが設定されている場合、マッチングによる存在チェックを行う。
		if (!"".equals(key) && searchList != null)
		{
			for (int i = 0; i < searchList.length; i++)
			{
				CAANMsg childTemplate = searchList[i];
				String listKey = childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_ID) + childTemplate.getString(EKK1121B001CBSMsg1List.SEND_CNT);
				
				// 選択データが検索結果にある場合はチェック終了
				if(key.equals(listKey))
				{
					isMatchedKey = true;
					break;
				}
			}
		}
		
		// 検索条件キーが設定されていない場合、選択データマッチングフラグを立てる
		if ("".equals(key))
		{
			isMatchedKey = true;
		}
		
		// トップページの検索であった場合は、再検索処理を行わない
		if ("1".equals(inParamMap.get("display_page_num")))
		{
			// トップページの検索でリストが取得できなかった場合
			if (searchList == null)
			{
				// 画面制御のため検索エラーフラグを1に設定する
				inParamMap.put("search_err_flg", "1");
				msg.set("search_err_flg", "1");
			}
			// 選択データが検索結果にない場合
			else if (!isMatchedKey)
			{
				// 画面制御のため検索エラーフラグを3に設定する
				inParamMap.put("search_err_flg", "3");
				msg.set("search_err_flg", "3");
			}
			
			// ◇ 下りマッピング処理
			return editOutMsg(result, param, handle);
		}
		
		// 1ページ目検索以外で検索データがない、もしくは選択データが検索結果にない場合は1ページ目を再検索する
		if (searchList == null || !isMatchedKey)
		{
			HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("CKSV002101CC");

			// 表示ページ番号を1ページに設定する
			inMap.put("display_page_num", "1");

			// 画面制御のため検索エラーフラグを3に設定する
			inMap.put("search_err_flg", "3");
			msg.set("search_err_flg", "3");

			// リクエストパラメータを引数に上りマッピング処理メソッドを実行
			paramMap = editInMsg(param);

			// ◇ SC呼出実行
			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
			scCall = new ServiceComponentRequestInvoker();
			result = scCall.run(paramMap, handle);
			
			templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
			msg = templates[0];
			
			// 検索リストを取得する
			searchList = msg.getCAANMsgList(EKK1121B001CBSMsg.EKK1121B001CBSMSG1LIST);
			
			// 1ページ目の再検索でリストが取得できなかった場合
			if (searchList == null)
			{
				// 画面制御のため検索エラーフラグを1に設定する
				inParamMap.put("search_err_flg", "1");
				msg.set("search_err_flg", "1");
				
			}
		}
		
		// ◇ 下りマッピング処理
		return editOutMsg(result, param, handle);
	}

	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return paramMap
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) 
	throws RequestParameterException 
	{
		HashMap<String, Object> paramMap = editInMsg(param);
		
		return paramMap;
	}
	
	/**
	 * 
	 * @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));
		
		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("CKSV002101CC");
		
		CAANMsg template = new CAANMsg(EKK1121B001CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1121B001CBSMsg.TEMPLATEID, TEMPLATE_ID_01);
		
		template.set(EKK1121B001CBSMsg.FUNC_CODE, "1");
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
		// 検索処理パターン
		if ("".equals(inMap.get("search_type")))
		{
			template.setNull(EKK1121B001CBSMsg.SEARCH_TYPE);
		}
		else
		{
			template.set(EKK1121B001CBSMsg.SEARCH_TYPE, (String)inMap.get("search_type"));
		}

		// 最大検索件数
		if ("".equals(inMap.get("max_search_num")))
		{
			template.setNull(EKK1121B001CBSMsg.MAX_SEARCH_NUM);
		}
		else
		{
			template.set(EKK1121B001CBSMsg.MAX_SEARCH_NUM, (String)inMap.get("max_search_num"));
		}

		// 表示件数
		if ("".equals(inMap.get("display_num")))
		{
			template.setNull(EKK1121B001CBSMsg.DISPLAY_NUM);
		}
		else
		{
			template.set(EKK1121B001CBSMsg.DISPLAY_NUM, (String)inMap.get("display_num"));
		}

		// 表示ページ番号
		if ("".equals(inMap.get("display_page_num")))
		{
			template.setNull(EKK1121B001CBSMsg.DISPLAY_PAGE_NUM);
		}
		else
		{
			template.set(EKK1121B001CBSMsg.DISPLAY_PAGE_NUM, (String)inMap.get("display_page_num"));
		}

		// 検索エラーフラグ
		if ("".equals(inMap.get("search_err_flg")))
		{
			template.setNull(EKK1121B001CBSMsg.SEARCH_ERR_FLG);
		}
		else
		{
			template.set(EKK1121B001CBSMsg.SEARCH_ERR_FLG, (String)inMap.get("search_err_flg"));
		}
		
		// ◇ 業務データの設定
		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ
		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_SYSID);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿コンテンツサービスコード → ＫＥＹ＿コンテンツサービスコード
		if (inMap == null || inMap.get("key_cont_svc_cd") == null || "".equals(inMap.get("key_cont_svc_cd"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_CONT_SVC_CD);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_CONT_SVC_CD, (String)inMap.get("key_cont_svc_cd"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ｅｏＩＤ → ＫＥＹ＿ｅｏＩＤ
		if (inMap == null || inMap.get("key_eoid") == null || "".equals(inMap.get("key_eoid"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_EOID);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_EOID, (String)inMap.get("key_eoid"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿メールアドレス → ＫＥＹ＿メールアドレス
		if (inMap == null || inMap.get("key_sends_mlad") == null || "".equals(inMap.get("key_sends_mlad"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_SENDS_MLAD);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_SENDS_MLAD, (String)inMap.get("key_sends_mlad"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿メールコード → ＫＥＹ＿メール種類コード
		if (inMap == null || inMap.get("key_mail_cd") == null || "".equals(inMap.get("key_mail_cd"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_MAIL_CD);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_MAIL_CD, (String)inMap.get("key_mail_cd"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿送信日時（ＦＲＯＭ） → ＫＥＹ＿送信日時（ＦＲＯＭ）
		if (inMap == null || inMap.get("key_mail_send_dtm_from") == null || "".equals(inMap.get("key_mail_send_dtm_from"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_FROM);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_FROM, (String)inMap.get("key_mail_send_dtm_from"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿送信日時（ＴＯ） → ＫＥＹ＿送信日時（ＴＯ）
		if (inMap == null || inMap.get("key_mail_send_dtm_to") == null || "".equals(inMap.get("key_mail_send_dtm_to"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_TO);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_TO, (String)inMap.get("key_mail_send_dtm_to"));
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿ソート項目Ｎｏ → ＫＥＹ＿ソート項目Ｎｏ
		if (inMap == null || inMap.get("key_sort_item_no") == null || "".equals(inMap.get("key_sort_item_no"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_SORT_ITEM_NO);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_SORT_ITEM_NO, (String)inMap.get("key_sort_item_no"));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ソート区分 → ＫＥＹ＿ソート区分
		if (inMap == null || inMap.get("key_sort_kbn") == null || "".equals(inMap.get("key_sort_kbn"))) 
		{
			template.setNull(EKK1121B001CBSMsg.KEY_SORT_KBN);
		} 
		else 
		{
			template.set(EKK1121B001CBSMsg.KEY_SORT_KBN, (String)inMap.get("key_sort_kbn"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 
	 * @param msgList
	 * @param param
	 * @param handle 
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	private IRequestParameterReadWrite editOutMsg(Map<?, ?> msgList,
													IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		if (workMap == null) 
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得
		HashMap<String, Object> dataMap = null;
		ArrayList<HashMap<String, Object>> dataList = null;

		// 業務データ設定
		dataMap = (HashMap<String, Object>)param.getData("CKSV002101CC");
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData("CKSV002101CC", dataMap);
		}
		
		// コンボボックス検索フラグを取得する
		String comboSearchFlg = (String)dataMap.get("combo_search_flg");
		
		// 検索系 共通部
		dataMap.put("total_search_num", parentTemplate.getString("total_search_num"));
		dataMap.put("total_page_num", parentTemplate.getString("total_page_num"));
		dataMap.put("search_err_flg", parentTemplate.getString("search_err_flg"));
		
		// メール送信履歴一覧照会明細
		templateArray = parentTemplate.getCAANMsgList(EKK1121B001CBSMsg.EKK1121B001CBSMSG1LIST);
		dataList = (ArrayList<HashMap<String, Object>>)dataMap.get("EKK1121B001CBSMsg1List");
		
		// コンテンツサービス名取得のためにコンテンツサービス一覧を取得する
//		CAANMsg[] contSvcList = getContSvcFstnm(param, handle);
		
		// 各コンボボックス値追加用
		HashMap<String, Object> contSvcFstnmCmb = new HashMap<String, Object>();
		HashMap<String, Object> eoidCmb = new HashMap<String, Object>();
		HashMap<String, Object> mladCmb = new HashMap<String, Object>();
		HashMap<String, Object> optinMlFstnmCmb = new HashMap<String, Object>();
		
		// コンテンツサービス名コンボボックス
		ArrayList<HashMap<String, Object>> contSvcFstnmCmbList = new ArrayList<HashMap<String, Object>>();
		contSvcFstnmCmb.clear();
		contSvcFstnmCmb.put("cont_svc_cd", "");
		contSvcFstnmCmb.put("cont_svc_nm", "");
		contSvcFstnmCmbList.add(contSvcFstnmCmb);
		
		// eoIDコンボボックス
		ArrayList<HashMap<String, Object>> eoidCmbList = new ArrayList<HashMap<String, Object>>();
		eoidCmb.clear();
		eoidCmb.put("eoid", "");
		eoidCmbList.add(eoidCmb);
		
		// メールアドレスコンボボックス
		ArrayList<HashMap<String, Object>> mladCmbList = new ArrayList<HashMap<String, Object>>();
		mladCmb.clear();
		mladCmb.put("sends_mlad", "");
		mladCmbList.add(mladCmb);
		
		// オプトインメール名コンボボックス
		ArrayList<HashMap<String, Object>> optinMlFstnmCmbList = new ArrayList<HashMap<String, Object>>();
		optinMlFstnmCmb.clear();
		optinMlFstnmCmb.put("mail_cd", "");
		optinMlFstnmCmb.put("optin_ml_fstnm", "");
		optinMlFstnmCmbList.add(optinMlFstnmCmb);
		
		// コンボボックス検索フラグがtrueの場合、各コンボボックス、標準コンテンツ未同意フラグの取得を行う
		if ("true".equals(comboSearchFlg))
		{
			CAANMsg childTemplate = null;
			// コンテンツサービス名リスト
// ANK-4346-00-00 DEL START
//			CAANMsg[] contSvcFstnmList = getContSvcFstnmList(param, handle);
//			for (int 	i = 0; i < contSvcFstnmList.length; i++)
//			{
//				childTemplate = contSvcFstnmList[i];
//				contSvcFstnmCmb = new HashMap<String, Object>();
//				contSvcFstnmCmb.put("cont_svc_cd", childTemplate.getString(EKK1121B002CBSMsg1List.CONT_SVC_CD));
//				contSvcFstnmCmb.put("cont_svc_nm",  childTemplate.getString(EKK1121B002CBSMsg1List.CONT_SVC_NM));
//				contSvcFstnmCmbList.add(contSvcFstnmCmb);
//			}
// ANK-4346-00-00 DEL END
			
			// eoIDリスト
			CAANMsg[] eoidList = getEoidList(param, handle);
			for (int 	i = 0; i < eoidList.length; i++)
			{
				childTemplate = eoidList[i];
				eoidCmb = new HashMap<String, Object>();
				eoidCmb.put("eoid", childTemplate.getString(EKK1121B003CBSMsg1List.EOID));
				eoidCmbList.add(eoidCmb);
			}
			
			// メールアドレスリスト
			CAANMsg[] mladList = getMladList(param, handle);
			for (int 	i = 0; i < mladList.length; i++)
			{
				childTemplate = mladList[i];
				mladCmb = new HashMap<String, Object>();
				mladCmb.put("sends_mlad", childTemplate.getString(EKK1121B004CBSMsg1List.SENDS_MLAD));
				mladCmbList.add(mladCmb);
			}
			
			// オプトインメール名リスト
			CAANMsg[] optinMlFstnmList = getOptinMlFstnmList(param, handle);
			for (int 	i = 0; i < optinMlFstnmList.length; i++)
			{
				childTemplate = optinMlFstnmList[i];
				optinMlFstnmCmb = new HashMap<String, Object>();
				optinMlFstnmCmb.put("mail_cd", childTemplate.getString(EKK1121B005CBSMsg1List.MAIL_CD));
				optinMlFstnmCmb.put("optin_ml_fstnm", childTemplate.getString(EKK1121B005CBSMsg1List.MAIL_CD_NM));
				optinMlFstnmCmbList.add(optinMlFstnmCmb);
			}
			
			// ANK-3112-00-00 DEL START
//			// 標準コンテンツ未同意フラグ
//			String stdardContMidoiFlg = getStdardContMidoiFlg(param, handle);
//			dataMap.put("stdard_cont_midoi_flg", stdardContMidoiFlg);
			// ANK-3112-00-00 DEL END
		}
		
		if (dataList == null)
		{
			dataList = new ArrayList<HashMap<String, Object>>();
		}

		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= dataList.size())
				{
					dataList.add(new HashMap<String, Object>());
				}
				HashMap<String, Object> childMap = dataList.get(i);
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールＩＤ ← メール送信履歴一覧照会明細.メールＩＤ
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_ID)) 
				{
					childMap.put("mail_id", "");
				} 
				else 
				{
					childMap.put("mail_id", childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_ID));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.ｅｏＩＤ ← メール送信履歴一覧照会明細.ｅｏＩＤ
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.EOID)) 
				{
					childMap.put("eoid", "");
				} 
				else 
				{
//					String eoid = childTemplate.getString(EKK1121B001CBSMsg1List.EOID);
//					childMap.put("eoid", eoid);
//					
//					// ｅｏＩＤコンボボックス追加判定
//					for (int j = 0; j < eoidCmbList.size(); j++)
//					{
//						if (eoidCmbList.get(j).get("eoid").equals(eoid))
//						{
//							break;
//						}
//						// ｅｏＩＤコンボボックスのすべてと一致しなかった場合
//						if (j + 1 >= eoidCmbList.size())
//						{
//							eoidCmb = new HashMap<String, Object>();
//							eoidCmb.put("eoid", eoid);
//							eoidCmbList.add(eoidCmb);
//							break;
//						}
//					}
					childMap.put("eoid", childTemplate.getString(EKK1121B001CBSMsg1List.EOID));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信先契約者カナ名 ← メール送信履歴一覧照会明細.送信先契約者カナ名
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.SENDS_KSH_KANA)) 
				{
					childMap.put("sends_ksh_kana", "");
				} 
				else 
				{
					childMap.put("sends_ksh_kana", childTemplate.getString(EKK1121B001CBSMsg1List.SENDS_KSH_KANA));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信先メールアドレス ← メール送信履歴一覧照会明細.送信先メールアドレス
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.SENDS_MLAD)) 
				{
					childMap.put("sends_mlad", "");
				} 
				else 
				{
//					String mlad = childTemplate.getString(EKK1121B001CBSMsg1List.SENDS_MLAD);
//					childMap.put("sends_mlad", mlad);
//					
//					// メールアドレスコンボボックス追加判定
//					for (int j = 0; j < mladCmbList.size(); j++)
//					{
//						if (mladCmbList.get(j).get("sends_mlad").equals(mlad))
//						{
//							break;
//						}
//						// メールアドレスコンボボックスのすべてと一致しなかった場合
//						if (j + 1 >= mladCmbList.size())
//						{
//							mladCmb = new HashMap<String, Object>();
//							mladCmb.put("sends_mlad", mlad);
//							mladCmbList.add(mladCmb);
//							break;
//						}
//					}
					childMap.put("sends_mlad", childTemplate.getString(EKK1121B001CBSMsg1List.SENDS_MLAD));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信年月日時分秒 ← メール送信履歴一覧照会明細.メール送信年月日時分秒
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_SEND_DTM)) 
				{
					childMap.put("mail_send_dtm", "");
				} 
				else 
				{
					childMap.put("mail_send_dtm", childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_SEND_DTM));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールコード ← メール送信履歴一覧照会明細.メールコード
				// 作業項目リスト.ワーク＿メールコード ← メール送信履歴一覧照会明細.メールコード
				// 作業項目リスト.ワーク＿メールコードを使用し、オプトインメール名を取得
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_CD)) 
				{
					childMap.put("mail_cd", "");
					workMap.put("work_mail_cd", "");
					childMap.put("optin_ml_fstnm", "");
				} 
				else 
				{
					String mailCd = childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_CD);
					childMap.put("mail_cd", mailCd);
					workMap.put("work_mail_cd", mailCd);
					childMap.put("optin_ml_fstnm", getOptinMlFstnm(param, handle));
					
//					// オプトインメール名コンボボックス追加判定
//					for (int j = 0; j < optinMlFstnmCmbList.size(); j++)
//					{
//						if (optinMlFstnmCmbList.get(j).get("mail_cd").equals(mailCd))
//						{
//							break;
//						}
//						// オプトインメール名コンボボックスのすべてと一致しなかった場合
//						if (j + 1 >= optinMlFstnmCmbList.size())
//						{
//							optinMlFstnmCmb = new HashMap<String, Object>();
//							optinMlFstnmCmb.put("mail_cd", mailCd);
//							optinMlFstnmCmb.put("optin_ml_fstnm", optinMlFstnm);
//							optinMlFstnmCmbList.add(optinMlFstnmCmb);
//							break;
//						}
//					}
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信回数 ← メール送信履歴一覧照会明細.送信回数
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.SEND_CNT)) 
				{
					childMap.put("send_cnt", "");
				} 
				else 
				{
					childMap.put("send_cnt", childTemplate.getString(EKK1121B001CBSMsg1List.SEND_CNT));
				}
				
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_SEND_STAT)) 
				{
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コード ← メール送信履歴一覧照会明細.メール送信状態コード
					// 作業項目リスト.ワーク＿メール送信状態コード ← メール送信履歴一覧照会明細.メール送信状態コード
					// 作業項目リスト.ワーク＿メール送信状態コードを使用し、メール送信状態名を取得
					if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_SEND_STAT_CD)) 
					{
						childMap.put("mail_send_stat_cd", "");
						workMap.put("work_mail_send_stat_cd", "");
						childMap.put("mail_send_stat_nm", "");
					} 
					else 
					{
						childMap.put("mail_send_stat_cd", childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_SEND_STAT_CD));
						workMap.put("work_mail_send_stat_cd", childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_SEND_STAT_CD));
						childMap.put("mail_send_stat_nm", getStatFstnm(param, handle));
					}
				}
				else
				{
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コード ← メール送信履歴一覧照会明細.メール送信ステータス
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コードで判定し、メール送信状態名を設定
					String mailSendStat = childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_SEND_STAT);
					childMap.put("mail_send_stat_cd", mailSendStat);
					if ("001".equals(mailSendStat))
					{
						childMap.put("mail_send_stat_nm", "未送信");
					}
					else if ("002".equals(mailSendStat))
					{
						childMap.put("mail_send_stat_nm", "送信済");
					}
					else if ("003".equals(mailSendStat) || "004".equals(mailSendStat))
					{
						childMap.put("mail_send_stat_nm", "未着");
					}
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールタイトル ← メール送信履歴一覧照会明細.メールタイトル
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.MAIL_TITLE)) 
				{
					childMap.put("mail_title", "");
				} 
				else 
				{
					childMap.put("mail_title", childTemplate.getString(EKK1121B001CBSMsg1List.MAIL_TITLE));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.コンテンツサービスコード ← メール送信履歴一覧照会明細.コンテンツサービスコード
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.CONT_SVC_CD)) 
				{
					childMap.put("cont_svc_cd", "");
				} 
				else 
				{
					childMap.put("cont_svc_cd", childTemplate.getString(EKK1121B001CBSMsg1List.CONT_SVC_CD));
//					contSvcCd = childTemplate.getString(EKK1121B001CBSMsg1List.CONT_SVC_CD);
				}
				
//				String contSvcCd = "";
//				String contSvcNm = "";
//				// コンテンツサービス名コンボボックス追加判定
//				for (int j = 0; j < contSvcFstnmCmbList.size(); j++)
//				{
//					if (contSvcFstnmCmbList.get(j).get("cont_svc_cd").equals(contSvcCd))
//					{
//						break;
//					}
//					// コンテンツサービス名コンボボックスのすべてと一致しなかった場合
//					if (j + 1 >= contSvcFstnmCmbList.size())
//					{
//						for (int k = 0; k < contSvcList.length; k++)
//						{
//							CAANMsg childContTemplate = contSvcList[k];
//							String listKey = childContTemplate.getString(ECN0041B001CBSMsgList.CONT_SVC_CD);
//							
//							// コンテンツサービスコードに紐づくコンテンツサービス名をコンボボックスに渡す
//							if(contSvcCd.equals(listKey))
//							{
//								contSvcNm = childContTemplate.getString(ECN0041B001CBSMsgList.CONT_SVC_NM);
//								break;
//							}
//						}
//						contSvcFstnmCmb = new HashMap<String, Object>();
//						contSvcFstnmCmb.put("cont_svc_cd", contSvcCd);
//						contSvcFstnmCmb.put("cont_svc_nm", contSvcNm);
//						contSvcFstnmCmbList.add(contSvcFstnmCmb);
//						break;
//					}
//				}
			}
		}
		dataMap.put("CKSV002101CCMsg1List", dataList);
		dataMap.put("CKSV002101CCMsg2List", contSvcFstnmCmbList);
		dataMap.put("CKSV002101CCMsg3List", eoidCmbList);
		dataMap.put("CKSV002101CCMsg4List", mladCmbList);
		dataMap.put("CKSV002101CCMsg5List", optinMlFstnmCmbList);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfo(param, templates, (Integer)return_code);
		
		//エラー情報のマップを取得
		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));
		
		return retParam;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK1121B001CBSMsg.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);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData("CKSV002101CC");
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_SYSID_ERR)) 
		{
			if (!inMap.containsKey("key_sysid_err")) 
			{
				inMap.put("key_sysid_err", template.getString(EKK1121B001CBSMsg.KEY_SYSID_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿コンテンツサービスコード → ＫＥＹ＿コンテンツサービスコード のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_CONT_SVC_CD_ERR)) 
		{
			if (!inMap.containsKey("key_cont_svc_cd_err")) 
			{
				inMap.put("key_cont_svc_cd_err", template.getString(EKK1121B001CBSMsg.KEY_CONT_SVC_CD_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿ｅｏＩＤ → ＫＥＹ＿ｅｏＩＤ のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_EOID_ERR)) 
		{
			if (!inMap.containsKey("key_eoid_err")) 
			{
				inMap.put("key_eoid_err", template.getString(EKK1121B001CBSMsg.KEY_EOID_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿メールアドレス → ＫＥＹ＿メールアドレス のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_SENDS_MLAD_ERR)) 
		{
			if (!inMap.containsKey("key_sends_mlad_err")) 
			{
				inMap.put("key_sends_mlad_err", template.getString(EKK1121B001CBSMsg.KEY_SENDS_MLAD_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿メールコード → ＫＥＹ＿メール種類コード のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_MAIL_CD_ERR)) 
		{
			if (!inMap.containsKey("key_mail_cd_err")) 
			{
				inMap.put("key_mail_cd_err", template.getString(EKK1121B001CBSMsg.KEY_MAIL_CD_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿送信日時（ＦＲＯＭ） → ＫＥＹ＿送信日時（ＦＲＯＭ） のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_FROM_ERR)) 
		{
			if (!inMap.containsKey("key_mail_send_dtm_from_err")) 
			{
				inMap.put("key_mail_send_dtm_from_err", template.getString(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_FROM_ERR));
			}
		}
		
		// メール送信履歴一覧照会マップ.ＫＥＹ＿送信日時（ＴＯ） → ＫＥＹ＿送信日時（ＴＯ） のエラー情報返却
		if (!template.isNull(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_TO_ERR)) 
		{
			if (!inMap.containsKey("key_mail_send_dtm_to_err")) 
			{
				inMap.put("key_mail_send_dtm_to_err", template.getString(EKK1121B001CBSMsg.KEY_MAIL_SEND_DTM_TO_ERR));
			}
		}
		
		return param;
	}
	
//	/**
//	 * 
//	 * @param param
//	 * @param handle 
//	 * @return コンテンツサービス一覧
//	 * @throws Exception 
//	 */
//	private CAANMsg[] getContSvcFstnm(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
//	{
//		HashMap<String, Object> paramMap = new HashMap<String, Object>();
//
//		/* SCインプット共通データ */
//		// **********************************************
//		// 【取得元：電文ヘッダ(ヘッダ)】
//		// **********************************************
//		// 電文ID
//		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
//		// ユースケースID
//		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
//		// オペレーションID
//		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
//		// サービス呼び出し区分
//		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
//
//		// **********************************************
//		// 【取得元：ユーザエリア(コントロールマップ)】
//		// **********************************************
//		// 依頼先ホスト名
//		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
//		// 依頼元IPアドレス
//		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
//		// 依頼元画面ID
//		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
//		// オペレータID
//		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
//
//		CAANMsg template = new CAANMsg(ECN0041B001CBSMsg.class.getName());
//
//		HashMap inMap = null;
//
//		// テンプレートID
//		template.set(ECN0041B001CBSMsg.TEMPLATEID, TEMPLATE_ID_02);
//		
//		// 機能コード（デフォルト：１）
//		template.set(ECN0041B001CBSMsg.FUNC_CODE, "1");
//
//		// オペレータID
//		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
//		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
//
//		// 運用日付
//		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
//		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
//
//		// 運用日時
//		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
//		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
//		
//		/* ユーザデータ情報 */
//		inMap = (HashMap)param.getData("CKSV002101CC");
//		
//		if (inMap != null) 
//		{
//			// 機能コード
//			template.set(ECN0041B001CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
//		}
//
//		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＳＹＳＩＤ
//		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
//		{
//			template.setNull(ECN0041B001CBSMsg.SYSID);
//		} 
//		else 
//		{
//			template.set(ECN0041B001CBSMsg.SYSID, (String)inMap.get("key_sysid"));
//		}
//		
//		CAANMsg[] templates = new CAANMsg[1];
//		templates[0] = template;
//		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
//		
//		// ◇ SC呼出実行
//		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
//		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
//		Map<?, ?> result = scCall.run(paramMap, handle);
//		
//		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
//		CAANMsg msg = templates[0];
//		
//		// 検索結果を返す
//		return msg.getCAANMsgList(ECN0041B001CBSMsg.ECN0041B001CBSMSGLIST);
//	}
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return コンテンツサービス名リスト
	 * @throws Exception 
	 */
	private CAANMsg[] getContSvcFstnmList(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EKK1121B002CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1121B002CBSMsg.TEMPLATEID, TEMPLATE_ID_04);
		
		// 機能コード（デフォルト：１）
		template.set(EKK1121B002CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData("CKSV002101CC");
		
		if (inMap != null) 
		{
			// 機能コード
			template.set(EKK1121B002CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＳＹＳＩＤ
		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
		{
			template.setNull(EKK1121B002CBSMsg.KEY_SYSID);
		} 
		else 
		{
			template.set(EKK1121B002CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索結果を返す
		return msg.getCAANMsgList(EKK1121B002CBSMsg.EKK1121B002CBSMSG1LIST);
	}
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return eoIDリスト
	 * @throws Exception 
	 */
	private CAANMsg[] getEoidList(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EKK1121B003CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1121B003CBSMsg.TEMPLATEID, TEMPLATE_ID_05);
		
		// 機能コード（デフォルト：１）
		template.set(EKK1121B003CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData("CKSV002101CC");
		
		if (inMap != null) 
		{
			// 機能コード
			template.set(EKK1121B003CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＳＹＳＩＤ
		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
		{
			template.setNull(EKK1121B003CBSMsg.KEY_SYSID);
		} 
		else 
		{
			template.set(EKK1121B003CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索結果を返す
		return msg.getCAANMsgList(EKK1121B003CBSMsg.EKK1121B003CBSMSG1LIST);
	}
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return メールアドレスリスト
	 * @throws Exception 
	 */
	private CAANMsg[] getMladList(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EKK1121B004CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1121B004CBSMsg.TEMPLATEID, TEMPLATE_ID_06);
		
		// 機能コード（デフォルト：１）
		template.set(EKK1121B004CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData("CKSV002101CC");
		
		if (inMap != null) 
		{
			// 機能コード
			template.set(EKK1121B004CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＳＹＳＩＤ
		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
		{
			template.setNull(EKK1121B004CBSMsg.KEY_SYSID);
		} 
		else 
		{
			template.set(EKK1121B004CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索結果を返す
		return msg.getCAANMsgList(EKK1121B004CBSMsg.EKK1121B004CBSMSG1LIST);
	}
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return オプトインメール名リスト
	 * @throws Exception 
	 */
	private CAANMsg[] getOptinMlFstnmList(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EKK1121B005CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1121B005CBSMsg.TEMPLATEID, TEMPLATE_ID_07);
		
		// 機能コード（デフォルト：１）
		template.set(EKK1121B005CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData("CKSV002101CC");
		
		if (inMap != null) 
		{
			// 機能コード
			template.set(EKK1121B005CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＳＹＳＩＤ
		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
		{
			template.setNull(EKK1121B005CBSMsg.KEY_SYSID);
		} 
		else 
		{
			template.set(EKK1121B005CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索結果を返す
		return msg.getCAANMsgList(EKK1121B005CBSMsg.EKK1121B005CBSMSG1LIST);
	}
	
	// ANK-3112-00-00 DEL START
//	/**
//	 * 
//	 * @param param
//	 * @param handle 
//	 * @return 標準コンテンツ未同意フラグ
//	 * @throws Exception 
//	 */
//	private String getStdardContMidoiFlg(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
//	{
//		HashMap<String, Object> paramMap = new HashMap<String, Object>();
//
//		/* SCインプット共通データ */
//		// **********************************************
//		// 【取得元：電文ヘッダ(ヘッダ)】
//		// **********************************************
//		// 電文ID
//		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
//		// ユースケースID
//		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
//		// オペレーションID
//		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
//		// サービス呼び出し区分
//		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
//
//		// **********************************************
//		// 【取得元：ユーザエリア(コントロールマップ)】
//		// **********************************************
//		// 依頼先ホスト名
//		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
//		// 依頼元IPアドレス
//		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
//		// 依頼元画面ID
//		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
//		// オペレータID
//		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
//
//		CAANMsg template = new CAANMsg(EKK0081B016CBSMsg.class.getName());
//
//		HashMap inMap = null;
//
//		// テンプレートID
//		template.set(EKK0081B016CBSMsg.TEMPLATEID, TEMPLATE_ID_08);
//		
//		// 機能コード（デフォルト：１）
//		template.set(EKK0081B016CBSMsg.FUNC_CODE, "1");
//
//		// オペレータID
//		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
//		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
//
//		// 運用日付
//		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
//		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
//
//		// 運用日時
//		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
//		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
//		
//		/* ユーザデータ情報 */
//		inMap = (HashMap)param.getData("CKSV002101CC");
//		
//		if (inMap != null) 
//		{
//			// 機能コード
//			template.set(EKK0081B016CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
//		}
//
//		// メール送信履歴一覧照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ
//		if (inMap == null || inMap.get("key_sysid") == null || "".equals(inMap.get("key_sysid"))) 
//		{
//			template.setNull(EKK0081B016CBSMsg.KEY_SYSID);
//		} 
//		else 
//		{
//			template.set(EKK0081B016CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
//		}
//		
//		// ＫＥＹ＿料金グループコード（14：ホスティング）
//		template.set(EKK0081B016CBSMsg.KEY_PRC_GRP_CD, "14");
//		
//		CAANMsg[] templates = new CAANMsg[1];
//		templates[0] = template;
//		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
//		
//		// ◇ SC呼出実行
//		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
//		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
//		Map<?, ?> result = scCall.run(paramMap, handle);
//		
//		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
//		CAANMsg msg = templates[0];
//		
//		CAANMsg[] ekk0081b016OutList = msg.getCAANMsgList(EKK0081B016CBSMsg.EKK0081B016CBSMSG1LIST);
//		CAANMsg childTemplate = null;
//		for (int i = 0; i < ekk0081b016OutList.length; i++)
//		{
//			childTemplate = ekk0081b016OutList[i];
//			
//			// 料金コースコード＝標準コンテンツ且つサービス契約ステータス＝サービス提供中
//			if("A58".equals(childTemplate.getString(EKK0081B016CBSMsg1List.PCRS_CD)) && 
//					"100".equals(childTemplate.getString(EKK0081B016CBSMsg1List.SVC_KEI_STAT)))
//			{
//				// 標準コンテンツサービスあり
//				return "0";
//			}
//		}
//		// 提供中の標準コンテンツサービスなし
//		return "1";
//	}
//
	// ANK-3112-00-00 DEL END
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return オプトインメール名
	 * @throws Exception 
	 */
	private String getOptinMlFstnm(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EZM0171A010CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EZM0171A010CBSMsg.TEMPLATEID, TEMPLATE_ID_03);
		
		// 機能コード（デフォルト：１）
		template.set(EZM0171A010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		

		/* 作業項目情報 */
		if (workMap != null) 
		{
			inMap = (HashMap)workMap;
		} 
		else 
		{
			inMap = null;
		}
		
		// ＫＥＹ＿コード種別コードを設定(固定値)
		if (inMap == null)
		{
			template.setNull(EZM0171A010CBSMsg.KEY_CD_SBT_CD);
		}
		else
		{
			template.set(EZM0171A010CBSMsg.KEY_CD_SBT_CD, "CD01252");
		}
		
		// 作業項目リスト.ワーク＿メールコード → ＫＥＹ＿コード区分
		if (inMap == null || inMap.get("work_mail_cd") == null || "".equals(inMap.get("work_mail_cd"))) 
		{
			template.setNull(EZM0171A010CBSMsg.KEY_CD_DIV);
		} 
		else 
		{
			template.set(EZM0171A010CBSMsg.KEY_CD_DIV, (String)inMap.get("work_mail_cd"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索リストを取得する
		CAANMsg[] searchList = msg.getCAANMsgList(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST);
		CAANMsg childTemplate = null;
		
		// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.オプトインメール名 ← コード名称管理一意照会明細.コード区分名
		if (searchList != null && searchList.length > 0)
		{
			childTemplate = searchList[0];
			return childTemplate.getString(EZM0171A010CBSMsg1List.CD_DIV_NM);
		}
		else
		{
			return "";
		}
	}
	
	/**
	 * 
	 * @param param
	 * @param handle 
	 * @return メール送信状態名
	 * @throws Exception 
	 */
	private String getStatFstnm(IRequestParameterReadWrite param, SessionHandle handle) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(EZM0171A010CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EZM0171A010CBSMsg.TEMPLATEID, TEMPLATE_ID_03);
		
		// 機能コード（デフォルト：１）
		template.set(EZM0171A010CBSMsg.FUNC_CODE, "1");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		

		/* 作業項目情報 */
		if (workMap != null) 
		{
			inMap = (HashMap)workMap;
		} 
		else 
		{
			inMap = null;
		}
		
		// ＫＥＹ＿コード種別コードを設定(固定値)
		if (inMap == null)
		{
			template.setNull(EZM0171A010CBSMsg.KEY_CD_SBT_CD);
		}
		else
		{
			template.set(EZM0171A010CBSMsg.KEY_CD_SBT_CD, "CD00515");
		}
		
		// 作業項目リスト.ワーク＿メール送信状態コード → ＫＥＹ＿コード区分
		if (inMap == null || inMap.get("work_mail_send_stat_cd") == null || "".equals(inMap.get("work_mail_send_stat_cd"))) 
		{
			template.setNull(EZM0171A010CBSMsg.KEY_CD_DIV);
		} 
		else 
		{
			template.set(EZM0171A010CBSMsg.KEY_CD_DIV, (String)inMap.get("work_mail_send_stat_cd"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// 検索リストを取得する
		CAANMsg[] searchList = msg.getCAANMsgList(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST);
		CAANMsg childTemplate = null;
		
		// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態名 ← コード名称管理一意照会明細.コード区分名
		if (searchList != null && searchList.length > 0)
		{
			childTemplate = searchList[0];
			return childTemplate.getString(EZM0171A010CBSMsg1List.CD_DIV_NM);
		}
		else
		{
			return "";
		}
	}

// ANK-4346-00-00 ADD START	


	/**
	 * コンテンツメール情報を取得する。
	 * 
	 * @param paramMap
	 * @param inMap
	 * @param handle
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite getContMailInfo(HashMap<String, Object> paramMap,
			IRequestParameterReadWrite param, SessionHandle handle, String fixedText,
			HashMap<String, Object> inMap) throws Throwable {
		
		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);

		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ソート対象の設定
		String key_sort_item_no = (String)inMap.get("key_sort_item_no");
		if (JCNStringUtil.isNullEmpty(key_sort_item_no)) {
			key_sort_item_no = "1"; //"1"（送信日時）
		}
		else if (SORT_ITEM_NO_MAIL.equals(key_sort_item_no))  
		{
			key_sort_item_no = "3"; // メールID 
		}
		else if (SORT_ITEM_NO_EOID.equals(key_sort_item_no))  
		{
			key_sort_item_no = "4"; // 送信先eoID 
		}
		else if (SORT_ITEM_NO_SEND_DATE.equals(key_sort_item_no))  
		{
			key_sort_item_no = "1";  // 送信日時
		}

		// ソート区分の設定
		String key_sork_kbn = (String)inMap.get("key_sort_kbn");
		if (JCNStringUtil.isNullEmpty(key_sork_kbn)) {
			key_sork_kbn = "1"; // "1"（降順）
		}
		else 
		{
			int set_sork_kbn = Integer.valueOf(key_sork_kbn) - 1;
			key_sork_kbn = String.valueOf(set_sork_kbn); 
		}

		String key_send_from = (String)inMap.get("key_mail_send_dtm_from") ;
		// 17桁に補完された日時情報が連携される為、12桁に成型する
		if (!JCNStringUtil.isNullEmpty(key_send_from)) {
			key_send_from = key_send_from.substring(0, 12);
		}

		String key_send_to = (String)inMap.get("key_mail_send_dtm_to");
		// 17桁に補完された日時情報が連携される為、12桁に成型する
		if (!JCNStringUtil.isNullEmpty(key_send_to)) {
			key_send_to = key_send_to.substring(0, 12);
		}

		String sysid = (String)inMap.get("key_sysid");
		// 上りマッピング
		Object[][] ecna0290001In = {
				{ECNA0290001CBSMsg.TEMPLATEID, TEMPLATE_ID_ECNA0290001},
				{ECNA0290001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{ECNA0290001CBSMsg.KEY_SYSID, sysid },
				{ECNA0290001CBSMsg.KEY_SEND_FROM, key_send_from},
				{ECNA0290001CBSMsg.KEY_SEND_TO, key_send_to},
				{ECNA0290001CBSMsg.KEY_PER_PAGE, (String)inMap.get("display_num") },
				{ECNA0290001CBSMsg.KEY_PAGE, (String)inMap.get("display_page_num") },
				// ANK-4656-00-00 MOD START
//				{ECNA0290001CBSMsg.KEY_SENDFROM_DIVISION, "2"}, // "2"（コンテンツメール）
				{ECNA0290001CBSMsg.KEY_SENDFROM_DIVISION, ""}, // ""（標準・コンテンツメール両方を取得）
				// ANK-4656-00-00 MOD END
				{ECNA0290001CBSMsg.KEY_SORT, key_sort_item_no}, 
				{ECNA0290001CBSMsg.KEY_SORT_ORDER, key_sork_kbn}, 
				{ECNA0290001CBSMsg.KEY_RETURN_MAIN_MESSAGE, "1" } // "1"（要）
		};

		// サービスI/F実行
		CAANMsg ecna0290001Msg = callSC(handle, scCall, param, dataMapKey, ecna0290001In);
		// コンテンツメール情報取得
		CAANMsg[] ecna0290001Msg1List = ecna0290001Msg.getCAANMsgList(ECNA0290001CBSMsg.ECNA0290001CBSMSG1LIST);

		String errCd = ecna0290001Msg.getString(ECNA0290001CBSMsg.ERR_CD);

		// リターンコードを設定
		ccMsg.put("return_code" , errCd );

		// ユーザデータ情報
		// 画面で選択されていたデータを取得する
		HashMap<String, Object> inParamMap = (HashMap<String, Object>)param.getData("CKSV002101CC");

		// リターンコードが正常終了以外の場合、後続処理を実施しない。
		if ( !RETURN_CODE_OK.equals(errCd) )
		{
			// エラー情報を設定し、返却する。
			// 画面制御のため検索エラーフラグを1に設定する
			inParamMap.put("search_err_flg", "4");
			ecna0290001Msg.set("search_err_flg", "4");
			// ◇ 下りマッピング処理
			return editContMailOutMsg(ecna0290001Msg, param, handle, fixedText, sysid);
		}

		// 取得した総件数を確認する。
		String total  = ecna0290001Msg.getString(ECNA0290001CBSMsg.TOTAL);
		
		// 件数が0件の場合、エラーとする。
		if (0 == Integer.valueOf(total))
		{
			// 画面制御のため検索エラーフラグを1に設定する
			inParamMap.put("search_err_flg", "1");
			ecna0290001Msg.set("search_err_flg", "1");

			// ◇ 下りマッピング処理
			return editContMailOutMsg(ecna0290001Msg, param, handle, fixedText, sysid);
		}

		// コンテンツの最大検索件数超えエラーの場合
		if(200 < Integer.valueOf(total))
		{
			// 画面制御のため検索エラーフラグを1に設定する
			inParamMap.put("search_err_flg", "2");
			ecna0290001Msg.set("search_err_flg", "2");

			// ◇ 下りマッピング処理
			return editContMailOutMsg(ecna0290001Msg, param, handle, fixedText, sysid);
		}
		
		// 画面で選択していたデータが検索結果に存在するかチェックを行う
		boolean isMatchedKey = false;
		
		String key = (String)inParamMap.get("select_ml_sendno") + (String)inParamMap.get("select_send_cnt");
		
		// 検索条件キーが設定されている場合、マッチングによる存在チェックを行う。
		if (!"".equals(key) && ecna0290001Msg1List != null)
		{
			for (int i = 0; i < ecna0290001Msg1List.length; i++)
			{
				CAANMsg childTemplate = ecna0290001Msg1List[i];
				String listKey = childTemplate.getString(ECNA0290001CBSMsg1List.MAIL_ID) + childTemplate.getString(ECNA0290001CBSMsg1List.MAIL_SEND_COUNT);
				
				// 選択データが検索結果にある場合はチェック終了
				if(key.equals(listKey))
				{
					isMatchedKey = true;
					break;
				}
			}
		}
		
		// 検索条件キーが設定されていない場合、選択データマッチングフラグを立てる
		if ("".equals(key))
		{
			isMatchedKey = true;
		}

		// トップページの検索であった場合は、再検索処理を行わない
		if ("1".equals(inParamMap.get("display_page_num")))
		{
			// トップページの検索でリストが取得できなかった場合
			if (ecna0290001Msg1List == null)
			{
				// 画面制御のため検索エラーフラグを1に設定する
				inParamMap.put("search_err_flg", "1");
				ecna0290001Msg.set("search_err_flg", "1");
			}
			// 選択データが検索結果にない場合
			else if (!isMatchedKey)
			{
				// 画面制御のため検索エラーフラグを3に設定する
				inParamMap.put("search_err_flg", "3");
				ecna0290001Msg.set("search_err_flg", "3");
			}
			
			// ◇ 下りマッピング処理
			return editContMailOutMsg(ecna0290001Msg, param, handle, fixedText, sysid);
		}
		
		// 1ページ目検索以外で検索データがない、もしくは選択データが検索結果にない場合は1ページ目を再検索する
		if (ecna0290001Msg1List == null || !isMatchedKey)
		{

			// 表示ページ番号を1ページに設定する
			inMap.put("key_page", "1");

			// 画面制御のため検索エラーフラグを3に設定する
			ecna0290001Msg.set("search_err_flg", "3");

			// リクエストパラメータを引数に上りマッピング処理メソッドを実行
			paramMap = editInMsg(param);

			// ◇ SC呼出実行
			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
			// サービスI/F実行
			CAANMsg ecna0290001Msg2 = callSC(handle, scCall, param, dataMapKey, ecna0290001In);
			// コンテンツメール情報取得
			CAANMsg[] ecna0290001Msg1List2 = ecna0290001Msg2.getCAANMsgList(ECNA0290001CBSMsg.ECNA0290001CBSMSG1LIST);

			// 1ページ目の再検索でリストが取得できなかった場合
			if (ecna0290001Msg1List2 == null)
			{
				// 画面制御のため検索エラーフラグを1に設定する
				inParamMap.put("search_err_flg", "1");
				ecna0290001Msg.set("search_err_flg", "1");
				
			}
		}

		return editContMailOutMsg(ecna0290001Msg, param, handle, fixedText, sysid);
	}
	

	/**
	 * SC(サービスインターフェイス）を呼び出します。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @return サービスインターフェイス実行結果
	 * @throws Throwable 例外が発生した場合
	 */
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData)
	throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object RETURN_CODE = result.get(JCMConstants.RET_CD_INT_KEY);
		
//		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)RETURN_CODE, dataMapKey);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
//		// 異常の場合、SCCallExceptionを生成してスローする
//		if (!("0".equals(RETURN_CODE.toString()) && 0 == status))
//		{
//			throw new SCCallException("戻り値不正", RETURN_CODE.toString(), status);
//		}
		// SCCallExceptionはスローしない
		
		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 (mappingData[i][1] instanceof CAANMsg[])
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			else
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		
		templates[0] = template;
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param errorCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param, CAANMsg[] templates, int errorCode, String dataMapKey)
	throws RequestParameterException
	{
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != errorCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(dataMapKey);
		
		HashMap map = template.getHashMap();
		Iterator it = map.keySet().iterator();
		while (it.hasNext())
		{
			String key = (String)it.next();
			Object value = map.get(key);
			if (value instanceof HashMap[])
			{
				HashMap[] childMapList = (HashMap[])value;
				for (HashMap childMap : childMapList)
				{
					Iterator childIt = childMap.keySet().iterator();
					while (childIt.hasNext())
					{
						String childKey = (String)childIt.next();
						if (childKey.endsWith(ERRITEM_SUFFIX))
						{
							int keyIdx = childKey.lastIndexOf(ERRITEM_SUFFIX);
							if (inMap.containsKey(childKey.substring(0, keyIdx)))
							{
								inMap.put(childKey, childMap.get(childKey));
							}
						}
					}
				}
			}
			else
			{
				if (key.endsWith(ERRITEM_SUFFIX))
				{
					int keyIdx = key.lastIndexOf(ERRITEM_SUFFIX);
					if (inMap.containsKey(key.substring(0, keyIdx)))
					{
						inMap.put(key, map.get(key));
					}
				}
			}
		}
		
		return param;
	}

	/**
	 * コンテンツメール取得時の出力設定を行う。
	 * @param ecna0290001Msg
	 * @param param
	 * @param handle 
	 * @param sysid 
	 * @param sysid2 
	 * @return IRequestParameterReadWrite
	 * @throws Throwable 
	 */
	private IRequestParameterReadWrite editContMailOutMsg(CAANMsg ecna0290001Msg,
													IRequestParameterReadWrite param, SessionHandle handle, String fixedText, String sysid) throws Throwable
	{

		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		if (workMap == null) 
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得
		HashMap<String, Object> dataMap = null;
		ArrayList<HashMap<String, Object>> dataList = null;

		// 業務データ設定
		dataMap = (HashMap<String, Object>)param.getData("CKSV002101CC");
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData("CKSV002101CC", dataMap);
		}

		// 検索系 共通部
		dataMap.put("total_search_num", ecna0290001Msg.getString(ECNA0290001CBSMsg.TOTAL));
		dataMap.put("total_page_num", ecna0290001Msg.getString(ECNA0290001CBSMsg.TOTAL_PAGE));

		// コンテンツメール取得処理
		CAANMsg[] ecna0290001Msg1List = ecna0290001Msg.getCAANMsgList(ECNA0290001CBSMsg.ECNA0290001CBSMSG1LIST);

		if (dataList == null)
		{
			dataList = new ArrayList<HashMap<String, Object>>();
		}

		if (ecna0290001Msg1List != null)
		{
			for (int i = 0; i < ecna0290001Msg1List.length; i++)
			{
				CAANMsg childTemplate = ecna0290001Msg1List[i];
				if (i >= dataList.size())
				{
					dataList.add(new HashMap<String, Object>());
				}
				HashMap<String, Object> childMap = dataList.get(i);
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールＩＤ ← メール情報配列.メールＩＤ
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.MAIL_ID)) 
				{
					childMap.put("mail_id", "");
				} 
				else 
				{
					childMap.put("mail_id", childTemplate.getString(ECNA0290001CBSMsg1List.MAIL_ID));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.ｅｏＩＤ ← メール情報配列.ｅｏＩＤ
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.SENDTO_EOID)) 
				{
					childMap.put("eoid", "");
				} 
				else 
				{
					childMap.put("eoid", childTemplate.getString(ECNA0290001CBSMsg1List.SENDTO_EOID));
				}
				
				// カナ氏名を取得
				String p_kana = getKanaName(param, handle, fixedText, sysid);
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信先契約者カナ名 ← メール送信履歴一覧照会明細.送信先契約者カナ名
				if (JCNStringUtil.isNullEmpty(p_kana)) 
				{
					childMap.put("sends_ksh_kana", "");
				} 
				else 
				{
					childMap.put("sends_ksh_kana", p_kana);
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信先メールアドレス ← メール送信履歴一覧照会明細.送信先メールアドレス
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.SENDTO_MAIL_ADRESS)) 
				{
					childMap.put("sends_mlad", "");
				} 
				else 
				{
					childMap.put("sends_mlad", childTemplate.getString(ECNA0290001CBSMsg1List.SENDTO_MAIL_ADRESS));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信年月日時分秒 ← メール送信履歴一覧照会明細.送信日時
				// 送信日時
				String sendDate = childTemplate.getString(ECNA0290001CBSMsg1List.SEND_DATE);
				if(!JCNStringUtil.isNullEmpty(sendDate))
				{
					sendDate = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.parse(sendDate));
					
				}

				if (childTemplate.isNull(ECNA0290001CBSMsg1List.SEND_DATE)) 
				{
					childMap.put("mail_send_dtm", "");
				} 
				else 
				{
					childMap.put("mail_send_dtm", sendDate);
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールコード ← メール送信履歴一覧照会明細.メールコード
				// 作業項目リスト.ワーク＿メールコード ← メール送信履歴一覧照会明細.メールコード
				// 作業項目リスト.ワーク＿メールコードを使用し、オプトインメール名を取得

				childMap.put("mail_cd", MAIL_CD_CONT);
				workMap.put("work_mail_cd", MAIL_CD_CONT);
				childMap.put("optin_ml_fstnm", getOptinMlFstnm(param, handle));
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.送信回数 ← メール送信履歴一覧照会明細.送信回数
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.MAIL_SEND_COUNT)) 
				{
					childMap.put("send_cnt", "");
				} 
				else 
				{
					childMap.put("send_cnt", childTemplate.getString(ECNA0290001CBSMsg1List.MAIL_SEND_COUNT));
				}
				
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.SEND_FLG)) 
				{
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コード ← メール送信履歴一覧照会明細.メール送信状態コード
					// 作業項目リスト.ワーク＿メール送信状態コード ← メール送信履歴一覧照会明細.メール送信状態コード
					// 作業項目リスト.ワーク＿メール送信状態コードを使用し、メール送信状態名を取得
						childMap.put("mail_send_stat_cd", "");
						workMap.put("work_mail_send_stat_cd", "");
						childMap.put("mail_send_stat_nm", "");

				}
				else
				{
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コード ← メール送信履歴一覧照会明細.メール送信ステータス
					// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール送信状態コードで判定し、メール送信状態名を設定
					childMap.put("mail_send_stat_cd", childTemplate.getString(ECNA0290001CBSMsg1List.SEND_FLG));
					workMap.put("work_mail_send_stat_cd", childTemplate.getString(ECNA0290001CBSMsg1List.SEND_FLG));
					childMap.put("mail_send_stat_nm", getStatFstnm(param, handle));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メールタイトル ← メール送信履歴一覧照会明細.メールタイトル
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.SUBJECT)) 
				{
					childMap.put("mail_title", "");
				} 
				else 
				{
					childMap.put("mail_title", childTemplate.getString(ECNA0290001CBSMsg1List.SUBJECT));
				}
				
				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.メール本文BK ← メール送信履歴一覧照会明細.メール本文
				if (childTemplate.isNull(ECNA0290001CBSMsg1List.MAIN_MESSAGE)) 
				{
					childMap.put("mail_text", "");
				} 
				else 
				{
					childMap.put("mail_text", childTemplate.getString(ECNA0290001CBSMsg1List.MAIN_MESSAGE));
				}

/*				// メール送信履歴一覧照会マップ.メール送信履歴一覧照会明細.コンテンツサービスコード ← メール送信履歴一覧照会明細.コンテンツサービスコード
				if (childTemplate.isNull(EKK1121B001CBSMsg1List.CONT_SVC_CD)) 
				{
					childMap.put("cont_svc_cd", "");
				} 
				else 
				{
					childMap.put("cont_svc_cd", childTemplate.getString(EKK1121B001CBSMsg1List.CONT_SVC_CD));
				}*/
				
			}
		}
		dataMap.put("CKSV002101CCMsg1List", dataList);

		// 正常終了
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_0000);
		param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);

		return param;
	}
	// ANK-4346-00-00 ADD END

	/**
	 * @param param
	 * @param handle
	 * @param sysid 
	 * @param fixedText 
	 * @param sysid
	 * @return　取得したカナ氏名
	 * @throws Throwable 
	 */
	private String getKanaName(IRequestParameterReadWrite param, SessionHandle handle, String fixedText, String sysid) throws Throwable {

		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);

		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 運用日を一時領域に格納する

		paramMap.put("rsv_aply_ymd", JPCBPCommon.getOpeDate(null));
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// お客様一意照会のSIFを実行し、お客様スキーマから情報を取得します
		CAANMsg[] eck0011a010List = execECK0011A010(handle, scCall, param, paramMap, dataMapKey, sysid);
		CAANMsg childTemplate = null;
		
		// お客様一意照会検索結果が存在する場合のみ処理する
		if (eck0011a010List != null && eck0011a010List.length > 0)
		{
			childTemplate = eck0011a010List[0];
			return childTemplate.getString(ECK0011A010CBSMsg1List.CONT_CUST_KANA);
		}
		
		return "";
	}

	/**
	 * お客様一意照会処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param scCall 
	 * @param param リクエストパラメータ
	 * @param temporaryData 一時領域
	 * @param dataMapKey ユーザー固定文字列
	 * @return CAANMsg[] 検索結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] execECK0011A010(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									HashMap<String, Object> temporaryData,
									String dataMapKey,
									String sysid) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// ***** ECK0011A010（お客様一意照会）*****
		Object[][] eck0011a010IN = {
				{ECK0011A010CBSMsg.TEMPLATEID,         TEMPLATE_ID_ECK0011A010},
				{ECK0011A010CBSMsg.FUNC_CODE,          "2"},
				{ECK0011A010CBSMsg.KEY_SYSID,          sysid},
				{ECK0011A010CBSMsg.KEY_RSV_APLY_YMD,   (String)temporaryData.get("rsv_aply_ymd")}
		};
		
		// 実行
		CAANMsg resultMsg = callSC(handle, scCall, param, dataMapKey, eck0011a010IN);
		
		return resultMsg.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
		
	}
}
