/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CRW08301SFLogic
 *	ソースファイル名：CRW08301SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年09月19日
 *＜機能概要＞
 *	eoMessengerビューロジック
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *	ｖ9.00.00	2014/06/27	FJ)伊藤		OM-2014-0002387 メッセージ送信方法の変更
 *
 ********************************************************************************/

package eo.web.webview.CRW08301SF;

import java.util.ArrayList;
import java.util.EventObject;
import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CID;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;
import com.fujitsu.futurity.web.x33.X33SException;

import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;
import eo.web.webview.mapping.CRSV0113_CRSV0113OPDBMapper;
import eo.web.webview.mapping.CRSV0114_CRSV0114OPDBMapper;
import eo.web.webview.mapping.CRSV0115_CRSV0115OPDBMapper;
import eo.web.webview.mapping.CRSV0116_CRSV0116OPDBMapper;
import eo.web.webview.mapping.CRSV0117_CRSV0117OPDBMapper;
import eo.web.webview.mapping.CRSV0118_CRSV0118OPDBMapper;

/**
 * eoMessengerビューロジック.<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CRW08301SFLogic extends JCCWebBusinessLogic 
{

	/** 加減時間 */
	private static final String ADD_TIME = "000001";

	/**
	 * 親クラスX31BWebBusinessLogicのreceiveMessageWebを
	 * オーバーライドして自動生成されたメソッドです。
	 * @param arg0 (I) イベント情報
	 * @param arg1 (I) WebFWでは使用しません
	 * @param arg2 (I) WebFWでは使用しません
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws X33SException X33SException
	 */
	@Override
	protected boolean receiveMessageWeb(X31CID arg0, Object arg1,
			EventObject arg2) throws X33SException
	{
		return false;
	}

	/**
	 * 初期表示処理。<br>
	 * <br>
	 * eoMessenger(初期表示)サービスを呼び出し、
	 * eoMessenger画面の初期表示を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean initOpen() throws Exception
	{
		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)日時の取得
		String sysDate = JCRWebCommon.getSysDate();
		String sysDateTime = JCRWebCommon.getSysDateTime();

		// (b)サービスフォームBeanの設定
		bean.sendMessageString(CRW08301SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);
		bean.sendMessageString(CRW08301SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDateTime);
		bean.sendMessageString(CRW08301SFConst.LOGIN_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDateTime);
		bean.sendMessageString(CRW08301SFConst.MSG_KIJUN_DTM, X31CWebConst.DATABEAN_SET_VALUE, sysDateTime);

		// (c)権限有無判定の実行
		boolean authorityFlg = JCRWebCommon.checkAuthority(this, this.getGamenId() + ";" + JCRStrConst.AUTHORITY_KEY_MULTI_SELECT_WKGRP_FLG);

		// (d)SV以上に相当する権限を持たない場合
		if (!authorityFlg) 
		{
			bean.sendMessageString(CRW08301SFConst.CHOICEALLWKGRP_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.DISABLED_STRING);
			bean.sendMessageString(CRW08301SFConst.CLEARALLWKGRP_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.DISABLED_STRING);
			bean.sendMessageBoolean(CRW08301SFConst.MULTI_CHOICE_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
		}

		// (e)権限有無判定の実行
		boolean dispFlg = JCRWebCommon.checkAuthority(this, this.getGamenId() + ";" + JCRStrConst.AUTHORITY_KEY_ALL_DISP_SEND_FLG);

		// (f)SV以上に相当する権限を持たない場合
		if (!dispFlg) 
		{
			bean.sendMessageBoolean(CRW08301SFConst.ALL_DISP_SEND_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
		}

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0113");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0113_CRSV0113OPDBMapper mapper = new CRSV0113_CRSV0113OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピング処理（上り）
		mapper.setUPDEOMESLOGINJSKCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setGETWKKBTGRCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011301SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011302SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011303SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// (a)サービスの処理結果を取得する。
		mapper.getUPDEOMESLOGINJSKCC(paramBean, outputMap);
		mapper.getGETWKKBTGRCC(paramBean, outputMap);
		mapper.getCRSV011301SC(paramBean, outputMap);
		mapper.getCRSV011303SC(paramBean, outputMap);

		// (b)メッセージの編集
		String sendRcvRireki = setSendRcvRireki(bean);

		// (c)ログイン定期更新間隔時間をミリ秒に変換
		int teikiTime = Integer.parseInt(bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_GET_VALUE));
		teikiTime = teikiTime * 60000;

		// (d)サービスフォームBeanの設定
		bean.sendMessageString(CRW08301SFConst.SEND_RCV_MSG, X31CWebConst.DATABEAN_SET_VALUE, sendRcvRireki);
		bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(teikiTime));

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * ワークグループ検索項目編集処理。<br>
	 * <br>
	 * 画面初期表示時に取得した全ワークグループのリストから、
	 * 検索キーとして入力されたワークグループ名をマッチングし、ヒットした名称のリストを返します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean searchWkgrp() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)ワークグループリスト、エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.WKKBT_ORG).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// (b)(c)ワークグループリストの再設定
		// 画面入力されたワークグループ名
		String keyOrgNm = bean.sendMessageString(CRW08301SFConst.KEY_WKKBT_ORG_NM, X31CWebConst.DATABEAN_GET_VALUE);

		X31SDataBeanAccessArray allList = bean.getDataBeanArray(CRW08301SFConst.ALL_WKKBT_ORG);
		X31SDataBeanAccessArray wgList = bean.getDataBeanArray(CRW08301SFConst.WKKBT_ORG);

		// 退避している全ワークグループリストからマッチング
		for (int i = 0; i < allList.getCount(); i++)
		{
			X31SDataBeanAccess orgBean = allList.getDataBean(i);
			String orgCd = orgBean.sendMessageString(CRW08301SFConst.L1_WKKBT_ORG_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
			String orgNm = orgBean.sendMessageString(CRW08301SFConst.L1_WKKBT_ORG_NM_02, X31CWebConst.DATABEAN_GET_VALUE);

			int indexOf = orgNm.lastIndexOf(keyOrgNm);

			// キーの指定がない場合、もしくはキーの指定がありキーと一致した場合設定
			if ((JCRUtilCommon.isNull(keyOrgNm)) || (indexOf > -1))
			{
				X31SDataBeanAccess wgBean = wgList.addDataBean();
				wgBean.sendMessageString(CRW08301SFConst.L0_WKKBT_ORG_CD_01, X31CWebConst.DATABEAN_SET_VALUE, orgCd);
				wgBean.sendMessageString(CRW08301SFConst.L0_WKKBT_ORG_NM_01, X31CWebConst.DATABEAN_SET_VALUE, orgNm);
			}
		}

		// (d)ログインユーザー一覧照会明細、ワークグループ名をクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0291B010CBSMSG1LIST).clearArray();
		bean.sendMessage(CRW08301SFConst.KEY_WKKBT_ORG_NM, X31CWebConst.DATABEAN_CLEAR);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * ワークグループ選択処理。<br>
	 * <br>
	 * 選択されたワークグループに関連する、送信先を返します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean choiceWkgroup() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)ログインユーザー一覧照会明細、エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0291B010CBSMSG1LIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// (b)システム日時の取得
		String sysDate = JCRWebCommon.getSysDateTime();

		// (c)業務個別設定組織コードの編集
		String keyWkkbtOrgIdx = bean.sendMessageString(CRW08301SFConst.KEY_WKKBT_ORG_IDX, X31CWebConst.DATABEAN_GET_VALUE);
		String[] keyWkkbtOrgIdxList = keyWkkbtOrgIdx.split(JCRStrConst.STR_HALF_COMMA);
		StringBuilder keyWkkbtOrgCd = new StringBuilder();

		X31SDataBeanAccessArray wkkbtOrgList = bean.getDataBeanArray(CRW08301SFConst.WKKBT_ORG);

		for (int i = 0; i < keyWkkbtOrgIdxList.length; i++) 
		{
			X31SDataBeanAccess orgBean = wkkbtOrgList.getDataBean(Integer.parseInt(keyWkkbtOrgIdxList[i]));
			String orgCd = orgBean.sendMessageString(CRW08301SFConst.L0_WKKBT_ORG_CD_01, X31CWebConst.DATABEAN_GET_VALUE);

			if (!"".equals(keyWkkbtOrgCd.toString())) 
			{
				keyWkkbtOrgCd.append(JCRStrConst.STR_HALF_COMMA);
			}
			keyWkkbtOrgCd.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION)
							.append(orgCd)
							.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION);
		}

		// (d)サービスフォームBeanの設定
		int teikiTime = Integer.parseInt(bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_GET_VALUE));
		String loginUsrAcqDtm = JCRWebCommon.toyyyyMMddHHmmss(JCRWebCommon.toTimeMinute(sysDate) - teikiTime);
		bean.sendMessageString(CRW08301SFConst.LOGIN_USR_ACQ_DTM, X31CWebConst.DATABEAN_SET_VALUE, loginUsrAcqDtm);
		bean.sendMessageString(CRW08301SFConst.KEY_WKKBT_ORG_CD, X31CWebConst.DATABEAN_SET_VALUE, keyWkkbtOrgCd.toString());

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0114");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0114_CRSV0114OPDBMapper mapper = new CRSV0114_CRSV0114OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピング処理（上り）
		mapper.setCRSV011401SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// サービスの処理結果を取得する。
		mapper.getCRSV011401SC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * 全選択ボタン押下(ワークグループ)処理。<br>
	 * <br>
	 * 表示されている全ワークグループに関連する、送信先を返します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean choiceAllWkgrp() throws Exception
	{
		return choiceWkgroup();
	}

	/**
	 * 全解除ボタン押下(ワークグループ)処理。<br>
	 * <br>
	 * 表示されている送信先をクリアします。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clearAllWkgrp() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// ログインユーザー一覧照会明細、エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0291B010CBSMSG1LIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * 送信ボタン押下処理。<br>
	 * <br>
	 * 入力されたメッセージを登録します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean send() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)メッセージ登録明細、メッセージリスト、エラーメッセージ、送信不可ユーザー、送信不可メッセージ番号をクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.MSGLIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.SEND_NG_USER).clearArray();
		bean.sendMessage(CRW08301SFConst.SEND_NG_MSG_NO, X31CWebConst.DATABEAN_CLEAR);

		// (b)システム日時の取得
		String sysDate = JCRWebCommon.getSysDateTime();

		// (c)サービスフォームBeanの設定
		String msgKijunDtm = bean.sendMessageString(CRW08301SFConst.MSG_KIJUN_DTM, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(CRW08301SFConst.MSG_KIJUN_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCRWebCommon.addTime(msgKijunDtm, ADD_TIME, true));
		bean.sendMessageString(CRW08301SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);

		int teikiTime = Integer.parseInt(bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_GET_VALUE));
		String loginUsrAcqDtm = JCRWebCommon.toyyyyMMddHHmmss(JCRWebCommon.toTimeMinute(sysDate) - teikiTime);
		bean.sendMessageString(CRW08301SFConst.LOGIN_USR_ACQ_DTM, X31CWebConst.DATABEAN_SET_VALUE, loginUsrAcqDtm);

// v9.00.00 OM-2014-0002387 MOD START
//		String keyLoginUserIdx = bean.sendMessageString(CRW08301SFConst.KEY_LOGIN_USER_IDX, X31CWebConst.DATABEAN_GET_VALUE);
//		String[] keyLoginUserIdxList = keyLoginUserIdx.split(JCRStrConst.STR_HALF_COMMA);
//
//		X31SDataBeanAccessArray msgList = bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST);
//		X31SDataBeanAccessArray userList = bean.getDataBeanArray(CRW08301SFConst.ECR0291B010CBSMSG1LIST);
//		for (int i = 0; i < keyLoginUserIdxList.length; i++) 
//		{
//			X31SDataBeanAccess userBean = userList.getDataBean(Integer.parseInt(keyLoginUserIdxList[i]));
//			String userId = userBean.sendMessageString(CRW08301SFConst.L2_EOMES_LOGIN_USER_ID_03, X31CWebConst.DATABEAN_GET_VALUE);
//			String orgCd = userBean.sendMessageString(CRW08301SFConst.L2_EOMES_LOGIN_WKKBT_ORG_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
//			String pstCd = userBean.sendMessageString(CRW08301SFConst.L2_EOMES_LOGIN_WKKBT_PST_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
//
//			X31SDataBeanAccess msgBean = msgList.addDataBean();
//			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USER_ID_05, X31CWebConst.DATABEAN_SET_VALUE, userId);
//			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_ORG_CD_05, X31CWebConst.DATABEAN_SET_VALUE, orgCd);
//			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_PST_CD_05, X31CWebConst.DATABEAN_SET_VALUE, pstCd);
//		}

		// カンマで分割する
		String selUserId = bean.sendMessageString(CRW08301SFConst.SEL_USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String[] selUserIdList = selUserId.split(JCRStrConst.STR_HALF_COMMA);
		String selWkkbtOrg = bean.sendMessageString(CRW08301SFConst.SEL_WKKBT_ORG_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String[] selWkkbtOrgList = selWkkbtOrg.split(JCRStrConst.STR_HALF_COMMA);
		String selWkkbtPst = bean.sendMessageString(CRW08301SFConst.SEL_WKKBT_PST_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String[] selWkkbtPstList = selWkkbtPst.split(JCRStrConst.STR_HALF_COMMA);

		X31SDataBeanAccessArray msgList = bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST);

		for (int i = 0; i < selUserIdList.length; i++) 
		{
			X31SDataBeanAccess msgBean = msgList.addDataBean();
			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USER_ID_05, X31CWebConst.DATABEAN_SET_VALUE, selUserIdList[i]);
			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_ORG_CD_05, X31CWebConst.DATABEAN_SET_VALUE, selWkkbtOrgList[i]);
			msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_PST_CD_05, X31CWebConst.DATABEAN_SET_VALUE, selWkkbtPstList[i]);
		}
// v9.00.00 OM-2014-0002387 MOD END

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0115");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0115_CRSV0115OPDBMapper mapper = new CRSV0115_CRSV0115OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピング処理（上り）
		mapper.setADDEOMESMESSAGECC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011501SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// (a)サービスの処理結果を取得する。
		mapper.getADDEOMESMESSAGECC(paramBean, outputMap);
		mapper.getCRSV011501SC(paramBean, outputMap);

// v9.00.00 OM-2014-0002387 ADD START
		// 選択ユーザーＩＤ、選択業務個別設定組織コード、選択業務個別設定立場コードのクリア
		bean.sendMessage(CRW08301SFConst.SEL_USER_ID, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.SEL_WKKBT_ORG_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.SEL_WKKBT_PST_CD, X31CWebConst.DATABEAN_CLEAR);
// v9.00.00 OM-2014-0002387 ADD END

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * 返信ボタン押下処理。<br>
	 * <br>
	 * 入力されたメッセージを登録します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean reply() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)メッセージ登録明細、メッセージリスト、エラーメッセージ、送信不可ユーザー、送信不可メッセージ番号をクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.MSGLIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.SEND_NG_USER).clearArray();
		bean.sendMessage(CRW08301SFConst.SEND_NG_MSG_NO, X31CWebConst.DATABEAN_CLEAR);

		// (b)最新受信内容存在チェック
		if ("".equals(bean.sendMessageString(CRW08301SFConst.NEWEST_RCV_USER_ID, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// 最新受信内容が存在しない場合、メッセージを設定
			X31SDataBeanAccessArray errMsgList = bean.getDataBeanArray(CRW08301SFConst.ERR_MSG);
			X31SDataBeanAccess emBean = errMsgList.addDataBean();
			emBean.sendMessageString(CRW08301SFConst.L5_MSG_ID_06, X31CWebConst.DATABEAN_SET_VALUE, "EKB2180-KW");

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// (c)メッセージ登録明細、メッセージリストをクリア
		bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.MSGLIST).clearArray();

		// (d)システム日時の取得
		String sysDate = JCRWebCommon.getSysDateTime();

		// (e)サービスフォームBeanの設定
		String msgKijunDtm = bean.sendMessageString(CRW08301SFConst.MSG_KIJUN_DTM, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(CRW08301SFConst.MSG_KIJUN_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCRWebCommon.addTime(msgKijunDtm, ADD_TIME, true));
		bean.sendMessageString(CRW08301SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);

		int teikiTime = Integer.parseInt(bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_GET_VALUE));
		String loginUsrAcqDtm = JCRWebCommon.toyyyyMMddHHmmss(JCRWebCommon.toTimeMinute(sysDate) - teikiTime);
		bean.sendMessageString(CRW08301SFConst.LOGIN_USR_ACQ_DTM, X31CWebConst.DATABEAN_SET_VALUE, loginUsrAcqDtm);

		X31SDataBeanAccessArray msgList = bean.getDataBeanArray(CRW08301SFConst.ECR0271D010CBSMSG1LIST);
		String userId = bean.sendMessageString(CRW08301SFConst.NEWEST_RCV_USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String orgCd = bean.sendMessageString(CRW08301SFConst.NEWEST_RCV_ORG_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String pstCd = bean.sendMessageString(CRW08301SFConst.NEWEST_RCV_PST_CD, X31CWebConst.DATABEAN_GET_VALUE);

		X31SDataBeanAccess msgBean = msgList.addDataBean();
		msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USER_ID_05, X31CWebConst.DATABEAN_SET_VALUE, userId);
		msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_ORG_CD_05, X31CWebConst.DATABEAN_SET_VALUE, orgCd);
		msgBean.sendMessageString(CRW08301SFConst.L4_EOMES_RCV_USR_WKKBT_PST_CD_05, X31CWebConst.DATABEAN_SET_VALUE, pstCd);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0115");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0115_CRSV0115OPDBMapper mapper = new CRSV0115_CRSV0115OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピング処理（上り）
		mapper.setADDEOMESMESSAGECC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011501SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// (a)サービスの処理結果を取得する。
		mapper.getADDEOMESMESSAGECC(paramBean, outputMap);
		mapper.getCRSV011501SC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * クリアボタン押下処理。<br>
	 * <br>
	 * 送受信履歴をクリアします。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clear() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)送受信メッセージ、最新受信内容、エラーメッセージをクリア
		bean.sendMessage(CRW08301SFConst.SEND_RCV_MSG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_USER_ID, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_USER_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_ORG_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_ORG_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_PST_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08301SFConst.NEWEST_RCV_PST_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * ユーザー名クリック(送受信履歴)処理。<br>
	 * <br>
	 * 送受信履歴でクリックされたユーザー情報を取得します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clickUser() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// (b)システム日時の取得
		String sysDate = JCRWebCommon.getSysDateTime();

		// (c)サービスフォームBeanの設定
		int teikiTime = Integer.parseInt(bean.sendMessageString(CRW08301SFConst.TEIKI_TIME, X31CWebConst.DATABEAN_GET_VALUE));
		String loginUsrAcqDtm = JCRWebCommon.toyyyyMMddHHmmss(JCRWebCommon.toTimeMinute(sysDate) - teikiTime);
		bean.sendMessageString(CRW08301SFConst.LOGIN_USR_ACQ_DTM, X31CWebConst.DATABEAN_SET_VALUE, loginUsrAcqDtm);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0117");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0117_CRSV0117OPDBMapper mapper = new CRSV0117_CRSV0117OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピング処理（上り）
		mapper.setCRSV011701SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011702SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// (a)サービスの処理結果を取得する。
		mapper.getCRSV011701SC(paramBean, outputMap);

		// (b)一意照会の検索エラーフラグが空白 かつ ログインユーザー取得日時≦eoMessenger定期更新年月日時分秒とシステム日時の場合
		if ("".equals(bean.sendMessageString(CRW08301SFConst.LOGIN_JSK_SEARCH_ERR_FLG, X31CWebConst.DATABEAN_GET_VALUE))
			&& loginUsrAcqDtm.compareTo(bean.sendMessageString(CRW08301SFConst.EOMES_TEIKI_UPD_DTM, X31CWebConst.DATABEAN_GET_VALUE)) <= 0) 
		{
			// ログインユーザー一覧照会明細をクリア
			bean.getDataBeanArray(CRW08301SFConst.ECR0291B010CBSMSG1LIST).clearArray();

			// サービスの処理結果を取得する
			mapper.getCRSV011702SC(paramBean, outputMap);
		} 
		else 
		{
			// メッセージを設定
			bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();
			X31SDataBeanAccessArray errMsgList = bean.getDataBeanArray(CRW08301SFConst.ERR_MSG);
			X31SDataBeanAccess emBean = errMsgList.addDataBean();
			emBean.sendMessageString(CRW08301SFConst.L5_MSG_ID_06, X31CWebConst.DATABEAN_SET_VALUE, "EKB6500-KW");
			emBean.sendMessageString(CRW08301SFConst.L5_REPLACE_STR_06, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.STR_SELECT_LOGIN_USER);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// (c)サービスフォームBeanの設定
		// 退避している全ワークグループリスト
		X31SDataBeanAccessArray allList = bean.getDataBeanArray(CRW08301SFConst.ALL_WKKBT_ORG);

		// ワークグループリストをクリア
		bean.getDataBeanArray(CRW08301SFConst.WKKBT_ORG).clearArray();

		X31SDataBeanAccessArray wgList = bean.getDataBeanArray(CRW08301SFConst.WKKBT_ORG);

		// 退避している全ワークグループリストからマッチング
		for (int i = 0; i < allList.getCount(); i++)
		{
			X31SDataBeanAccess orgBean = allList.getDataBean(i);
			String orgCd = orgBean.sendMessageString(CRW08301SFConst.L1_WKKBT_ORG_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
			String orgNm = orgBean.sendMessageString(CRW08301SFConst.L1_WKKBT_ORG_NM_02, X31CWebConst.DATABEAN_GET_VALUE);

			// 業務個別設定組織コード＝選択業務個別設定組織コード（送信履歴）の場合
			if (orgCd.equals(bean.sendMessageString(CRW08301SFConst.CHOICE_ORG_CD_INMSG, X31CWebConst.DATABEAN_GET_VALUE))) 
			{
				bean.sendMessageString(CRW08301SFConst.KEY_WKKBT_ORG_IDX, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i));
			}

			X31SDataBeanAccess wgBean = wgList.addDataBean();
			wgBean.sendMessageString(CRW08301SFConst.L0_WKKBT_ORG_CD_01, X31CWebConst.DATABEAN_SET_VALUE, orgCd);
			wgBean.sendMessageString(CRW08301SFConst.L0_WKKBT_ORG_NM_01, X31CWebConst.DATABEAN_SET_VALUE, orgNm);
		}

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * ログイン実績更新処理。<br>
	 * <br>
	 * ログイン実績を更新します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean updLoginJsk() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// (b)システム日時の取得
		String sysDate = JCRWebCommon.getSysDateTime();

		// (c)サービスフォームBeanの設定
		bean.sendMessageString(CRW08301SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0118");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0118_CRSV0118OPDBMapper mapper = new CRSV0118_CRSV0118OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピング処理（上り）
		mapper.setCRSV011801SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// サービスの処理結果を取得する。
		mapper.getCRSV011801SC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * メッセージ受信処理。<br>
	 * <br>
	 * 最新の受信メッセージを取得します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean receiveMsg() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// メッセージリスト、エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.MSGLIST).clearArray();
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0116");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0116_CRSV0116OPDBMapper mapper = new CRSV0116_CRSV0116OPDBMapper();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピング処理（上り）
		mapper.setCRSV011601SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス実行
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException ex)
		{
			// エラーメッセージの設定
			setErrMsg(bean, ex);

			// 遷移先画面ID、名称の設定
			setNextScreen(commoninfoBean);

			return true;
		}

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// サービスの処理結果を取得する。
		mapper.getCRSV011601SC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		setNextScreen(commoninfoBean);

		return true;
	}

	/**
	 * eoMessenger着信通知画面表示処理。<br>
	 * <br>
	 * eoMessenger着信通知画面に遷移します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean showWindow() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// エラーメッセージをクリア
		bean.getDataBeanArray(CRW08301SFConst.ERR_MSG).clearArray();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW08302);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW08302);

		return true;
	}

	/**
	 * 送受信履歴補正処理（送受信メッセージ）。<br>
	 * 
	 * @param  bean   サービスフォームBean
	 * @return String 補正後データ
	 */
	private String setSendRcvRireki(X31SDataBeanAccess bean)
	{
		// メッセージリスト
		X31SDataBeanAccessArray sendRcvList = bean.getDataBeanArray(CRW08301SFConst.MSGLIST);

		StringBuilder sendRcvRireki = new StringBuilder();
		ArrayList<String> sendMsgNoList = new ArrayList<String>();

		for (int i = 0; i < sendRcvList.getCount(); i++)
		{
			X31SDataBeanAccess sendRcvBean = sendRcvList.getDataBean(i);

			String sendMulti =  "";

			// 送受信区分の取得
			String sndRcvKbn = sendRcvBean.sendMessageString(CRW08301SFConst.L3_SEND_RCV_KBN_04, X31CWebConst.DATABEAN_GET_VALUE);

			// メッセージ番号の取得
			String msgNo = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_MSG_NO_04, X31CWebConst.DATABEAN_GET_VALUE);

			// メッセージIDが重複している場合
			if (sendMsgNoList.contains(msgNo)) 
			{
				continue;
			}

			// 最終データでない場合
			if (i != (sendRcvList.getCount() - 1)) 
			{
				// 送受信区分が送信の場合
				if (JCRStrConst.SEND_RCV_KBN_SEND.equals(sndRcvKbn)) 
				{
					// 次レコードの取得
					X31SDataBeanAccess nextBean = sendRcvList.getDataBean(i + 1);

					// 次レコードの送受信区分が送信の場合
					if (JCRStrConst.SEND_RCV_KBN_SEND.equals(nextBean.sendMessageString(CRW08301SFConst.L3_SEND_RCV_KBN_04, X31CWebConst.DATABEAN_GET_VALUE))) 
					{
						// メッセージ番号が同じ場合
						if (msgNo.equals(nextBean.sendMessageString(CRW08301SFConst.L3_EOMES_MSG_NO_04, X31CWebConst.DATABEAN_GET_VALUE))) 
						{
							// メッセージ番号が送信メッセージリストにない場合
							if (!sendMsgNoList.contains(msgNo)) 
							{
								sendMulti = JCRStrConst.STR_SEND_MULTI;
								sendMsgNoList.add(msgNo);
							}
						}
					}
				}
			}

			String[] strList = new String[11];
			strList[0] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_SEND_DTM_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[1] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_WKKBT_POSITION_NM_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[2] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_USER_ID_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[3] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_USR_WKKBT_ORG_CD_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[4] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_USR_WKKBT_PST_CD_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[5] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_USER_NM_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[6] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_WKKBT_ORG_CD_NM_04, X31CWebConst.DATABEAN_GET_VALUE);
			strList[7] = sendMulti;
			strList[8] = sendRcvBean.sendMessageString(CRW08301SFConst.L3_EOMES_SEND_MSG_NYO_04, X31CWebConst.DATABEAN_GET_VALUE);

			sendRcvRireki.append(getEditMsg(strList, sndRcvKbn));
		}

		return sendRcvRireki.toString();
	}

	/**
	 * メッセージの編集処理。<br>
	 * 
	 * @param  strList    メッセージ編集文字列リスト
	 * @param  sendRcvKbn 送受信区分
	 * @return String     補正後データ
	 */
	private String getEditMsg(String[] strList, String sendRcvKbn) 
	{
		StringBuilder msgAll = new StringBuilder();
		String color = null;
		String sendRcv = null;

		if (JCRStrConst.SEND_RCV_KBN_SEND.equals(sendRcvKbn)) 
		{
			// 送信の場合
			color = JCRStrConst.TAG_COLOR_GREEN;
			sendRcv = JCRStrConst.STR_SEND;
		} 
		else if (JCRStrConst.SEND_RCV_KBN_RCV.equals(sendRcvKbn))
		{
			// 受信の場合
			color = JCRStrConst.TAG_COLOR_BLUE;
			sendRcv = JCRStrConst.STR_RECEIVE;
		}

		// メッセージの編集
		msgAll.append(color)
				.append(JCRStrConst.STR_PARTITION)
				.append(JCRUtilCommon.formatDate(strList[0], JCRStrConst.FMT_YMDHMS, JCRStrConst.FMT_EDIT_HMS))
				.append(sendRcv)
				.append(strList[1])
				.append(JCRStrConst.STR_HALF_COLON)
				.append(JCRStrConst.TAG_SPAN_USER)
				.append(strList[2])
				.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION)
				.append(JCRStrConst.STR_HALF_COMMA)
				.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION)
				.append(strList[3])
				.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION)
				.append(JCRStrConst.STR_HALF_COMMA)
				.append(JCRStrConst.STR_HALF_SINGLE_QUOTATION)
				.append(strList[4])
				.append(JCRStrConst.TAG_SPAN_END)
				.append(strList[5])
				.append(JCRStrConst.TAG_SPAN_CLOSE)
				.append(" ")
				.append(strList[6])
				.append(strList[7])
				.append(JCRStrConst.STR_PARTITION)
				.append(JCRStrConst.TAG_BR)
				.append(JCRStrConst.TAG_TABLE_MSG);

		String[] msgDtl = strList[8].split(JCRStrConst.KAIGYO_CD, -1);
		for (int i = 0; i < msgDtl.length; i++) 
		{
			msgAll.append(JCRStrConst.TAG_TR_MSG)
					.append(JCRStrConst.TAG_TD_MSG)
					.append(msgDtl[i].replaceAll(JCRStrConst.STR_LESSER, JCRStrConst.ESCAPE_LESSER)
										.replaceAll(JCRStrConst.STR_GREATER, JCRStrConst.ESCAPE_GREATER))
					.append(JCRStrConst.TAG_TD_CLOSE)
					.append(JCRStrConst.TAG_TR_CLOSE);
		}

		msgAll.append(JCRStrConst.TAG_TABLE_CLOSE)
				.append(JCRStrConst.TAG_BR_COLOR);

		return msgAll.toString();
	}

	/**
	 * 遷移先画面設定処理。<br>
	 * 
	 * @param commoninfoBean 共通フォームBean
	 */
	private void setNextScreen(X31SDataBeanAccess commoninfoBean) 
	{
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW08301);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW08301);
	}

	/**
	 * 例外エラーメッセージの設定処理。<br>
	 * 
	 * @param bean サービスフォームBean
	 * @param ex   例外エラー情報
	 */
	private void setErrMsg(X31SDataBeanAccess bean, JCCWebServiceException ex) 
	{
		String[] msgidList = ex.getMessageList().getMessageIdList();
		X31CMessageMoreInfo[] infoList = ex.getMessageList().getMessageMoreInfoList();

		// メッセージを設定
		X31SDataBeanAccessArray errMsgList = bean.getDataBeanArray(CRW08301SFConst.ERR_MSG);
		for (int i = 0; i < msgidList.length; i++) 
		{
			X31SDataBeanAccess emBean = errMsgList.addDataBean();
			emBean.sendMessageString(CRW08301SFConst.L5_MSG_ID_06, X31CWebConst.DATABEAN_SET_VALUE, msgidList[i]);
			emBean.sendMessageString(CRW08301SFConst.L5_REPLACE_STR_06, X31CWebConst.DATABEAN_SET_VALUE, infoList[i].getReplaceStr());
		}
	}
}
