/*******************************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 * システム名        ：eo顧客基幹システム
 * モジュール名      ：CRW04101SFLogic
 * ソースファイル名  ：CRW04101SFLogic.java
 * 作成者            ：富士通
 * 日付              ：2011年08月06日
 *＜機能概要＞
 * 資料送付指示登録ビューロジック
 *＜修正履歴＞
 * バージョン    修正日     修正者      修正内容
 * ｖ1.00.00
 * ｖ8.00.00	2014/04/24	FJ)伊藤		OM-2014-0001662 登録確認処理前に実行フラグを初期化するよう修正。
 *
 ********************************************************************************/


package eo.web.webview.CRW04101SF;

import java.util.EventObject;
import java.util.HashMap;

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.x33.X33SException;

import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JZMStrConst;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCScreenConst;
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.mapping.CRSV0112_CRSV0112OPDBMapper;
import eo.web.webview.mapping.CRSV0122_CRSV0122OPDBMapper;
import eo.web.webview.mapping.CRSV0133_CRSV0133OPDBMapper;
import eo.web.webview.mapping.CRSV0147_CRSV0147OPDBMapper;
import eo.web.webview.mapping.CRSV0148_CRSV0148OPDBMapper;
import eo.web.webview.mapping.CRSV0149_CRSV0149OPDBMapper;
import eo.web.webview.mapping.CRSV0150_CRSV0150OPDBMapper;

/**
 * 資料送付指示登録ビューロジック.<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CRW04101SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 住所検索Key情報
	 */
	private static final String[][] KEYSEARCHCONDITION = 
	{
		{JZMStrConst.key_pcd_1, CRW04101SFConst.SOHUS_PCD1},           // 郵便番号
		{JZMStrConst.key_pcd_2, CRW04101SFConst.SOHUS_PCD2},
		{JZMStrConst.key_state_nm, CRW04101SFConst.SOHUS_STATE_NM},    // 都道府県名
		{JZMStrConst.key_city_nm, CRW04101SFConst.SOHUS_CITY_NM},      // 市区町村名
		{JZMStrConst.key_oaztsu_nm, CRW04101SFConst.SOHUS_OAZTSU_NM},  // 大字通称名
		{JZMStrConst.key_azcho_nm, CRW04101SFConst.SOHUS_AZCHO_NM}     // 字丁目
	};

	/**
	 * 住所検索Key
	 */
	private static final int SEARCH_KEY = 0;

	/**
	 * 住所検索データビーンKey
	 */
	private static final int DATABEAN_KEY = 1;

	/**
	 * 住所検索結果情報
	 */
	private static final String[][] KEYRESULT = 
	{
		{JZMStrConst.ret_pcd_1, CRW04101SFConst.SOHUS_PCD1},           // 郵便番号
		{JZMStrConst.ret_pcd_2, CRW04101SFConst.SOHUS_PCD2},
		{JZMStrConst.ret_state_nm, CRW04101SFConst.SOHUS_STATE_NM},    // 都道府県名
		{JZMStrConst.ret_city_nm, CRW04101SFConst.SOHUS_CITY_NM},      // 市区町村名
		{JZMStrConst.ret_oaztsu_nm, CRW04101SFConst.SOHUS_OAZTSU_NM},  // 大字通称名
		{JZMStrConst.ret_azcho_nm, CRW04101SFConst.SOHUS_AZCHO_NM}     // 字丁目
	};

	/**
	 * 住所検索結果Key
	 */
	private static final int RESULT_KEY = 0;

	/**
	 * 住所検索結果データビーンKey
	 */
	private static final int RESULT_DATABEAN_KEY = 1;

	/**
	 * 親クラス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>
	 * 初期表示を行う。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean init() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// (1)引継情報の取得
		// 画面情報設定部品（JCRWebCommon.getScreenInfo)を使用し、引継情報を取得する。
		JCRWebCommon.getScreenInfo(this);

		// (2)サービスフォームBeanの設定
		// (a)サービスフォームBeanの全項目をクリアする。
		bean.getDataBeanArray(CRW04101SFConst.SOHU_KBN_LIST).clearArray();
		bean.sendMessageString(CRW04101SFConst.SOHUS_KANA_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_TELNO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW04101SFConst.ADDRESS_INFO_LIST).clearArray();
		bean.sendMessageString(CRW04101SFConst.SOHUS_PCD1, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_PCD2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_STATE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_CITY_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_ADRTTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_ADRRM, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST).clearArray();
		bean.sendMessageString(CRW04101SFConst.SYSID, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SYS_DATE, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.COPY_BTN_CTRL_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHU_KBN_SELECTED_IDX, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_KANA_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_TELNO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD1, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_STATE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_CITY_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRTTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRRM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.EXE_ADD_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SELECTED_SOHU_KBN_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.ADD_ATICLE_SOHU_KRK_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_UPD_DTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.MEMBER_SBT_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_NM2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SELECTED_DETAIL_INDEX, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SELECTED_ATICLE_BUNRUI_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW04101SFConst.WK_SOHU_ATICLE_BUNRUI_LIST).clearArray();
		bean.getDataBeanArray(CRW04101SFConst.WK_ATICLE_LIST).clearArray();
		bean.getDataBeanArray(CRW04101SFConst.AJAX_ATICLE_LIST).clearArray();
		bean.sendMessageString(CRW04101SFConst.ADD_NEW_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHU_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_CLEAR);

		// (b)システム日付の取得
		String sysDate = JCRWebCommon.getSysDate();

		// (c)サービスフォームBean項目の設定
		bean.sendMessageString(CRW04101SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0112");

		// マッピングクラス
		CRSV0112_CRSV0112OPDBMapper mapper = new CRSV0112_CRSV0112OPDBMapper();

		// マッピング処理（上り）
		mapper.setCRSV011201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV011202SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setGETATICLESOHUKRKCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// (4)サービス処理結果の設定
		// (a)サービスの処理結果を取得する。
		// マッピング処理（下り）
		mapper.getCRSV011201SC(paramBean, outputMap);
		mapper.getCRSV011202SC(paramBean, outputMap);
		mapper.getGETATICLESOHUKRKCC(paramBean, outputMap);

		// (b)退避項目の設定
		X31SDataBeanAccess sohuKbnList = bean.getDataBeanArray(CRW04101SFConst.SOHU_KBN_LIST).getDataBean(0);
		String sohuKbnIdx = sohuKbnList.sendMessageString(CRW04101SFConst.L0_ATICLE_SOHU_KBN_IDX_01, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(CRW04101SFConst.WK_SOHU_KBN_SELECTED_IDX, X31CWebConst.DATABEAN_SET_VALUE, sohuKbnIdx);
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_KANA_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_KANA_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_TELNO, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD1, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_PCD1, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD2, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_PCD2, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_STATE_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_STATE_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_CITY_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_CITY_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRTTM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_ADRTTM, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRRM, X31CWebConst.DATABEAN_SET_VALUE
				, bean.sendMessageString(CRW04101SFConst.SOHUS_ADRRM, X31CWebConst.DATABEAN_GET_VALUE));

		// (c)送付資料リストの行追加
		// (d)新規登録フラグの設定
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		// 送付資料リストが0件の場合
		if (aticleSohuList.getCount() == 0)
		{
			addRow(bean, JCRStrConst.LINE_STYLE_ODD, true);
			bean.sendMessageBoolean(CRW04101SFConst.ADD_NEW_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
			bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_LIST_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(1));
		}
		else
		{
			bean.sendMessageBoolean(CRW04101SFConst.ADD_NEW_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_LIST_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(aticleSohuList.getCount()));
		}

		// (e)コピーボタン制御フラグの設定
		// 問合せ客の場合
		if(!JCRUtilCommon.isNull(bean.sendMessageString(CRW04101SFConst.PROSCST_NO, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			bean.sendMessageBoolean(CRW04101SFConst.COPY_BTN_CTRL_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
		}
		else
		{
			// マスター会員の場合
			if (JCRStrConst.CD_DIV_MEM_SBT_M_KJN.equals(bean.sendMessageString(CRW04101SFConst.MEMBER_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE)) 
					|| JCRStrConst.CD_DIV_MEM_SBT_M_HJN.equals(bean.sendMessageString(CRW04101SFConst.MEMBER_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				bean.sendMessageBoolean(CRW04101SFConst.COPY_BTN_CTRL_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			}
			else
			{
				bean.sendMessageBoolean(CRW04101SFConst.COPY_BTN_CTRL_FLG, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
			}
		}

		// (f)最大桁数設定
		setMaxLengthAllRow(bean);

		// (5)引継情報の設定
		// なし。

		// (6)共有フォームビーンの設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);
		
		return true;
		
	}

	/**
	 * コピーボタン押下.<br>
	 * 選択された住所情報に関連する情報を送付先住所に出力する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean copy() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		//(1)引継情報の取得
		// なし

		// (2)サービスフォームBeanの設定
		// (a)送付先住所情報をクリアする。
		bean.sendMessageString(CRW04101SFConst.SOHUS_PCD1, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_PCD2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_STATE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_CITY_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_ADRTTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(CRW04101SFConst.SOHUS_ADRRM, X31CWebConst.DATABEAN_CLEAR);

		// (b)システム日付の取得
		String sysDate = JCRWebCommon.getSysDate();

		// (c)サービスフォームBean項目の設定
		bean.sendMessageString(CRW04101SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, sysDate);

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// 住所情報リストで選択された住所情報コードを取得
		String addressInfoCd = JCRWebCommon.getPullDownCode(bean, CRW04101SFConst.ADDRESS_INFO_LIST, CRW04101SFConst.L1_ADDRESS_INFO_IDX_02, 
							CRW04101SFConst.L1_ADDRESS_INFO_CD_02);

		if (JCRStrConst.CD_DIV_SOHU_DISCERNMENT_KEIYAKUSHA.equals(addressInfoCd))
		{
			// (a)契約者住所の場合
			// ユースケースID格納
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0148");

			// マッピングクラス
			CRSV0148_CRSV0148OPDBMapper mapper = new CRSV0148_CRSV0148OPDBMapper();

			// マッピング処理（上り）
			mapper.setCRSV014801SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);

			// サービス実行
			invokeService(paramMap, dataMap, outputMap);

			// (4)サービス処理結果の設定
			// サービスの処理結果を取得する。
			// マッピング処理（下り）
			mapper.getCRSV014801SC(paramBean, outputMap);
		}
		else if (JCRStrConst.CD_DIV_SOHU_DISCERNMENT_RIYOBASHO.equals(addressInfoCd))
		{
			// (b)利用場所住所の場合
			// ユースケースID格納
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0150");

			// マッピングクラス
			CRSV0150_CRSV0150OPDBMapper mapper = new CRSV0150_CRSV0150OPDBMapper();

			// マッピング処理（上り）
			mapper.setGETKEISHA1RCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

			// サービス実行
			invokeService(paramMap, dataMap, outputMap);

			// (4)サービス処理結果の設定
			// サービスの処理結果を取得する。
			// マッピング処理（下り）
			mapper.getGETKEISHA1RCC(paramBean, outputMap);
		}
		else if (JCRStrConst.CD_DIV_SOHU_DISCERNMENT_SEIKYUSHOSOHUSAKI.equals(addressInfoCd))
		{
			// (c)請求書送付先住所の場合
			// ユースケースID格納
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0149");

			// マッピングクラス
			CRSV0149_CRSV0149OPDBMapper mapper = new CRSV0149_CRSV0149OPDBMapper();

			// マッピング処理（上り）
			mapper.setCRSV014901SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

			// サービス実行
			invokeService(paramMap, dataMap, outputMap);

			// (4)サービス処理結果の設定
			// サービスの処理結果を取得する。
			// マッピング処理（下り）
			mapper.getCRSV014901SC(paramBean, outputMap);
		}

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * 住所検索ボタン押下.<br>
	 * 住所検索画面に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean searchAd() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// 子画面に渡す情報用HashMap
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// (1)引継情報の取得
		// なし。

		// (2)サービスフォームBeanの設定
		// なし。

		// (3)サービス呼出処理
		// なし。

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// (a)次画面への引継情報(dataMap)を作成する。
		for (int iCnt = 0 ; iCnt < KEYSEARCHCONDITION.length ; iCnt++)
		{
			String strValue = bean.sendMessageString(KEYSEARCHCONDITION[iCnt][DATABEAN_KEY], X31CWebConst.DATABEAN_GET_VALUE);
			dataMap.put(KEYSEARCHCONDITION[iCnt][SEARCH_KEY], strValue);
		}
		// 機能コードの設定
		dataMap.put(JZMStrConst.key_func_cd, JPCModelConstant.FUNC_CD_1);

		// (b)画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		// 子画面に渡す情報を設定
		JCRWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW10601, dataMap);

		// (c)戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		// 子画面に親画面の画面IDを設定
		JCRWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW10601, JCRScreenConst.SCREEN_ID_CRW04101);

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW10601);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW10601);

		return true;
	}

	/**
	 * 住所情報設定.<br>
	 * 住所検索画面からの引き継ぎ情報を出力する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean refreshAfterSearchAd() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// (1)引継情報の取得
		//子画面からの情報を取得し、サービスフォームBeanへセットする。
		HashMap<String, Object> map = JCCWebCommon.getScreenInfo(this);
		for (int iCnt = 0; iCnt < KEYRESULT.length; iCnt++)
		{
			String strValue = (String)map.get(KEYRESULT[iCnt][RESULT_KEY]);
			if (!JCRUtilCommon.isNull(strValue))
			{
				bean.sendMessageString(KEYRESULT[iCnt][RESULT_DATABEAN_KEY], X31CWebConst.DATABEAN_SET_VALUE, strValue);
			}
		}

		// (2)サービスフォームBeanの設定
		// なし。

		// (3)サービス呼出処理
		// なし。

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * 削除ボタン押下.<br>
	 * 削除チェックボックスにチェックされた行を削除する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean delete() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// (1)引継情報の取得
		// なし。

		// (2)サービスフォームBeanの設定
		// (a)削除フラグの設定
		int rowCnt = 0;
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		for (int i = 0; i < aticleSohuList.getCount(); i++)
		{
			X31SDataBeanAccess listBean = aticleSohuList.getDataBean(i);

			// 送付資料リストの選択状態がTRUEの場合
			if (listBean.sendMessageBoolean(CRW04101SFConst.L2_SELECTED_BOOLEAN_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				listBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
			}

			// 送付資料リストの削除フラグがFALSEの場合
			if (!listBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				rowCnt++;

				// 行スタイルの再設定
				if (rowCnt % 2 == 0)
				{
					listBean.sendMessageString(CRW04101SFConst.L2_LINE_STYLE_CLASS_03, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.LINE_STYLE_EVEN);
				}
				else
				{
					listBean.sendMessageString(CRW04101SFConst.L2_LINE_STYLE_CLASS_03, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.LINE_STYLE_ODD);
				}
			}
		}

		// (b)最大桁数設定
		setMaxLengthAllRow(bean);

		// (3)サービス呼出処理
		// なし。

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * 資料分類コンボボックス選択.<br>
	 * 選択された資料分類に関連する資料リストを出力する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean choiceShiryo() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		//(1)引継情報の取得
		// なし

		// (2)サービスフォームBeanの設定
		// 選択された行の資料リストと非同期＿資料リストのクリア
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		X31SDataBeanAccess aticleSohuBean = aticleSohuList.
			getDataBean(Integer.parseInt(bean.sendMessageString(CRW04101SFConst.SELECTED_DETAIL_INDEX, X31CWebConst.DATABEAN_GET_VALUE)));
		aticleSohuBean.getDataBeanArray(CRW04101SFConst.ATICLE_LIST).clearArray();
		bean.getDataBeanArray(CRW04101SFConst.AJAX_ATICLE_LIST).clearArray();

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0147");

		// マッピングクラス
		CRSV0147_CRSV0147OPDBMapper mapper = new CRSV0147_CRSV0147OPDBMapper();

		// マッピング処理（上り）
		mapper.setCRSV014701SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// (4)サービス処理結果の設定
		// (a)サービスの処理結果を取得する。
		// マッピング処理（下り）
		mapper.getCRSV014701SC(paramBean, outputMap);

		// (b)最大桁数設定
		setMaxLengthSelectRow(bean);

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * 登録確認ボタン押下.<br>
	 * 入力チェックを行い、エラーがない場合は、資料送付指示登録確認画面に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean confirmIns() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		//(1)引継情報の取得
		// なし

		// (2)サービスフォームBeanの設定
		// サービスフォームBeanの設定
		bean.sendMessage(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW04101SFConst.MAX_LEN_ATICLE_NM2, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_CLEAR);

		// 最大桁数資料分類名称
		String maxLenAticleBunruiNm = "";
		// 最大桁数資料名
		String maxLenAticleNm = "";

		// 最大桁数資料分類名称（桁数）
		int maxLenAticleBunruiNmLength = 0;
		// 最大桁数資料名（桁数）
		int maxLenAticleNmLength = 0;

		bean.sendMessageString(CRW04101SFConst.SOHU_KBN, X31CWebConst.DATABEAN_SET_VALUE
				, JCRWebCommon.getPullDownName(bean, CRW04101SFConst.SOHU_KBN_LIST, CRW04101SFConst.L0_ATICLE_SOHU_KBN_IDX_01
				, CRW04101SFConst.L0_ATICLE_SOHU_KBN_CD_01, CRW04101SFConst.L0_ATICLE_SOHU_KBN_NM_01));
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		for (int i = 0; i < aticleSohuList.getCount(); i++)
		{
			X31SDataBeanAccess aticleSohuBean = aticleSohuList.getDataBean(i);
			// 有効データの場合
			if (!aticleSohuBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				String aticleBunruiCd = aticleSohuBean.sendMessageString(CRW04101SFConst.L2_ATICLE_BUNRUI_IDX_03, X31CWebConst.DATABEAN_GET_VALUE);
				String aticleNo = aticleSohuBean.sendMessageString(CRW04101SFConst.L2_ATICLE_IDX_03, X31CWebConst.DATABEAN_GET_VALUE);
				String aticleBunruiNm = null;
				String aticleNm = null;
	
				X31SDataBeanAccessArray bunruiList = aticleSohuBean.getDataBeanArray(CRW04101SFConst.SOHU_ATICLE_BUNRUI_LIST);
				for (int j = 0; j < bunruiList.getCount(); j++)
				{
					X31SDataBeanAccess bunruiBean = bunruiList.getDataBean(j);
					String aticleBunruiListCd = bunruiBean.sendMessageString(CRW04101SFConst.L3_ATICLE_BUNRUI_CD_04, X31CWebConst.DATABEAN_GET_VALUE);
					if (aticleBunruiCd.equals(aticleBunruiListCd))
					{
						aticleBunruiNm = bunruiBean.sendMessageString(CRW04101SFConst.L3_ATICLE_BUNRUI_NM_04, X31CWebConst.DATABEAN_GET_VALUE);
						if (!JCRUtilCommon.isNull(aticleBunruiNm) && aticleBunruiNm.getBytes().length > maxLenAticleBunruiNmLength)
						{
							maxLenAticleBunruiNm = aticleBunruiNm;
							maxLenAticleBunruiNmLength = aticleBunruiNm.getBytes().length;
						}
						break;
					}
				}
				X31SDataBeanAccessArray aticleList = aticleSohuBean.getDataBeanArray(CRW04101SFConst.ATICLE_LIST);
				for (int j = 0; j < aticleList.getCount(); j++)
				{
					X31SDataBeanAccess aticleBean = aticleList.getDataBean(j);
					String aticleListNo = aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NO_LIST_05, X31CWebConst.DATABEAN_GET_VALUE);
					if (aticleNo.equals(aticleListNo))
					{
						aticleNm = aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NM_LIST_05, X31CWebConst.DATABEAN_GET_VALUE);
						if (!JCRUtilCommon.isNull(aticleNm) && aticleNm.getBytes().length > maxLenAticleNmLength)
						{
							maxLenAticleNm = aticleNm;
							maxLenAticleNmLength = aticleNm.getBytes().length;
						}
						break;
					}
				}
				aticleSohuBean.sendMessageString(CRW04101SFConst.L2_ATICLE_BUNRUI_NM_03, X31CWebConst.DATABEAN_SET_VALUE, 
						aticleBunruiNm.substring(aticleBunruiNm.indexOf(".") + 1));
				aticleSohuBean.sendMessageString(CRW04101SFConst.L2_ATICLE_NM_03, X31CWebConst.DATABEAN_SET_VALUE, 
						aticleNm.substring(aticleNm.indexOf(".") + 1));
			}
		}

		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM2, X31CWebConst.DATABEAN_SET_VALUE, 
				maxLenAticleBunruiNm.substring(maxLenAticleBunruiNm.indexOf(".") + 1));
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_NM2, X31CWebConst.DATABEAN_SET_VALUE, 
				maxLenAticleNm.substring(maxLenAticleNm.indexOf(".") + 1));

		// 新規登録の場合
		if (bean.sendMessageBoolean(CRW04101SFConst.ADD_NEW_FLG, X31CWebConst.DATABEAN_GET_VALUE))
		{
			bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.EXEC_FLG_ADD);
		}
		else
		{
			// 全部未送付の場合
			if (JCRStrConst.SOHU_FLG_ALL_MISOFU.equals(bean.sendMessageString(CRW04101SFConst.SOHU_FLG, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 送付先が変更された場合
				if (isChange(bean))
				{
					// 資料送付内容が0件の場合
					if (getAticleSohuListValidityCnt(aticleSohuList) == 0)
					{
						bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.EXEC_FLG_DEL);
					}
					else
					{
						bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.EXEC_FLG_UPD);
					}
				}
				else
				{
					// 資料送付内容が0件の場合
					if (getAticleSohuListValidityCnt(aticleSohuList) == 0)
					{
						bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.EXEC_FLG_DEL);
					}
				}
			}
			else
			{
				// 送付先が変更された場合
				if (isChange(bean))
				{
					// 資料送付内容が0件でない場合
					if (getAticleSohuListValidityCnt(aticleSohuList) != 0)
					{
						bean.sendMessageString(CRW04101SFConst.EXEC_FLG, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.EXEC_FLG_ADD);
					}
				}
			}
		}

		// 送付先郵便番号の設定
		bean.sendMessageString(CRW04101SFConst.SOHUS_PCD, X31CWebConst.DATABEAN_SET_VALUE
				, JCRWebCommon.getZipCodeCharactor(
						bean.sendMessageString(CRW04101SFConst.SOHUS_PCD1, X31CWebConst.DATABEAN_GET_VALUE) + 
						bean.sendMessageString(CRW04101SFConst.SOHUS_PCD2, X31CWebConst.DATABEAN_GET_VALUE)));

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0122");

		// マッピングクラス
		CRSV0122_CRSV0122OPDBMapper mapper = new CRSV0122_CRSV0122OPDBMapper();

		// マッピング処理（上り）
		mapper.setUPDATICLESOHUCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setCRSV012201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setUPDTAIOKIROKATICLESOHUCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04102);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04102);

		return true;
	}

	/**
	 * 行追加ボタン押下.<br>
	 * 送付資料内容に行追加する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean addRow() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		//(1)引継情報の取得
		// なし

		// (2)サービスフォームBeanの設定
		// (a)退避リストのクリア
		bean.getDataBeanArray(CRW04101SFConst.WK_SOHU_ATICLE_BUNRUI_LIST).clearArray();
		bean.getDataBeanArray(CRW04101SFConst.WK_ATICLE_LIST).clearArray();

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0133");

		// マッピングクラス
		CRSV0133_CRSV0133OPDBMapper mapper = new CRSV0133_CRSV0133OPDBMapper();

		// マッピング処理（上り）
		mapper.setCRSV013301SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV013302SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// (4)サービス処理結果の設定
		// (a)サービスの処理結果を取得する。
		// マッピング処理（下り）
		mapper.getCRSV013301SC(paramBean, outputMap);
		mapper.getCRSV013302SC(paramBean, outputMap);

		// (b)送付資料リストの行追加
		// 最終有効行のスタイルを取得
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		String style = "";
		for (int i = (aticleSohuList.getCount() - 1); i >= 0; i--)
		{
			X31SDataBeanAccess lastBean = aticleSohuList.getDataBean(i);

			// 削除フラグがFalseの場合
			if (!lastBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				style = lastBean.sendMessageString(CRW04101SFConst.L2_LINE_STYLE_CLASS_03, X31CWebConst.DATABEAN_GET_VALUE);
				break;
			}
		}

		// 最終有効行がない場合 または 最終有効行が偶数の場合
		if (JCRUtilCommon.isNull(style) || style.equals(JCRStrConst.LINE_STYLE_EVEN))
		{
			addRow(bean, JCRStrConst.LINE_STYLE_ODD, false);
		}
		else
		{
			addRow(bean, JCRStrConst.LINE_STYLE_EVEN, false);
		}

		// (c)最大桁数設定
		setMaxLengthAllRow(bean);

		// (5)引継情報の設定
		// なし。

		// (6)遷移先画面の設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * クリアボタン押下.<br>
	 * 画面をクリアする。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clear() throws Exception
	{
		// (1)3.1 初期表示処理(init())を行う。
		return this.init();
	}

	/**
	 * 確定ボタン押下.<br>
	 * ホットボイスの更新を行う。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fix() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// (1)引継情報の取得
		// なし。

		// (2)サービスフォームBeanの設定
		// なし。

		// (3)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0122");

		// マッピングクラス
		CRSV0122_CRSV0122OPDBMapper mapper = new CRSV0122_CRSV0122OPDBMapper();

		// マッピング処理（上り）
		mapper.setUPDATICLESOHUCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV012201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setUPDTAIOKIROKATICLESOHUCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// なし。
		
		// (6)遷移先画面の設定
		// 遷移元画面IDを設定
		String screenId = JCRWebCommon.getScreenId(this);
		JCRWebCommon.setScreenId(this, screenId, JCRScreenConst.SCREEN_ID_CRW04101);
		
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_ID_CCW00104);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_NAME_CCW00104);

		return true;
	}

	/**
	 * キャンセルボタン押下.<br>
	 * 資料送付指示登録画面に戻る。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean cancel() throws Exception
	{

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// (1)引継情報の取得
		// なし。

		// (2)サービスフォームBeanの設定
		// なし。

		// (3)サービス呼出処理
		// なし。

		// (4)サービス処理結果の設定
		// なし。

		// (5)引継情報の設定
		// なし。

		// (6)共有フォームビーンの設定
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW04101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
				, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW04101);

		return true;
	}

	/**
	 * 行追加処理.<br>
	 * 送付資料リストに行を追加する。
	 * 
	 * @param bean           サービスフォームBean
	 * @param lineStyleClass 行スタイルクラス
	 * @param initFlg        初期表示フラグ（true：初期表示、false：初期表示以外）
	 */
	private void addRow(X31SDataBeanAccess bean, String lineStyleClass, boolean initFlg)
	{
		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		X31SDataBeanAccess addBean = aticleSohuList.addDataBean();

		// 資料分類リストの設定
		X31SDataBeanAccess wkBunruiList = bean.getDataBeanArray(CRW04101SFConst.WK_SOHU_ATICLE_BUNRUI_LIST).getDataBean(0);
		int count = (Integer)wkBunruiList.sendMessage(CRW04101SFConst.L5_ATICLE_BUNRUI_CD_06, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < count; i++)
		{
			String code = wkBunruiList.sendMessageString(CRW04101SFConst.L5_ATICLE_BUNRUI_CD_06, X31CWebConst.DATABEAN_GET_VALUE, i);
			String name = wkBunruiList.sendMessageString(CRW04101SFConst.L5_ATICLE_BUNRUI_NM_06, X31CWebConst.DATABEAN_GET_VALUE, i);

			X31SDataBeanAccess bunruiBean = addBean.getDataBeanArray(CRW04101SFConst.SOHU_ATICLE_BUNRUI_LIST).addDataBean();
			bunruiBean.sendMessageString(CRW04101SFConst.L3_ATICLE_BUNRUI_CD_04, X31CWebConst.DATABEAN_SET_VALUE, code);
			bunruiBean.sendMessageString(CRW04101SFConst.L3_ATICLE_BUNRUI_NM_04, X31CWebConst.DATABEAN_SET_VALUE, name);
		}

		// 資料リストの設定
		X31SDataBeanAccess wkAticleList = bean.getDataBeanArray(CRW04101SFConst.WK_ATICLE_LIST).getDataBean(0);
		count = (Integer)wkAticleList.sendMessage(CRW04101SFConst.L6_ATICLE_NO_LIST_07, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < count; i++)
		{
			String code = wkAticleList.sendMessageString(CRW04101SFConst.L6_ATICLE_NO_LIST_07, X31CWebConst.DATABEAN_GET_VALUE, i);
			String name = wkAticleList.sendMessageString(CRW04101SFConst.L6_ATICLE_NM_LIST_07, X31CWebConst.DATABEAN_GET_VALUE, i);

			X31SDataBeanAccess aticleBean = addBean.getDataBeanArray(CRW04101SFConst.ATICLE_LIST).addDataBean();
			aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NO_LIST_05, X31CWebConst.DATABEAN_SET_VALUE, code);
			aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NM_LIST_05, X31CWebConst.DATABEAN_SET_VALUE, name);
		}

		bean.sendMessageString(CRW04101SFConst.L2_ATICLE_IDX_03, X31CWebConst.DATABEAN_SET_VALUE,
				wkAticleList.sendMessageString(CRW04101SFConst.L6_ATICLE_NO_LIST_07, X31CWebConst.DATABEAN_GET_VALUE, 0));
		bean.sendMessageString(CRW04101SFConst.L2_ATICLE_BUNRUI_IDX_03, X31CWebConst.DATABEAN_SET_VALUE,
				wkBunruiList.sendMessageString(CRW04101SFConst.L5_ATICLE_BUNRUI_CD_06, X31CWebConst.DATABEAN_GET_VALUE, 0));
		addBean.sendMessageString(CRW04101SFConst.L2_DETAIL_INDEX_03, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(aticleSohuList.getCount() - 1));
		addBean.sendMessageString(CRW04101SFConst.L2_ATICLE_SOHU_CNT_03, X31CWebConst.DATABEAN_SET_VALUE, "1");
		addBean.sendMessageString(CRW04101SFConst.L2_TAIO_KIROK_NO_03, X31CWebConst.DATABEAN_SET_VALUE, 
			bean.sendMessageString(CRW04101SFConst.TAIO_KIROK_NO, X31CWebConst.DATABEAN_GET_VALUE));
		addBean.sendMessageString(CRW04101SFConst.L2_ATICLE_SOHU_NO_03, X31CWebConst.DATABEAN_SET_VALUE, 
				bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_NO, X31CWebConst.DATABEAN_GET_VALUE));
		addBean.sendMessageString(CRW04101SFConst.L2_LINE_STYLE_CLASS_03, X31CWebConst.DATABEAN_SET_VALUE, lineStyleClass);
		if (initFlg) 
		{
			addBean.sendMessageString(CRW04101SFConst.L2_ATICLE_NO_03, X31CWebConst.DATABEAN_SET_VALUE,
					wkAticleList.sendMessageString(CRW04101SFConst.L6_ATICLE_NO_LIST_07, X31CWebConst.DATABEAN_GET_VALUE, 0));
			addBean.sendMessageString(CRW04101SFConst.L2_ATICLE_BUNRUI_CD_03, X31CWebConst.DATABEAN_SET_VALUE,
					wkBunruiList.sendMessageString(CRW04101SFConst.L5_ATICLE_BUNRUI_CD_06, X31CWebConst.DATABEAN_GET_VALUE, 0));
		}

	}

	/**
	 * 最大桁数設定処理.<br>
	 * 全行のプルダウン項目の最大桁情報を設定する。
	 * 
	 * @param bean サービスフォームBean
	 */
	private void setMaxLengthAllRow(X31SDataBeanAccess bean)
	{
		// 最大項目項目
		bean.sendMessage(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW04101SFConst.MAX_LEN_ATICLE_NM, X31CWebConst.DATABEAN_CLEAR);

		// 最大桁数資料分類名称
		String maxLenAticleBunruiNm = "";
		// 最大桁数資料名
		String maxLenAticleNm = "";

		// 最大桁数資料分類名称（桁数）
		int maxLenAticleBunruiNmLength = 0;
		// 最大桁数資料名（桁数）
		int maxLenAticleNmLength = 0;

		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		for (int i = 0; i < aticleSohuList.getCount(); i++)
		{
			X31SDataBeanAccess aticleSohuBean = aticleSohuList.getDataBean(i);
			// 有効データの場合
			if (!aticleSohuBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				// 資料分類名の最大桁取得
				X31SDataBeanAccessArray bunruiList = aticleSohuBean.getDataBeanArray(CRW04101SFConst.SOHU_ATICLE_BUNRUI_LIST);
				for (int j = 0; j < bunruiList.getCount(); j++)
				{
					X31SDataBeanAccess bunruiBean = bunruiList.getDataBean(j);
					String wrkLengthCheck = bunruiBean.sendMessageString(CRW04101SFConst.L3_ATICLE_BUNRUI_NM_04, X31CWebConst.DATABEAN_GET_VALUE);
					if (!JCRUtilCommon.isNull(wrkLengthCheck)
						&& (wrkLengthCheck.length() > maxLenAticleBunruiNmLength && wrkLengthCheck.getBytes().length > maxLenAticleBunruiNm.getBytes().length))
					{
						maxLenAticleBunruiNm = wrkLengthCheck;
						maxLenAticleBunruiNmLength = wrkLengthCheck.length();
					}
				}
	
				// 資料名の最大桁取得
				X31SDataBeanAccessArray aticleList = aticleSohuBean.getDataBeanArray(CRW04101SFConst.ATICLE_LIST);
				for (int j = 0; j < aticleList.getCount(); j++)
				{
					X31SDataBeanAccess aticleBean = aticleList.getDataBean(j);
					String wrkLengthCheck = aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NM_LIST_05, X31CWebConst.DATABEAN_GET_VALUE);
					if (!JCRUtilCommon.isNull(wrkLengthCheck)
							&& (wrkLengthCheck.length() > maxLenAticleNmLength && wrkLengthCheck.getBytes().length > maxLenAticleNm.getBytes().length))
					{
						maxLenAticleNm = wrkLengthCheck;
						maxLenAticleNmLength = wrkLengthCheck.length();
					}
				}
			}
		}

		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_BUNRUI_NM, X31CWebConst.DATABEAN_SET_VALUE, maxLenAticleBunruiNm);
		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_NM, X31CWebConst.DATABEAN_SET_VALUE, maxLenAticleNm);
	}

	/**
	 * 最大桁数設定処理.<br>
	 * 選択された行のプルダウン項目の最大桁情報を設定する。
	 * 
	 * @param bean サービスフォームBean
	 */
	private void setMaxLengthSelectRow(X31SDataBeanAccess bean)
	{
		// 最大桁数資料名
		String maxLenAticleNm = "";

		// 最大桁数資料名（桁数）
		int maxLenAticleNmLength = 0;

		X31SDataBeanAccessArray aticleSohuList = bean.getDataBeanArray(CRW04101SFConst.ATICLE_SOHU_LIST);
		for (int i = 0; i < aticleSohuList.getCount(); i++)
		{
			X31SDataBeanAccess aticleSohuBean = aticleSohuList.getDataBean(i);

			if (aticleSohuBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				continue;
			}

			// 資料名の最大桁取得
			X31SDataBeanAccessArray aticleList = aticleSohuBean.getDataBeanArray(CRW04101SFConst.ATICLE_LIST);
			for (int j = 0; j < aticleList.getCount(); j++)
			{
				X31SDataBeanAccess aticleBean = aticleList.getDataBean(j);
				String wrkLengthCheck = aticleBean.sendMessageString(CRW04101SFConst.L4_ATICLE_NM_LIST_05, X31CWebConst.DATABEAN_GET_VALUE);
				if (!JCRUtilCommon.isNull(wrkLengthCheck)
						&& (wrkLengthCheck.length() > maxLenAticleNmLength && wrkLengthCheck.getBytes().length > maxLenAticleNm.getBytes().length))
				{
					maxLenAticleNm = wrkLengthCheck;
					maxLenAticleNmLength = wrkLengthCheck.length();
				}
			}
		}

		bean.sendMessageString(CRW04101SFConst.MAX_LEN_ATICLE_NM, X31CWebConst.DATABEAN_SET_VALUE, maxLenAticleNm);
	}

	/**
	 * 送付先内容変更チェック処理.<br>
	 * 送付先情報と送付先住所の変更有無を返す。
	 * 
	 * @param bean サービスフォームBean
	 * @return true：変更あり、false：変更なし
	 */
	private boolean isChange(X31SDataBeanAccess bean)
	{
		// 送信先情報、送信先住所に変更がない場合
		if (bean.sendMessageString(CRW04101SFConst.WK_SOHUS_KANA_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
				bean.sendMessageString(CRW04101SFConst.SOHUS_KANA_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_TELNO, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_TELNO, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.ATICLE_SOHU_BIKO, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD1, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_PCD1, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_PCD2, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_PCD2, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_STATE_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_STATE_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_CITY_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_CITY_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_OAZTSU_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_AZCHO_NM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_BNCHI_GO, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRTTM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_ADRTTM, X31CWebConst.DATABEAN_GET_VALUE))
			&& bean.sendMessageString(CRW04101SFConst.WK_SOHUS_ADRRM, X31CWebConst.DATABEAN_GET_VALUE).equals(
					bean.sendMessageString(CRW04101SFConst.SOHUS_ADRRM, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			return false;
		}

		return true;
	}

	/**
	 * 送付資料リスト有効データ取得処理.<br>
	 * 削除フラグがFALSEの明細数を返す。
	 * 
	 * @param aticleSohuList 送付資料リスト
	 * @return true：変更あり、false：変更なし
	 */
	private int getAticleSohuListValidityCnt(X31SDataBeanAccessArray aticleSohuList)
	{
		int cnt = 0;
		for (int i = 0; i < aticleSohuList.getCount(); i++)
		{
			X31SDataBeanAccess aticleSohuBean = aticleSohuList.getDataBean(i);
			if (!aticleSohuBean.sendMessageBoolean(CRW04101SFConst.L2_ATICLE_DEL_FLG_03, X31CWebConst.DATABEAN_GET_VALUE))
			{
				cnt++;
			}
		}

		return cnt;
	}
}
