/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：ZMW06901SFLogic
*	ソースファイル名	：ZMW06901SFLogic.java
*	作成者				：富士通　
*	作成日				：2011年08月07日
*＜機能概要＞
*　Viewロジック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/08/07  FJ) 宮前	新規作成
*	v3.00		2012/03/21	FJ) 宮前	【UIZ-0922-00-00】営業日管理スキーマ変更に伴う修正
*	v3.00		2012/04/06	FJ) 宮前	【SGY-2012-000006】統合認証対応
*	v3.00		2012/04/06	FJ) 宮前	【ANK-0025-00-00】ギガルータ対応
*	v3.00		2012/04/06	FJ) 宮前	【ANK-0023-00-00】着信Eポップの転送時引き継ぎ対応
*	v3.01		2012/05/22	FJ) 宮前	【ST7-2012-0000003】リンクインジェクション対応
*	v3.01		2012/05/22	FJ) 宮前	【SGY-2012-000006】統合認証対応
*	v3.01		2012/09/03	FJ) 宮前	【ST1-2012-0000256】着信Eポップの不具合対応
*	v3.01		2012/09/03	FJ) 宮前	【ST1-2012-0000258】着信Eポップの不具合対応
*	v3.02		2012/08/09	FJ) 宮前	【ST1-2012-0000286】Claris連携 不具合対応
*	v4.00		2012/06/05	FJ) 宮前	【ANK-0494-01-00】ICSWEB対応(Spri対応)
*	v4.01		2012/06/27	FJ) 宮前	【ANK-0372-00-00】オーダリング1次対応
*	v6.00		2013/08/22	FJ) 岩元	【OM-2013-0000482】eoMessenger自動起動停止対応
*********************************************************************/
package eo.web.webview.ZMW06901SF;

import java.util.ArrayList;
import java.util.HashMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JCCFrameworkException;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CRW01201SF.CRW01201SFConst;
import eo.web.webview.CRW02401SF.CRW02401SFConst;
import eo.web.webview.CRW10401SF.CRW10401SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ZMW11201SF.ZMW11201SFConst;
import eo.web.webview.common.JCCCalendarConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.mapping.ZMSV0004_ZMSV0004OPDBMapper;
import eo.web.webview.mapping.ZMSV0005_ZMSV0005OPDBMapper;
import eo.web.webview.mapping.ZMSV0060_ZMSV0060OPDBMapper;
import eo.web.webview.mapping.ZMSV0063_ZMSV0063OPDBMapper;
import eo.web.webview.mapping.ZMSV0089_ZMSV0089OPDBMapper;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
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.x33.X33CUtil;

/**
 * メニュー画面ビューロジック<p>
 * <BR>
 * @author FJ
 */
public class ZMW06901SFLogic extends JCCWebBusinessLogic 
{
	/* ++++++++++ v4.01.0 追加開始 ++++++++++ */
	
	/** アプリケーションプロパティ KEY 申込イメージ呼出画面起動位置ＴＯＰ */
	private static final String KEY_PRP_ZM_CALL_ZDW01201_WEIDHT = "ZM_CALL_ZDW01201_WEIDHT";
	
	/** アプリケーションプロパティ KEY 申込イメージ呼出画面起動位置ＬＥＦＴ */
	private static final String KEY_PRP_ZM_CALL_ZDW01201_HEIGHT = "ZM_CALL_ZDW01201_HEIGHT";
	
	/** アプリケーションプロパティ KEY 申込イメージ呼出画面起動位置ＨＥＩＧＨＴ */
	private static final String KEY_PRP_ZM_CALL_ZDW01201_LEFT = "ZM_CALL_ZDW01201_LEFT";
	
	/** アプリケーションプロパティ KEY 申込イメージ呼出画面起動位置ＷＥＩＤＨＴ */
	private static final String KEY_PRP_ZM_CALL_ZDW01201_TOP = "ZM_CALL_ZDW01201_TOP";
	
	/* ++++++++++ v4.01.0 追加終了 ++++++++++ */
	
	/** 外部連携用 リクエストパラメータ Key：画面ID */
	private static final String KEY_SCREEN_ID = "screenId";
	
	/** eoMessenger 画面ID */
	private static final String SCREEN_ID_EO_MESSENGER = "CRW08301";
	
	/** 外部連携用 リクエストパラメータ Key：ePOP引継キー情報 */
	private static final String KEY_KEY_INFO = "epop_tenso_rnki_key";
	
	/** 外部連携用 リクエストパラメータ Key：着信電話番号 */
	private static final String KEY_TELNO = "telno";
	
	/** 外部連携用 リクエストパラメータ Key：サービス契約番号リスト */
	private static final String KEY_CUST_ID_LST = "custIdLst";
	
	/** 外部連携用 リクエストパラメータ Key：サービス契約番号リスト区切り文字 */
	private static final String KEY_CUST_ID_LST_DELMI = ",";
	
	/** 外部連携用 リクエストパラメータ Key：問合せ客IDリスト */
	private static final String KEY_SYM_ID_LST = "symIdLst";
	
	/** 外部連携用 リクエストパラメータ Key：問合せ客IDリスト区切り文字 */
	private static final String KEY_SYM_ID_LST_DELMI = ",";
	
	/** 外部連携用 リクエストパラメータ Key：起動画面ID */
	private static final String KEY_GMNID = "gmnid";
	
	/** 外部連携用 リクエストパラメータ Key：起動画面ID区切り文字 */
	private static final String KEY_GMNID_DELMI = ":";
	
	/** 外部連携用 リクエストパラメータ Key：イベントID */
	private static final String KEY_EVENT_ID = "eventId";
	
	/** 外部連携用 ePOP連携 イベントID 初期起動 */
	private static final String EPOP_EVENT_ID_INIT = "01";
	
	/** 外部連携用 ePOP連携 イベントID 着信拒否解除 */
	private static final String EPOP_EVENT_ID_CALL_BLOCK_RELEASE = "02";
	
	/** 外部連携用 ePOP連携 イベントID 着信 */
	private static final String EPOP_EVENT_ID_CALL = "04";
	
	/** 外部連携用 ePOP連携 イベントID 転送先 */
	private static final String EPOP_EVENT_ID_FORWARD_TO = "10";
	
	/** 外部連携用 ePOP連携 イベントID 手動起動(プレビュー) */
	private static final String EPOP_EVENT_ID_PREVIEW = "20";

	/** 外部連携用 ePOP連携 イベントID 手動起動(アウトバウンド) */
	private static final String EPOP_EVENT_ID_OUTBOUND = "30";
	
	/** 外部連携用 ePOP連携 イベントID 手動起動(あふれ呼) */
	private static final String EPOP_EVENT_ID_OVERFLOW_CALL = "40";

	/** 外部連携用 リクエストパラメータKey（引継ぎ不要なパラメータ） */
	private static final String KEY_NON_HKTGI_KMK = "ZM_NON_HKTGI_KMK";
	
	/** 外部連携用 リクエストパラメータKey（引継ぎ不要なパラメータ） 区切り文字 */
	private static final String KEY_NON_HKTGI_KMK_DELMI = ";";
	
	/** メニュー設定ファイルの位置 */
	private static final String KEY_MENU_FILE_PATH = "ZM_MENU_SETTING_FILE";
	
	/** メニュー設定ファイルの要素：大分類 */
	private static final String MENU_FILE_ELEM_DBRI = "dbri";
	
	/** メニュー設定ファイルの要素：中分類 */
	private static final String MENU_FILE_ELEM_CBRI = "cbri";
	
	/** メニュー設定ファイルの要素：小分類 */
	private static final String MENU_FILE_ELEM_SBRI = "sbri";
	
	/** メニュー設定ファイルの大分類、中分類、小分類の共通属性：表示名 */
	private static final String MENU_FILE_ATTR_DSP_NM = "dspNm";
	
	/** メニュー設定ファイルの中分類、小分類の共通属性：画面ID */
	private static final String MENU_FILE_ATTRS_SCREEN_ID = "screenId";
	
	/** メニュー設定ファイルの中分類、小分類の共通属性：画面名 */
	private static final String MENU_FILE_ATTR_SCREEN_NM = "screenNm";
	
	/** メニュー設定ファイルの中分類、小分類の共通属性：ウィンドウ名 */
	private static final String MENU_FILE_ATTR_WINDOW_NM = "windowNm";
	
	/** メニュー設定ファイルの中分類、小分類の共通属性：連携先URL */
	private static final String MENU_FILE_ATTR_URL = "url";
	
	/** メニュー設定ファイルの中分類、小分類の共通属性：連携先 SYS ID */
	private static final String MENU_FILE_ATTR_SYS_ID = "sysid";
	
	/** 他サイト連携用 ScreenInfo HashMap Key */
	private static final String KEY_URL = "key_url";
	
	/** WebFOCUS連携用 ScreenInfo HashMap Key */
	private static final String KEY_WEB_FOCUS = "key_web_focus";
	
	/** WebFOCUS連携用 POST 項目名 ワンタイムパスワード */
	private static final String KEY_WEB_FOCUS_ONETIME_PASS = "onetimepass";
	
	/** WebFOCUS連携用 POST 項目名 ユーザーID */
	private static final String KEY_WEB_FOCUS_USER_ID = "userid";
	
	/** WebFOCUS連携用 POST 項目名 ユーザーID */
	private static final String KEY_WEB_FOCUS_TOOL_URL = "toolurl";
	
	/** WebFOCUS連携用 POST 項目名 POST URL */
	private static final String KEY_WEB_FOCUS_POST_URL = "posturl";
	
	/** WebFOCUS対応 */
	private static final String MENU_FILE_ATTR_TOOL_URL = "toolUrl";
	
	/** サービス ZMSV0004 */
	private static final String USECASE_ID_0004 = "ZMSV0004";
	
	/** サービス ZMSV0005 */
	private static final String USECASE_ID_0005 = "ZMSV0005";
	
	/**サービス ZMSV0060  */
	private static final String USECASE_ID_0060 = "ZMSV0060";
	
	/** サービス ZMSV0063 */
	private static final String USECASE_ID_0063 = "ZMSV0063";
	
	/** サービス ZMSV0089 */
	private static final String USECASE_ID_0089 = "ZMSV0089";
	
	/** セッション格納時のKey */
	private static final String SESSION_KEY = "ZMW06901_SESSION_KEY";
	
	/** 外部連携用 貸与品確認 KEY 認証状態 */
	private static final String KEY_NINSHO_STAT = "ninsho_stat";
	
	/** 外部連携用 ワンタイムパスワード 認証 NG */
	private static final String NINSHO_NG = "1";
	
	/** SPRi Menu.xmlに設定されている画面IDの接頭辞 */
	private static final String SPRI_SCREEN_STARTWITH = "ZZW001";
	
	/** 統合認証システム連携部品からサービスフォームBeanへ設定する際に必要な項目名リスト */
	private static final String[][] KEY_LIST_FOR_LDAP_RESULT =
	{
		
			// リスト名,組織コード項目名,立場コード項目名,上位組織コード項目名
			{ZMW06901SFConst.ORG_LIST, ZMW06901SFConst.ORG_CD_04, ZMW06901SFConst.POSITION_CD_04, ""}, 
			{ZMW06901SFConst.WKKBT_ORG_LIST, ZMW06901SFConst.WKKBT_ORG_CD_05, ZMW06901SFConst.WKKBT_POSITION_CD_05, 
				ZMW06901SFConst.WKORG_CD_05}, 
			{ZMW06901SFConst.CHUKAN_ORG_LIST, ZMW06901SFConst.CHUKAN_ORG_CD_06, ZMW06901SFConst.CHUKAN_POSITION_CD_06, 
					ZMW06901SFConst.CHUKAN_JOI_ORG_CD_06}, 
			{ZMW06901SFConst.SPA_ORG_LIST, ZMW06901SFConst.SPA_ORG_CD_07, ZMW06901SFConst.SPA_POSITION_CD_07, ""}
	};
	
	/** 実組織 Key項目一覧 */
	private static final String[] KEY_ORG_LIST = 
	{
		ZMW06901SFConst.ORG_CD_04,
		ZMW06901SFConst.ORG_NM_04,
		ZMW06901SFConst.POSITION_CD_04,
		ZMW06901SFConst.POSITION_NM_04,
		ZMW06901SFConst.KGGRP_CD_04,
		ZMW06901SFConst.AUTHORITY_GRP_NM_04
	};
	
	/** 業務個別設定組織 Key項目一覧 */
	private static final String[] KEY_WKKBT_ORG_LIST = 
	{
		ZMW06901SFConst.WKORG_CD_05,
		ZMW06901SFConst.WKKBT_ORG_CD_05,
		ZMW06901SFConst.WKKBT_ORG_NM_05,
		ZMW06901SFConst.WKKBT_POSITION_CD_05,
		ZMW06901SFConst.WKKBT_POSITION_NM_05,
		ZMW06901SFConst.WKKBT_KGGRP_CD_05,
		ZMW06901SFConst.WKKBT_AUTHORITY_GRP_NM_05
	};
	
	/** 中間組織 Key項目一覧 */
	private static final String[] KEY_CHUKAN_ORG_LIST = 
	{
		ZMW06901SFConst.CHUKAN_JOI_ORG_CD_06,
		ZMW06901SFConst.CHUKAN_ORG_CD_06,
		ZMW06901SFConst.CHUKAN_ORG_NM_06,
		ZMW06901SFConst.CHUKAN_POSITION_CD_06,
		ZMW06901SFConst.CHUKAN_POSITION_NM_06,
		ZMW06901SFConst.CHUKAN_KGGRP_CD_06,
		ZMW06901SFConst.CHUKAN_AUTHORITY_GRP_NM_06
	};
	
	/** 特別権限組織 Key項目一覧 */
	private static final String[] KEY_SPA_ORG_LIST = 
	{
		ZMW06901SFConst.SPA_ORG_CD_07,
		ZMW06901SFConst.SPA_ORG_NM_07,
		ZMW06901SFConst.SPA_POSITION_CD_07,
		ZMW06901SFConst.SPA_POSITION_NM_07,
		ZMW06901SFConst.SPA_KGGRP_CD_07,
		ZMW06901SFConst.SPA_KGGRP_NM_07
	};

	/** メニュー情報格納用 フィールド変数 */
	private StringBuffer menuInfo = new StringBuffer();
	
	/**
	 * メニュー画面 初期表示処理を行います。
	 * <BR>
	 * @return boolean
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception 
	{

		X31SDataBeanAccess svBean = getServiceFormBean();
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		
		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// 外部連携用 画面ID
		String nextScreenId = null;
		HashMap<String, Object> dataMap = JCCWebCommon.getScreenInfo(this);
		if(dataMap != null)
		{
			nextScreenId = (String)dataMap.get("SCREEN_ID");
		}
				
		// ePOP連携判定
		boolean isEPOP = false;
		
		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// 所属組織名
		loadOrgNm(svBean, cfBean);
		
		// メニュー定義ファイル読み込み
		String nextScreenNm = loadMenu(svBean, nextScreenId);
		
		// 画面ID
		if(nextScreenId != null)
		{
			svBean.sendMessageString(ZMW06901SFConst.FUKUSU_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		}
		
		// ユーザーIDセット
		String userId = cfBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		svBean.sendMessageString(ZMW06901SFConst.USER_ID, X31CWebConst.DATABEAN_SET_VALUE, userId);
		
		/* ++++++++++ v4.01.0 追加開始 ++++++++++ */
		
		// アプリケーションプロパティファイル KEY:ZM_CALL_ZDW01201_TOP
		String image_top = JCCWebCommon.getApplicationConst(KEY_PRP_ZM_CALL_ZDW01201_TOP);
		if(image_top != null)
		{
			svBean.sendMessageString(ZMW06901SFConst.IMAGE_TOP, X31CWebConst.DATABEAN_SET_VALUE, image_top);
		}
		
		// アプリケーションプロパティファイル KEY:ZM_CALL_ZDW01201_LEFT
		String image_left = JCCWebCommon.getApplicationConst(KEY_PRP_ZM_CALL_ZDW01201_LEFT);
		if(image_left != null)
		{
			svBean.sendMessageString(ZMW06901SFConst.IMAGE_LEFT, X31CWebConst.DATABEAN_SET_VALUE, image_left);
		}
		
		// アプリケーションプロパティファイル KEY:ZM_CALL_ZDW01201_HEIGHT
		String image_height = JCCWebCommon.getApplicationConst(KEY_PRP_ZM_CALL_ZDW01201_HEIGHT);
		if(image_height != null)
		{
			svBean.sendMessageString(ZMW06901SFConst.IMAGE_HEIGHT, X31CWebConst.DATABEAN_SET_VALUE, image_height);
		}
		
		// アプリケーションプロパティファイル KEY:ZM_CALL_ZDW01201_WEIDHT
		String image_weidht = JCCWebCommon.getApplicationConst(KEY_PRP_ZM_CALL_ZDW01201_WEIDHT);
		if(image_weidht != null)
		{
			svBean.sendMessageString(ZMW06901SFConst.IMAGE_WEIDHT, X31CWebConst.DATABEAN_SET_VALUE, image_weidht);
		}
		
		/* ++++++++++ v4.01.0 追加終了 ++++++++++ */

		// 画面名
		// ePOP引継情報設定
		if (dataMap != null)
		{
			
			// ePOP引継キー情報クリア
			svBean.sendMessage(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信電話番号クリア
			svBean.sendMessage(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信イベントIDクリア
			svBean.sendMessage(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_CLEAR);
			
			// サービス契約番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO).clearArray();
			
			// 問合せ客番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO).clearArray();

			// ePOP引継キー情報設定
			svBean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_KEY_INFO));
			
			// 着信電話番号設定
			svBean.sendMessageString(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_TELNO));
			
			// 着信イベントID設定
			svBean.sendMessageString(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_EVENT_ID));
			
			// epop-WEBFOCUS不正動作対応
			// URL情報クリア
			svBean.sendMessage(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_CLEAR);
			svBean.sendMessage(ZMW06901SFConst.TOOLURL, X31CWebConst.DATABEAN_CLEAR);
			
			// サービス契約番号リスト設定
			if (dataMap.get(KEY_CUST_ID_LST) != null)
			{
				String custIdLst = (String)dataMap.get(KEY_CUST_ID_LST);
				if (custIdLst.length() > 0)
				{
					String[] custIds = custIdLst.split(KEY_CUST_ID_LST_DELMI);
					X31SDataBeanAccessArray svcKeiNo = svBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO);
					for (int i = 0; i < custIds.length; i++)
					{
						
						// サービス契約番号追加
						X31SDataBeanAccess wBean = svcKeiNo.addDataBean();
						wBean.sendMessageString(ZMW06901SFConst.L0_SVC_KEI_NO_08, X31CWebConst.DATABEAN_SET_VALUE, custIds[i]);
					}
				}
			}
			
			// 問合せ客番号リスト設定
			if (dataMap.get(KEY_SYM_ID_LST) != null)
			{
				String symIdLst = (String)dataMap.get(KEY_SYM_ID_LST);
				if (symIdLst.length() > 0)
				{
					String[] symIds = symIdLst.split(KEY_SYM_ID_LST_DELMI);
					X31SDataBeanAccessArray proscstNo = svBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO);
					for (int i = 0; i < symIds.length; i++)
					{
						
						// 問合せ客番号追加
						X31SDataBeanAccess wBean = proscstNo.addDataBean();
						wBean.sendMessageString(ZMW06901SFConst.L1_PROSCST_NO_09, X31CWebConst.DATABEAN_SET_VALUE, symIds[i]);
					}
				}
			}
			
			// ePOP連携用起動画面設定処理 ePOP連携時はtrueを返却
			isEPOP = setFukusuScreenIdEPOP();
		}
		
		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		X31SDataBeanAccess[] beans = {svBean};
		
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();
		
		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0005);
		
		// マッピング用Map
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラス
		ZMSV0005_ZMSV0005OPDBMapper mapper = new ZMSV0005_ZMSV0005OPDBMapper();
		mapper.setZMSV000501SC(beans, inMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV000502SC(beans, inMap, JPCModelConstant.FUNC_CD_1);
		
		// サービス実行
		invokeService(paramMap, inMap, outputMap);
		
		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		mapper.getZMSV000501SC(beans, outputMap);
		mapper.getZMSV000502SC(beans, outputMap);
		loadSysYmd(svBean);
		
		// カレンダー情報を設定する start
		HashMap map = (HashMap)outputMap.get("ZMSV000502SC");
		ArrayList list = (ArrayList)map.get("EZM0311B010CBSMsg1List");
		JCCCalendarConst.calendarFormat(list);
		
		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		if(dataMap != null && isEPOP)
		{
			
			// (a)画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
			X33CUtil.getSession(this.getSession().getViewParamId().getSessionID()).getSession().setAttribute(SESSION_KEY, dataMap);
		}
		
		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_ID_ZMW06901);

		// 遷移先画面名を共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_NAME_ZMW06901);

		return true;
	}

	/**
	 * メニューからの画面遷移全般（ログアウト画面、組織選択画面、メニューに設定された業務画面）
	 * を行います。
	 * <BR>
	 * @return boolean
	 * @exception Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean open() throws Exception 
	{
		X31SDataBeanAccess srvBean = super.getServiceFormBean();
		X31SDataBeanAccess cfBean = super.getCommonInfoBean();

		// 指定されたオープン先画面を取得
		String screenId = srvBean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String screenNm = srvBean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String url = srvBean.sendMessageString(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_GET_VALUE);

		// 他システムへの連携が有る場合、以下のサービスフォームBeanの設定からサービス処理結果の設定までを実行する。
		if (isOutSideSystem(srvBean) || isWebFocusTools(srvBean) || isSPRi(srvBean))
		{
			
			// -------------------------------------------------- //
			// (2)サービスフォームBeanの設定
			// -------------------------------------------------- //
			// ユーザID
			String user_id = cfBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
			srvBean.sendMessageString(ZMW06901SFConst.USER_ID, X31CWebConst.DATABEAN_SET_VALUE, user_id);
			
			// 組織コード
			X31SDataBeanAccessArray cfBeanArray = cfBean.getDataBeanArray(CommonInfoCFConst.KGGRP_CD_LIST);
			X31SDataBeanAccess subBean = cfBeanArray.getDataBean(0);
			String org_cd = subBean.sendMessageString(CommonInfoCFConst.ORG_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			srvBean.sendMessageString(ZMW06901SFConst.ORG_CD, X31CWebConst.DATABEAN_SET_VALUE, org_cd);
			
			// 立場コード
			String pos_cd = subBean.sendMessageString(CommonInfoCFConst.POSITION_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			srvBean.sendMessageString(ZMW06901SFConst.POS_CD, X31CWebConst.DATABEAN_SET_VALUE, pos_cd);
			
			// -------------------------------------------------- //
			// (3)サービス呼出処理
			// -------------------------------------------------- //
			X31SDataBeanAccess[] paramBeans = {srvBean};
			HashMap<Object, String> inDataMap = new HashMap<Object, String>();
			
			// マッピング
			ZMSV0063_ZMSV0063OPDBMapper mapper = new ZMSV0063_ZMSV0063OPDBMapper();
			mapper.setECC0081D010(paramBeans, inDataMap, "1");
			
			// サービス呼出し
			HashMap<Object, String> outputMap = new HashMap<Object, String>();
			HashMap<Object, String> paramMap = new HashMap<Object, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0063);

			X31CMessageResult msgResult = this.invokeService(paramMap, inDataMap, outputMap);
			
			// -------------------------------------------------- //
			// (4)サービス処理結果の設定
			// -------------------------------------------------- //
			if(msgResult != null) 
			{
				JCCWebCommon.setMessageInfo(this, msgResult);
				return false;
			}
			
			// -------------------------------------------------- //
			// (5)引継情報の設定
			// -------------------------------------------------- //
			mapper.getECC0081D010(paramBeans, outputMap);
			
			HashMap<String, Object> param = new HashMap<String, Object>();
			if(isOutSideSystem(srvBean))
			{
				
				//  他サイト連携 URL編集 地図、イメージ
				// ワンタイムパスワードセット
				url = url.replace("%1%", srvBean.sendMessageString(ZMW06901SFConst.ONETIME, X31CWebConst.DATABEAN_GET_VALUE));
				param.put(KEY_URL, url);
				
				// (a) 画面IDの設定
				// ・地図、イメージ、SPRiの場合、遷移先画面IDを「ZMW06906」とする。
				screenId = JZMScreenConst.SCREEN_ID_ZMW06906;
			}
			else if(isSPRi(srvBean))
			{
				
				// ・SPRiの場合
				// SPRi 特別権限組織コードを共有フォームBeanから取得する。（権限判定部品 特別権限組織コード取得処理にて取得）
				ArrayList<String> splcList = JZMWebCommon.getSpclAuthOrgCd(cfBean, 1);
				String splcCdForSPRi = splcList.get(0);
				
				// ワンタイムパスワードセット
				url = url.replace("%1%", srvBean.sendMessageString(ZMW06901SFConst.ONETIME, X31CWebConst.DATABEAN_GET_VALUE));
				
				// 特別権限組織コードセット
				url = url.replace("%2%", splcCdForSPRi);
				param.put(KEY_URL, url);
				
				// ・地図、イメージ、SPRiの場合、遷移先画面IDを「ZMW06906」とする。
				screenId = JZMScreenConst.SCREEN_ID_ZMW06906;
			}
			else
			{
				
				// ・WebFOCUSの場合
				StringBuffer post = new StringBuffer();
				
				// ワンタイムパスワード
				post.append(KEY_WEB_FOCUS_ONETIME_PASS).append(";")
					.append(srvBean.sendMessageString(ZMW06901SFConst.ONETIME, X31CWebConst.DATABEAN_GET_VALUE)).append(",");
				
				// ユーザーID
				post.append(KEY_WEB_FOCUS_USER_ID).append(";")
					.append(cfBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE)).append(",");
				
				// Tool URL
				post.append(KEY_WEB_FOCUS_TOOL_URL).append(";")
					.append(srvBean.sendMessageString(ZMW06901SFConst.TOOLURL, X31CWebConst.DATABEAN_GET_VALUE)).append(",");
				
				// URL
				post.append(KEY_WEB_FOCUS_POST_URL).append(";")
					.append(srvBean.sendMessageString(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_GET_VALUE));
				param.put(KEY_WEB_FOCUS, post.toString());
				screenId = JZMScreenConst.SCREEN_ID_ZMW06907;
			}
			
			// セッションへURLをセット
//			JCCWebCommon.setScreenId(this, screenId, JZMScreenConst.SCREEN_ID_ZMW06901);
			JCCWebCommon.setScreenInfo(this, screenId, param);
			
		}
		
		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		//外部連携 引継ぎ情報取得
		HashMap map = (HashMap)X33CUtil.getSession(this.getSession().getViewParamId().getSessionID()).getSession().getAttribute(SESSION_KEY);
		if(map != null)
		{
			
			// (c)画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
//			JCCWebCommon.setScreenId(this, screenId, JZMScreenConst.SCREEN_ID_ZMW06901);
			
			// (d)戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
			JCCWebCommon.setScreenInfo(this, screenId, map);
			
			// 外部連携 引継ぎ用セッション削除
			X33CUtil.getSession(this.getSession().getViewParamId().getSessionID()).getSession().removeAttribute(SESSION_KEY);
		}
		
		// ePOP引継情報からePOP転送連携キー取得
		String epopTensoRnkiKey = srvBean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ePOP引継情報からイベントID取得
		String eventId = srvBean.sendMessageString(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// お客様選択 引継ぎ情報設定
		if (epopTensoRnkiKey != null && epopTensoRnkiKey.length() > 0 && JCRScreenConst.SCREEN_ID_CRW10401.equals(screenId))
		{
			// 引き継ぎの情報を格納するMAPを生成する。
			HashMap<String, Object> hktgMap = new HashMap<String, Object>();

			// ePOP転送連携キー
			hktgMap.put(CRW10401SFConst.EPOP_TENSO_RNKI_KEY,
					srvBean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_GET_VALUE));
			// 着信イベントID
			hktgMap.put(CRW10401SFConst.EVENT_ID,
					srvBean.sendMessageString(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_GET_VALUE));
			
			// 着信イベントIDが"04"(着信)または"10"(転送先)の場合
			if (EPOP_EVENT_ID_CALL.equals(eventId) || EPOP_EVENT_ID_FORWARD_TO.equals(eventId))
			{
				// 着信電話番号
				hktgMap.put(CRW10401SFConst.INCOMING_TELNO,
						srvBean.sendMessageString(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
				// サービス契約番号リスト
				hktgMap.put(CRW10401SFConst.SVC_KEI_NO, JCRWebCommon.getArrayList(srvBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO)));
				// 問合せ客番号リスト
				hktgMap.put(CRW10401SFConst.PROSCST_NO, JCRWebCommon.getArrayList(srvBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO)));
			}

			// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
			JCRWebCommon.setScreenInfo(this, screenId, hktgMap);
		}
		
		// 問合せメイン 引継ぎ情報設定
		if (epopTensoRnkiKey != null && epopTensoRnkiKey.length() > 0 &&
			(EPOP_EVENT_ID_PREVIEW.equals(eventId) || EPOP_EVENT_ID_OUTBOUND.equals(eventId) || EPOP_EVENT_ID_OVERFLOW_CALL.equals(eventId)) &&
			JCRScreenConst.SCREEN_ID_CRW01201.equals(screenId))
		{
			
			// 引き継ぎの情報を格納するMAPを生成する。
			HashMap<String, Object> hktgMap = new HashMap<String, Object>();

			// サービス契約番号
			X31SDataBeanAccessArray svcKeiNo = srvBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO);
			if (svcKeiNo.getCount() > 0)
			{
				X31SDataBeanAccess wBean = svcKeiNo.getDataBean(0);
				hktgMap.put(CRW01201SFConst.SVC_KEI_NO, wBean.sendMessageString(ZMW06901SFConst.L0_SVC_KEI_NO_08, X31CWebConst.DATABEAN_GET_VALUE));
			}
			
			// 問合せ客番号
			X31SDataBeanAccessArray proscstNo = srvBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO);
			if (proscstNo.getCount() > 0)
			{
				X31SDataBeanAccess wBean = proscstNo.getDataBean(0);
				hktgMap.put(CRW01201SFConst.PROSCST_NO, wBean.sendMessageString(ZMW06901SFConst.L1_PROSCST_NO_09, X31CWebConst.DATABEAN_GET_VALUE));
			}

			// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
			JCRWebCommon.setScreenInfo(this, screenId, hktgMap);
		}
		
		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, screenId);
		
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.escapeString(screenNm));
		
		return true;
	}
	
	/**
	 * 起動する画面が地図もしくはイメージかどうか判定する。
	 * @param bean サービスフォームBean
	 * @return true:地図もしくはイメージ false:それ以外
	 */
	private boolean isOutSideSystem(X31SDataBeanAccess bean)
	{
		boolean retValue = false;
		
		// 画面ID
		String screenId = bean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 外部連携用 URL
		String url = bean.sendMessageString(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_GET_VALUE);
		
		if((screenId.startsWith("ZD") || screenId.startsWith("ZC")) && (!"".equals(url)))
		{
			retValue = true;
		}
		
		return retValue;
	}
	
	/**
	 * 起動する画面がWebFOCUSかどうか判定する。
	 * @param bean サービスフォームBean
	 * @return true:WebFOCUSツール false:それ以外
	 */
	private boolean isWebFocusTools(X31SDataBeanAccess bean)
	{
		boolean retValue = false;
		
		// 外部連携用 URL
		String url = bean.sendMessageString(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_GET_VALUE);
		
		// WebFOCUS 用 URL
		String toolUrl = bean.sendMessageString(ZMW06901SFConst.TOOLURL, X31CWebConst.DATABEAN_GET_VALUE);
		
		if((!"".equals(url)) && (!"".equals(toolUrl)) && (!"undefined".equals(url)))
		{
			retValue = true;
		}
		
		return retValue;
	}

	/**
	 * メニューからの画面遷移全般（ログアウト画面、組織選択画面、メニューに設定された業務画面）
	 * を行います。(CTI連携)
	 * <BR>
	 * @return boolean
	 * @exception Exception
	 */
	public boolean open2() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// 指定されたオープン先画面を取得
		String screenId = bean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String screenNm = bean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_NM, X31CWebConst.DATABEAN_GET_VALUE);

		// 引き継ぎの情報を格納するMAPを生成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		if (JCRScreenConst.SCREEN_ID_CRW01201.equals(screenId))
		{
			hktgMap.put(CRW01201SFConst.SVC_KEI_NO,
					bean.sendMessageString(ZMW06901SFConst.SLCT_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
			hktgMap.put(CRW01201SFConst.PROSCST_NO,
					bean.sendMessageString(ZMW06901SFConst.SLCT_PROSCST_NO, X31CWebConst.DATABEAN_GET_VALUE));
	
			// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
			JCRWebCommon.setScreenInfo(this, screenId, hktgMap);
		}
		else if (JCRScreenConst.SCREEN_ID_CRW02401.equals(screenId))
		{
			hktgMap.put(CRW02401SFConst.EPOP_TENSO_RNKI_KEY,
					bean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_GET_VALUE));
			hktgMap.put(CRW02401SFConst.INCOMING_TELNO,
					bean.sendMessageString(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
	
			// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
			JCRWebCommon.setScreenInfo(this, screenId, hktgMap);
		}

		// オープン先画面を次画面として設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, screenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, screenNm);

		return true;
	}

	/**
	 * ログアウトを行います。
	 * @return boolean
	 */
	public boolean logout() 
	{

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし
		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし
		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		X31SDataBeanAccess[] beans = {cfBean};
		
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();
		
		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0004);
		
		// マッピング用Map
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラス
		ZMSV0004_ZMSV0004OPDBMapper mapper = new ZMSV0004_ZMSV0004OPDBMapper();
		mapper.setZMSV000401SCForLogout(beans, inMap, JPCModelConstant.FUNC_CD_1);

		this.invokeService(paramMap, inMap, outputMap);
		
		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし
		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし
		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// なし
		// 遷移先画面IDを共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_ID_ZMW06902);

		// 遷移先画面名を共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_NAME_ZMW06902);
		return true;

	}
	
	/**
	 * 組織選択ボタン押下処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean orgSelect() throws Exception
	{
		
		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし
		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		X31SDataBeanAccess svBean = getServiceFormBean();
		
		// (a) 統合認証システム連携部品(getLdapCertifyResultUserId)の認証結果を取得する。
		//    （ユーザーIDのみでの認証。所属組織をすべて取得するため。）
		String user_id = cfBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		HashMap<String, Object> retMap = getCertifyResultByUserId(user_id);
		
		//  認証状態取得
		String ninsho_ret = (String)retMap.get(KEY_NINSHO_STAT);
		
		// ・認証結果がNGの場合
		if(NINSHO_NG.equals(ninsho_ret))
		{
			return false;
		}
		JZMWebCommon.setOrgInfoForSvBean(svBean, retMap, KEY_LIST_FOR_LDAP_RESULT);
		
		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		X31SDataBeanAccess[] beans = {svBean};
		
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();
		
		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0060);
		
		// マッピング用Map
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラス
		ZMSV0060_ZMSV0060OPDBMapper mapper = new ZMSV0060_ZMSV0060OPDBMapper();
		mapper.setZMSV006001CC(beans, inMap, JPCModelConstant.FUNC_CD_1);
		
		// サービス実行
		invokeService(paramMap, inMap, outputMap);
		
		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		mapper.getZMSV006001CC(beans, outputMap);
		
		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		//@ 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		//  実組織一覧
		JZMWebCommon.createHktgiOrgInfo(svBean, ZMW06901SFConst.ORG_LIST, KEY_ORG_LIST, dataMap);
		
		//  業務個別設定組織一覧
		JZMWebCommon.createHktgiOrgInfo(svBean, ZMW06901SFConst.WKKBT_ORG_LIST, KEY_WKKBT_ORG_LIST, dataMap);
		
		//  中間組織一覧
		JZMWebCommon.createHktgiOrgInfo(svBean, ZMW06901SFConst.CHUKAN_ORG_LIST, KEY_CHUKAN_ORG_LIST, dataMap);

		//  特別権限組織一覧
		JZMWebCommon.createHktgiOrgInfo(svBean, ZMW06901SFConst.SPA_ORG_LIST, KEY_SPA_ORG_LIST, dataMap);
		
		// A 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11301, dataMap);
		
		// B 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
//		JCCWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW11301, JZMScreenConst.SCREEN_ID_ZMW11201);

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW11301);
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW11301);
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB6310__I);
		
		return true;
	}
	
	/**
	 * 外部連携用 認証処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean authOneTime() throws Exception
	{
		
		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		X31SDataBeanAccess svBean = getServiceFormBean();
		
		// (a)アプリケーションプロパティファイル(key=ZM_NON_HKTGI_KMK)から業務画面へ引継ぎ不要なパラメータのKeyを取得する。
		String nonHktgiKmk = JCCWebCommon.getApplicationConst(KEY_NON_HKTGI_KMK);
		String[] nonHktgiKmkArray = nonHktgiKmk.split(KEY_NON_HKTGI_KMK_DELMI);
		
		// (b) (a)で取得したKeyを除くすべてのリクエストパラメータを取得し引き継ぎ情報(DataMap)を作成する。
		// リクエストパラメータ
		String reqParam = svBean.sendMessageString(ZMW06901SFConst.TSYRN_PARAM, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 引継ぎ用マップ
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		String[] reqParamItems = reqParam.split("&");
		
		for(int iCnt = 0; iCnt < reqParamItems.length; iCnt++)
		{
			String[] keyValue = reqParamItems[iCnt].split("=");
			if(!isNonHktgiKmk(keyValue[0], nonHktgiKmkArray))
			{
				
				// パラメータチェック
				if (keyValue.length > 1)
				{
					
					// キー、値が設定されている場合
					dataMap.put(keyValue[0], keyValue[1]);
				}
				else
				{
					
					// キーのみ設定されている場合
					dataMap.put(keyValue[0], "");
				}
			}
		}
		
		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a) パラメータクリア
		svBean.sendMessageString(ZMW06901SFConst.TSYRN_PARAM, X31CWebConst.DATABEAN_SET_VALUE, "");
		if (dataMap != null)
		{
			
			// ePOP引継キー情報クリア
			svBean.sendMessage(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信電話番号クリア
			svBean.sendMessage(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信イベントIDクリア
			svBean.sendMessage(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_CLEAR);
			
			// サービス契約番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO).clearArray();
			
			// 問合せ客番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO).clearArray();

			// ePOP引継キー情報設定
			svBean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_KEY_INFO));
			
			// 着信電話番号設定
			svBean.sendMessageString(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_TELNO));
			
			// 着信イベントID設定
			svBean.sendMessageString(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get(KEY_EVENT_ID));
			
			// epop-WEBFOCUS不正動作対応
			// URL情報クリア
			svBean.sendMessage(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_CLEAR);
			svBean.sendMessage(ZMW06901SFConst.TOOLURL, X31CWebConst.DATABEAN_CLEAR);
			
			// サービス契約番号リスト設定
			if (dataMap.get(KEY_CUST_ID_LST) != null)
			{
				String custIdLst = (String)dataMap.get(KEY_CUST_ID_LST);
				if (custIdLst.length() > 0)
				{
					String[] custIds = custIdLst.split(KEY_CUST_ID_LST_DELMI);
					X31SDataBeanAccessArray svcKeiNo = svBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO);
					for (int i = 0; i < custIds.length; i++)
					{
						
						// サービス契約番号追加
						X31SDataBeanAccess wBean = svcKeiNo.addDataBean();
						wBean.sendMessageString(ZMW06901SFConst.L0_SVC_KEI_NO_08, X31CWebConst.DATABEAN_SET_VALUE, custIds[i]);
					}
				}
			}
			
			// 問合せ客番号リスト設定
			if (dataMap.get(KEY_SYM_ID_LST) != null)
			{
				String symIdLst = (String)dataMap.get(KEY_SYM_ID_LST);
				if (symIdLst.length() > 0)
				{
					String[] symIds = symIdLst.split(KEY_SYM_ID_LST_DELMI);
					X31SDataBeanAccessArray proscstNo = svBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO);
					for (int i = 0; i < symIds.length; i++)
					{
						
						// 問合せ客番号追加
						X31SDataBeanAccess wBean = proscstNo.addDataBean();
						wBean.sendMessageString(ZMW06901SFConst.L1_PROSCST_NO_09, X31CWebConst.DATABEAN_SET_VALUE, symIds[i]);
					}
				}
			}

			// ePOP連携用起動画面設定処理
			setFukusuScreenIdEPOP();
		}
		
		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		X31SDataBeanAccess[] beans = {svBean};
		
		// ユースケースID格納用マップ
		HashMap<Object, String> paramMap = new HashMap<Object, String>();
		
		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0089);
		
		// マッピング用Map
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラス
		ZMSV0089_ZMSV0089OPDBMapper mapper = new ZMSV0089_ZMSV0089OPDBMapper();
		mapper.setZMSV008901(beans, inMap, JPCModelConstant.FUNC_CD_1);
		
		// サービス実行
		invokeService(paramMap, inMap, outputMap);
		
		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// (a)サービスの処理結果を取得する。
		X31SDataBeanAccess[] outBeans = {svBean, cfBean};
		mapper.getZMSV008901ForZMW06901(outBeans, outputMap);
		
		// (b)ワンタイムパスワード認証がNGの場合
		if(NINSHO_NG.equals(svBean.sendMessageString(ZMW06901SFConst.NINSHO_STAT, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			
			// 複数画面起動クリア
			svBean.sendMessage(ZMW06901SFConst.FUKUSU_SCREEN_ID, X31CWebConst.DATABEAN_CLEAR);
			
			// ePOP引継キー情報クリア
			svBean.sendMessage(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信電話番号クリア
			svBean.sendMessage(ZMW06901SFConst.INCOMING_TELNO, X31CWebConst.DATABEAN_CLEAR);
			
			// 着信イベントIDクリア
			svBean.sendMessage(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_CLEAR);
			
			// サービス契約番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.SVC_KEI_NO).clearArray();
			
			// 問合せ客番号リストクリア
			svBean.getDataBeanArray(ZMW06901SFConst.PROSCST_NO).clearArray();

//			//  @メッセージID：EKB6040-JW「認証に失敗しました。」のメッセージを表示する
//			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB6040_JW);
//			//  Aエラー画面を表示するために、画面IDを以下の項目に設定する。
//			// 遷移先画面IDを共有フォームBeanに設定
//			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
//					JZMScreenConst.SCREEN_ID_ZMW11203);
//
//			// 遷移先画面名を共有フォームBeanに設定
//			cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
//					JZMScreenConst.SCREEN_NAME_ZMW11203);
		}
		
		// (c)ワンタイムパスワードクリア
		svBean.sendMessageString(ZMW06901SFConst.ONETIME, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		String nextScreenId = null;
		String keyInfo = (String)dataMap.get(KEY_KEY_INFO);
		
		// ePOP連携の場合
		if (keyInfo != null && keyInfo.length() > 0)
		{
			nextScreenId = (String)dataMap.get(KEY_GMNID);
		}
		else
		{
			nextScreenId = (String)dataMap.get(KEY_SCREEN_ID);
		}
		
		// (a)画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenInfo(this, nextScreenId, dataMap);
		
		//(b)戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
//		JCCWebCommon.setScreenId(this, nextScreenId, JZMScreenConst.SCREEN_ID_ZMW06901);
		
		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_ID_ZMW06901);
		
		// 遷移先画面名を共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_NAME_ZMW06901);
		
		return true;
	}
	
	/**
	 * 外部連携用 認証エラー処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean authOneTimeError() throws Exception
	{
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		X31SDataBeanAccess svBean = getServiceFormBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		//なし

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		//なし

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		//なし

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		//なし

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// 認証状態設定
		dataMap.put(ZMW11201SFConst.NINSHO_STAT,
				svBean.sendMessageString(ZMW06901SFConst.NINSHO_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11203, dataMap);

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_ID_ZMW11203);
		
		// 遷移先画面名を共有フォームBeanに設定
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JZMScreenConst.SCREEN_NAME_ZMW11203);
		
		return true;
	}

	/**
	 * 定期リクエスト処理を行います。
	 * @return boolean
	 * @throws Exception
	 */
	public boolean keepAlive() throws Exception
	{
		
		// -------------------------------------------------- //
		// (1)共有フォームBeanの設定
		// -------------------------------------------------- //
		X31SDataBeanAccess cfBean = getCommonInfoBean();
		cfBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, "CCW00203");
		return true;
	}
	
	/**
	 * 指定されたkeyが配列に含まれている場合、trueを返す。
	 * @param key 検査するKey項目
	 * @param nonHktgiKmkArray 検査対象となる配列
	 * @return nonHktgiKmkArrayにkeyが含まれている場合、trueを返す。
	 */
	private boolean isNonHktgiKmk(String key, String[] nonHktgiKmkArray)
	{
		boolean retValue = false;
		
		for(int iCnt = 0; iCnt < nonHktgiKmkArray.length; iCnt++)
		{
			if(key.equals(nonHktgiKmkArray[iCnt]))
			{
				retValue = true;
				break;
			}
		}
		return retValue;
	}

	/**
	 * 統合認証部品 貸与品確認を呼び出します。
	 * @param user_id ユーザーID
	 * @return ユーザー認証結果情報
	 * @throws Exception
	 */
	private HashMap<String, Object> getCertifyResultByUserId(String user_id) throws Exception 
	{
		
		return JCCWebCommon.getLdapCertifyResultUserId(this, user_id);
		
	}
	
	/**
	 * システム日付の取得を行います。
	 * <BR>
	 * @param bean サービスフォームBean
	 * @throws Exception
	 */
	private void loadSysYmd(X31SDataBeanAccess bean) throws Exception 
	{
		String sysDate = JCCWebCommon.getSysDate();
		bean.sendMessageString(ZMW06901SFConst.SYS_Y, X31CWebConst.DATABEAN_SET_VALUE, sysDate.substring(0, 4));
		bean.sendMessageString(ZMW06901SFConst.SYS_M, X31CWebConst.DATABEAN_SET_VALUE, sysDate.substring(4, 6));
		bean.sendMessageString(ZMW06901SFConst.SYS_D, X31CWebConst.DATABEAN_SET_VALUE, sysDate.substring(6, 8));
	}
	
	/**
	 * 組織情報を取得します。
	 * <BR>
	 * @param srvBean
	 * @param commonInfoBean
	 * @throws Exception
	 */
	private void loadOrgNm(X31SDataBeanAccess srvBean, X31SDataBeanAccess commonInfoBean) throws Exception 
	{
		
		//共有フォームBean
		X31SDataBeanAccessArray kggrpCdList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.KGGRP_CD_LIST);
		
		// 表示するのは、実組織、ワークグループ、中間組織のみ
		int iCntMax = 3;
		int kggrpCdListCnt = kggrpCdList.getCount();
		
		if(iCntMax > kggrpCdListCnt)
		{
			iCntMax = kggrpCdListCnt;
		}
		for(int iCnt = 0; iCnt < iCntMax; iCnt++)
		{
			
			// 組織名称取得
			String org_name = kggrpCdList.getDataBean(iCnt).sendMessageString(CommonInfoCFConst.ORG_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			if(!"".equals(org_name))
			{
				srvBean.sendMessageString(ZMW06901SFConst.ORG, X31CWebConst.DATABEAN_ADD_VALUE, org_name);
			}
		}
		
	}

	/**
	 * 定義ファイルからメニュー情報を取得します。
	 * <BR>
	 * @param bean サービスフォームBean
	 * @param param_screen_id 画面ID
	 * @return String 画面名
	 * @throws Exception
	 */
	private String loadMenu(X31SDataBeanAccess bean, String param_screen_id) throws Exception 
	{
		
		// 定義ファイル
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = dbf.newDocumentBuilder();
		String menuFilePath = JCCWebCommon.getApplicationConst(KEY_MENU_FILE_PATH);
		org.w3c.dom.Document root = builder.parse(menuFilePath);

		NamedNodeMap d_attMap = null;
		NamedNodeMap c_attMap = null;
		NamedNodeMap s_attMap = null;
		NodeList cbriNodeList = null;
		NodeList sbriNodeList = null;
		String c_screenId = null;
		String s_screenId = null;
		String screenNm = null;
		String d_menuId = null;
		String c_menuId = null;
		String s_menuId = null;
		String retScreenNm = null;
		
		// メニュー設定用リスト
		ArrayList<String[]> d_menuList = null;
		ArrayList<String[]> c_menuList = null;
		ArrayList<String[]> s_menuList = null;
		
		
		// 権限リスト設定
		HashMap<String, String> authMap = new HashMap<String, String>();
		JCCWebCommon.setAuthorityList(this, authMap);
		
		// 権限設定プロパティファイル 設定値取得
		HashMap<String, String> authPropMap = new HashMap<String, String>();
		try
		{
			authPropMap = JCCWebCommon.getMap(this.getGamenId());
		}
		catch (JCCFrameworkException fwe)
		{
			throw new JCCFrameworkException("権限制御定義ファイルキャッシュ情報の取得に失敗しました。", fwe);
		}
		
		// 大分類リスト取得
		NodeList dbriNodeList = root.getElementsByTagName(MENU_FILE_ELEM_DBRI);
		
		// メニュー設定用リスト設定
		d_menuList = new ArrayList<String[]>();
		
		// 大分類設定
		for (int iDCnt = 0; iDCnt < dbriNodeList.getLength(); iDCnt++)
		{
			Element dbriElm = (Element)dbriNodeList.item(iDCnt);
			
			// 表示名取得
			d_attMap = dbriElm.getAttributes();
			
			// メニューID取得
			d_menuId = "menu_" + iDCnt;
			
			// 中分類取得
			cbriNodeList = dbriElm.getElementsByTagName(MENU_FILE_ELEM_CBRI);
			
			// メニュー設定用リスト設定
			c_menuList = new ArrayList<String[]>();
			
			// 中分類設定
			for (int iCCnt = 0; iCCnt < cbriNodeList.getLength(); iCCnt++) 
			{
				Element cbriElm = (Element)cbriNodeList.item(iCCnt);
				c_attMap = cbriElm.getAttributes();
				
				// 画面ID
				c_screenId = getAttributeValue(c_attMap, MENU_FILE_ATTRS_SCREEN_ID);
				
				//画面名を取得する
				if(param_screen_id != null && param_screen_id.equals(c_screenId))
				{
					retScreenNm = screenNm;
				}
				
				// 画面名
				screenNm = getAttributeValue(c_attMap, MENU_FILE_ATTR_SCREEN_NM);
				
				// 小分類取得
				sbriNodeList = cbriElm.getElementsByTagName(MENU_FILE_ELEM_SBRI);
				
				// 小分類設定
				s_menuList = new ArrayList<String[]>();
				for (int iSCnt = 0; iSCnt < sbriNodeList.getLength(); iSCnt++) 
				{
					Element sbriElm = (Element)sbriNodeList.item(iSCnt);
					s_attMap = sbriElm.getAttributes();
					
					// 画面ID
					s_screenId = getAttributeValue(s_attMap, MENU_FILE_ATTRS_SCREEN_ID);
					
					//画面名を取得する
					if(param_screen_id != null && param_screen_id.equals(s_screenId))
					{
						retScreenNm = screenNm;
					}
					
					// 画面名
					screenNm = getAttributeValue(s_attMap, MENU_FILE_ATTR_SCREEN_NM);
					if(JZMWebCommon.judgeAuthorityCd(this, authMap, authPropMap, "ZMW069010PJP;" + s_screenId + ";0"))
					{
						
						// メニューID
						s_menuId = "menu_" + iDCnt + "_" + iCCnt + "_" + iSCnt;
						
						// 小分類 メニュー設定用リスト設定
						setMenuArrayList(s_menuList, s_attMap, "s_", s_menuId);
						
						// CｅｏＭｅｓｓｅｎｇｅｒ(画面ID：CRW08301)のメニュー表示権限がある場合、
						// 以下のサービスフォームBeanへ画面IDをセットする。（自動起動対応）
						if(SCREEN_ID_EO_MESSENGER.equals(s_screenId))
						{
							setEoMessengerAutoExec(bean);
						}
					}
				}
				if(s_menuList.size() != 0 || JZMWebCommon.judgeAuthorityCd(this, authMap, authPropMap, "ZMW069010PJP;" + c_screenId + ";0"))
				{
					
					// メニューID
					c_menuId = "menu_" + iDCnt + "_" + iCCnt;
					
					// 中分類 メニュー設定用リスト設定
					setMenuArrayList(c_menuList, c_attMap, "c_", c_menuId);
					if(s_menuList.size() != 0)
					{
						c_menuList.addAll(s_menuList);
					}
					
					// CｅｏＭｅｓｓｅｎｇｅｒ(画面ID：CRW08301)のメニュー表示権限がある場合、
					// 以下のサービスフォームBeanへ画面IDをセットする。（自動起動対応）
					if(SCREEN_ID_EO_MESSENGER.equals(c_screenId))
					{
						setEoMessengerAutoExec(bean);
					}
				}
			}
			if(c_menuList.size() != 0)
			{
				
				// 大分類 メニュー設定
				setMenuArrayList(d_menuList, d_attMap, "d_", d_menuId);
				d_menuList.addAll(c_menuList);
			}
		}
		
		// サービスフォームBeanおよびメニュー情報設定
		setMenuInfo(d_menuList, bean);
		
		// メニュー情報をサービスフォームBeanへ設定
		bean.sendMessageString(ZMW06901SFConst.MENU_INFO, X31CWebConst.DATABEAN_SET_VALUE, 
								this.menuInfo.append(System.getProperty("line.separator") + "}").toString());
		
		return retScreenNm;
	}
	
	/**
	 * メニュー情報の作成を行います。
	 * ArrayListに設定されているメニュー情報をサービスフォームBeanおよびメニュー情報へセットする。
	 * @param list メニュー情報が設定されているArrayList
	 * @param bean サービスフォームBean
	 */
	private void setMenuInfo(ArrayList<String[]> list, X31SDataBeanAccess bean)
	{
		
		// 大分類格納用 サービスフォームBeanリスト取得
		X31SDataBeanAccessArray dbriBeanList = bean.getDataBeanArray(ZMW06901SFConst.DBRI);
		X31SDataBeanAccess dbriBean = null;
		X31SDataBeanAccessArray cbriBeanList = null;
		X31SDataBeanAccess cbriBean = null;
		X31SDataBeanAccessArray sbriBeanList = null;
		X31SDataBeanAccess sbriBean = null;
		for(int iCnt = 0; iCnt < list.size(); iCnt++)
		{
			
			//メニュー情報設定
			String[] menuInfos = list.get(iCnt);
			makeMenuInfo(menuInfos[0], menuInfos[3], menuInfos[4], menuInfos[5], menuInfos[6], menuInfos[7], menuInfos[8]);
			
			// サービスフォームBean設定
			if(menuInfos[0].startsWith("d_"))
			{
				
				// 大分類設定
				dbriBean = dbriBeanList.addDataBean();
				dbriBean.sendMessageString(ZMW06901SFConst.DSP_NM_01, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[2]);
				dbriBean.sendMessageString(ZMW06901SFConst.MENU_ID_01, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[1]);
				
				// 中分類Bean取得
				cbriBeanList = dbriBean.getDataBeanArray(ZMW06901SFConst.CBRI);
			}
			else if(menuInfos[0].startsWith("c_"))
			{
				
				// 中分類設定
				cbriBean = cbriBeanList.addDataBean();
				cbriBean.sendMessageString(ZMW06901SFConst.DSP_NM_02, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[2]);
				cbriBean.sendMessageString(ZMW06901SFConst.MENU_ID_02, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[1]);
				cbriBean.sendMessageBoolean(ZMW06901SFConst.CTGR_FLG_02, X31CWebConst.DATABEAN_SET_VALUE, "".equals(menuInfos[3]));
				
				// 小分類Bean取得
				sbriBeanList = cbriBean.getDataBeanArray(ZMW06901SFConst.SBRI);
			}
			else
			{
				
				// 小分類設定
				sbriBean = sbriBeanList.addDataBean();
				sbriBean.sendMessageString(ZMW06901SFConst.DSP_NM_03, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[2]);
				sbriBean.sendMessageString(ZMW06901SFConst.MENU_ID_03, X31CWebConst.DATABEAN_SET_VALUE, menuInfos[1]);

			}
		}
	}
	
	/**
	 * メニュー情報の作成を行います。
	 * <BR>
	 * @param menuId メニューID
	 * @param screenId 画面ID
	 * @param screenNm 画面名
	 * @param windowNm ウインドウ名
	 * @param url 外部連携用URL
	 * @param sysid 外部連携用システムID
	 * @param toolUrl WebFocus用 URL
	 */
	private void makeMenuInfo(String menuId, String screenId, String screenNm, String windowNm, String url, String sysid, String toolUrl) 
	{
		menuInfo.append(menuInfo.length() < 1 ? "{" + System.getProperty("line.separator") : "," + System.getProperty("line.separator"))
				.append("'").append(menuId).append("' : ")
				.append("[")
				.append("'").append(screenId).append("', ")
				.append("'").append(screenNm).append("', ")
				.append("'").append(windowNm).append("',")
				/* 他サイト連携 URL */
				.append("'").append(url).append("',")
				/* 他サイト連携 SYS ID */
				.append("'").append(sysid).append("',")
				/* WebFocus対応 */
				.append("'").append(toolUrl).append("'")
				.append("]");
	}

	/**
	 * XML 属性値を返却します。
	 * <BR>
	 * @param attMap
	 * @param attName
	 * @return String
	 */
	private String getAttributeValue(NamedNodeMap attMap, String attName) 
	{
		Node att = attMap.getNamedItem(attName);
		return att == null ? "" : att.getNodeValue();
	}
	
	/**
	 * 指定されたXMLノードから必要な属性を取得し、メニュー設定用リストに追加する。
	 * @param list メニュー設定用リスト
	 * @param map XML ノード
	 * @param menu_pref メニューID プレフィックス d_:大分類 c_:中分類 s_:小分類
	 * @param menu_id メニューID
	 */
	private void setMenuArrayList(ArrayList<String[]>list, NamedNodeMap map, String menu_pref, String menu_id)
	{
		
		// 画面ID
		String screenId = getAttributeValue(map, MENU_FILE_ATTRS_SCREEN_ID);
		
		// 画面名
		String screenNm = getAttributeValue(map, MENU_FILE_ATTR_SCREEN_NM);
		
		// ウインドウ名
		String windowNm = getAttributeValue(map, MENU_FILE_ATTR_WINDOW_NM);
		
		// 外部連携 URL
		String url = getAttributeValue(map, MENU_FILE_ATTR_URL);
		
		// 外部連携 SYS_ID
		String sysid = getAttributeValue(map, MENU_FILE_ATTR_SYS_ID);
		
		// WebFOCUS用 URL
		String toolUrl = getAttributeValue(map, MENU_FILE_ATTR_TOOL_URL);
		
		// 表示名
		String dspNm = getAttributeValue(map, MENU_FILE_ATTR_DSP_NM);
		
		// メニュー設定用リスト設定
		list.add(new String[]{menu_pref + menu_id, menu_id, dspNm, screenId, screenNm, windowNm, url, sysid, toolUrl});

	}
	
	/**
	 * eoMessenger 自動起動設定
	 * @param sv_bean サービスフォームBean
	 */
	private void setEoMessengerAutoExec(X31SDataBeanAccess sv_bean)
	{
		
		// 画面ID
		sv_bean.sendMessageString(ZMW06901SFConst.FUKUSU_SCREEN_ID,X31CWebConst.DATABEAN_SET_VALUE, SCREEN_ID_EO_MESSENGER);

	}
	
	/**
	 * ePOP連携用起動画面設定処理
	 * @return true:ePOP連携 false:それ以外
	 * <BR>
	 */
	private boolean setFukusuScreenIdEPOP()
	{
		X31SDataBeanAccess svBean = getServiceFormBean();

		// ePOP転送連携キー取得
		String epopTensoRnkiKey = svBean.sendMessageString(ZMW06901SFConst.EPOP_TENSO_RNKI_KEY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 着信イベントID取得
		String eventId = svBean.sendMessageString(ZMW06901SFConst.EVENT_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// ePOP連携の場合
		if (epopTensoRnkiKey != null && epopTensoRnkiKey.length() > 0)
		{
			StringBuilder fukusuScreenId = new StringBuilder();

			// イベントIDごとに起動画面を設定
			
			// 初期起動の場合
			if (EPOP_EVENT_ID_INIT.equals(eventId))
			{
				fukusuScreenId
				.append(JCRScreenConst.SCREEN_ID_CRW08301)
				.append(KEY_GMNID_DELMI)
				.append(JCRScreenConst.SCREEN_ID_CRW01201)
				.append(KEY_GMNID_DELMI)
				.append(JCRScreenConst.SCREEN_ID_CRW10401);
			}
			
			// 着信拒否解除、着信、転送先の場合
			else if (EPOP_EVENT_ID_CALL_BLOCK_RELEASE.equals(eventId) ||
					  EPOP_EVENT_ID_CALL.equals(eventId) ||
					  EPOP_EVENT_ID_FORWARD_TO.equals(eventId))
			{
				fukusuScreenId
				.append(JCRScreenConst.SCREEN_ID_CRW01201)
				.append(KEY_GMNID_DELMI)
				.append(JCRScreenConst.SCREEN_ID_CRW10401);
			}
			
			// 手動起動(プレビュー)の場合
			// 手動起動(アウトバウンド)の場合
			// 手動起動(あふれ呼)の場合
			else if (EPOP_EVENT_ID_PREVIEW.equals(eventId) ||
					  EPOP_EVENT_ID_OUTBOUND.equals(eventId) ||
					  EPOP_EVENT_ID_OVERFLOW_CALL.equals(eventId))
			{
				fukusuScreenId.append(JCRScreenConst.SCREEN_ID_CRW01201);
			}
			
			// 複数画面起動設定
			svBean.sendMessageString(ZMW06901SFConst.FUKUSU_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, fukusuScreenId.toString());
			
			return true;
		}
		
		return false;
	}
	
	/**
	 * 起動する画面がSPRiかどうか判定する。
	 * @param bean サービスフォームBean
	 * @return true:SPRi false:それ以外
	 */
	private boolean isSPRi(X31SDataBeanAccess bean)
	{
		boolean retValue = false;
		
		// 画面ID
		String screenId = bean.sendMessageString(ZMW06901SFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 外部連携用 URL
		String url = bean.sendMessageString(ZMW06901SFConst.URL, X31CWebConst.DATABEAN_GET_VALUE);
		if(screenId.startsWith(SPRI_SCREEN_STARTWITH) && (!"".equals(url)))
		{
			retValue = true;
		}
		
		return retValue;
	}

}
