intra-mart Accel Kaiden! プログラミングガイド 第11版 2019-12-01

4.4.2.1. JSPの編集

本項では、JSPへ設定を追加する方法を説明します。
ガジェット(経費旅費) を参照して作成したガジェットのJSPに追加してください。

4.4.2.1.1. scopeの追加

<c:set>タグに記載した下記の変数にスコープの設定を追加します。
「request」を設定してください。
<c:set scope="request" var="gadgetClass">expenseDetail</c:set> 
<c:set scope="request" var="gadgetVariation">v01</c:set>
<c:set scope="request" var="gadgetInstance">${param.gadget_instance}</c:set>
<c:set scope="request" var="gadgetId">${gadgetClass}_${gadgetVariation}_${gadgetInstance}</c:set>
<%--  --%>
<c:set scope="request" var="gadget" value="${appDto.gadgets[gadgetId]}" />

4.4.2.1.2. ICカードデータ検索へ渡す設定値の追加

ICカードデータ検索へ渡す設定値をMap形式で作成します。
<%@ page import="java.util.Map"%>
<%@ page import="java.util.HashMap"%>

<%--  --%>

    <%
      @SuppressWarnings("unchecked")
      Map<String,Object> search = new HashMap<String,Object>();
      search.put("use", "true");
      search.put("surface","searchTransitManager");
      search.put("sprite","kaiden-ui-icon-iccard_gray-16");
      
      Map<String,Object> importSetting = new HashMap<String,Object>();
      importSetting.put("use", "true");
      importSetting.put("surface","importTransitManager");
      importSetting.put("sprite","kaiden-ui-icon-iccard_gray-16");
      
      Map<String,Object> settings = new HashMap<String,Object>();
      settings.put("search", search);
      settings.put("import", importSetting);
      
      Map<String,Object> occurDate = new HashMap<String,Object>();
      occurDate.put("value","payDate");
      occurDate.put("mode","0");
      occurDate.put("disabled","true");
      occurDate.put("readonly","true");
      Map<String,Object> transAmount = new HashMap<String,Object>();
      transAmount.put("value","payment");
      transAmount.put("mode","0");
      transAmount.put("disabled","true");
      transAmount.put("readonly","true");
      Map<String,Object> payTypeCd = new HashMap<String,Object>();
      payTypeCd.put("value","0001");
      payTypeCd.put("mode","0");
      payTypeCd.put("disabled","true");
      Map<String,Object> summary = new HashMap<String,Object>();
      summary.put("value","memo");
      summary.put("mode","1");
      
      Map<String,Object> relations = new HashMap<String,Object>();
      relations.put("occurDate", occurDate);
      relations.put("transAmount", transAmount);
      relations.put("payTypeCd", payTypeCd);
      relations.put("summary", summary);
      
      Map<String,Object> args = new HashMap<String,Object>();
      args.put("settings", settings);
      args.put("relations", relations);
      
      Map<String,Object> include = new HashMap<String,Object>();
      include.put("args", args);
      include.put("tmtableId", "expenseDetailTable");
      request.setAttribute("include", include);
      
      Map<String,Object> url = new HashMap<String,Object>();
      url.put("url", "kaiden/gadget/gadgetBuilder");
      request.setAttribute("config.url", "kaiden/gadget/gadgetBuilder");
      
      Map<String,Object> block = new HashMap<String,Object>();
      block.put("allowAddFlag", pageContext.getAttribute("allowAddDetail"));
      request.setAttribute("block", block);
    %>
<c:set scope="request" var="surfaces" value="${gadget.surfaces}"/>
<c:import url="/WEB-INF/view/kaiden2/product_workflow/generic/gadget/include/searchTransitManager.jsp"/>

4.4.2.1.2.1. ICカードデータ検索へ渡す設定値の内容

include
args、tmtableIdを設定します。
include/args
settings、relationsを設定します。
include/args/settings
search(「ICカードデータ検索」リンクの表示)、import(「ICカードデータ取得」リンクの表示)を設定します。
include/args/settings/search
「ICカードデータ検索」リンクの表示について設定します。
  • use
    ICカードデータ検索と連携するガジェットに、リンクの表示有無を設定します。(true:表示、false:非表示)
  • surface
    定義を行うマスタの名称(サーフィスキー)を設定します。
    実際のサーフィスは、後述のデータ作成で定義します。
  • sprite
    リンクの頭に表示するアイコンを設定します。
include/args/settings/import
「ICカードデータ取得」リンクの表示について設定します。
  • use
    ICカードデータ検索と連携するガジェットに、リンクの表示有無を設定します。(true:表示、false:非表示)
  • surface
    定義を行うマスタの名称(サーフィスキー)を設定します。
    実際のサーフィスは、後述のデータ作成で定義します。
  • sprite
    リンクの頭に表示するアイコンを設定します。
include/args/relations
ICカードデータを取得した際、値を設定する連携先ガジェットのフィールドを設定します。
include/args/relations/フィールド名
ICカードデータを取得した際、値を設定する連携先ガジェットのフィールド名を設定します。
  • value
    値を設定する連携先ガジェットのフィールドに設定する値を設定します。
    ICカードデータ検索のフィールド名を指定できます。
  • mode
    値を設定する連携先ガジェットのフィールドに値を設定する際のモードを設定します。
    (0:valueに設定した値を設定する、1:反映先のフィールドに値が設定されていない場合、valueに設定した値を設定する、
    2:反映先のフィールドに値が設定されている場合、valueに設定した値を設定する)
  • disabled
    値を設定する連携先ガジェットのフィールドの無効化を設定します。(true:無効化する、false:無効化しない)
  • readonly
    値を設定する連携先ガジェットのフィールドの読み取り専用を設定します。
    (true:読み取り専用にする、false:読み取り専用にしない)
include/tmtableId
連携先ガジェットのtmtableのIdに設定した値を設定します。

4.4.2.1.2.2. ICカードデータ検索のフィールド名

valueに設定できるICカードデータ検索のフィールド名は以下の通りです。
userNo 社員番号
userCardNo ICカードNo
icRecordId 明細ID
tmApplyNo 「transit manager」の伝票番号
payDate 利用日
payment 利用金額
categoryCode 利用分類
categorySubcode 利用分類サブカテゴリ
memo 利用用途
stationName1 乗車駅
stationName2 降車駅
companyName1 事業社名1
companyName2 事業社名2
isPublic 公私区分
expencesFlag 申請除外フラグ
denyFlag 否認フラグ
deleteFlag 削除フラグ

4.4.2.1.3. 連携ガジェット内に「ICカード検索」、「ICカードデータ連携」リンクを表示する場合の記載の追加

連携ガジェット内に「ICカード検索」、「ICカードデータ連携」リンクを表示する場合、ガジェットコンテナとブロックコンテナの間に下記の通り記載を追加します。
連携ガジェット内に「ICカード検索」、「ICカードデータ連携」リンクを表示しない場合、記載の追加は不要です。
<k:gadgetContainer gadgetClass="${gadgetClass}"
                   gadgetVariation="${gadgetVariation}"
                   gadgetInstance="${gadgetInstance}"
                   gadgetTitle="${surfaceChapterTitle}"
                   gadgetId="${gadgetId}"
                   style="width:850px;overflow:hidden;">
  <%-- 下記1行を追加 --%>
  <div id="${gadgetId}-under" style="width:100%; margin:10px 1px;"></div>
  <k:blockContainer id="caution" style="display:block;"></k:blockContainer> 

4.4.2.1.4. 連携に必要な隠し項目を追加

TMテーブル操作パネルの下に下記の通り連携に必要な隠し項目を追加します。
            <k:tmtableOperationPanel
              position="detail"
              allowAdd="${allowAddDetail}"
              allowDel="${allowDelDetail}"
              name="rowNumber"
            />
            <%-- 下記を追加 --%>
            <div style="display:none;">
              <k:hidden name="relation" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationType" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationId" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationData" mode="0" data-kaiden-exempt-data="true" />
            </div>

4.4.2.1.5. 連携に必要なイベントを追加

スクリプトに連携に必要なイベントを追加します。
<script type="text/javascript">
  jQuery(function($){
    var eventMan = KAIDEN.getGadget("${gadgetId}").eventManager
     ,  tmt = KAIDEN.getGadget("${gadgetId}").tmtables["expenseDetailTable"]
     ,  tma = tmt.tmtableAccessor;
  <%--  --%>
     //明細行:行挿入(データ設定後)
     tmt.addEventPostNewRow(function(tupleId, tma, data) {
       //マスタ検索部品の整合性確認.
       KAIDEN.MasterSearch.refresh(tma("expTypeName", tupleId).elem().get(0));
       KAIDEN.MasterSearch.refresh(tma("departmentName", tupleId).elem().get(0));
       KAIDEN.MasterSearch.refresh(tma("projectName", tupleId).elem().get(0));
       
       //初期表示に先頭行を選択しているため、立替フラグ(hidden)の更新を実施 ※入力モードの場合のみ
       if (tma("payTypeCd", tupleId).elem(true).length > 0) { 
         KAIDEN.base.foundation.SelectListData.setChainValue(tma("payTypeCd", tupleId).elem(true).get(0));
       }
       
       //事前申請書取込では、会社通貨額が設定されているため、取引通貨額に会社通貨額を設定する
       //※外貨版から標準版にコピーする際、会社通貨額(レート換算後)の金額を設定する
       var compAmnt = tma("companyAmount", tupleId).getValue();
       if (compAmnt) {
         tma("transAmount", tupleId).setValue([compAmnt, KAIDEN.Util.addFigure(compAmnt)]);
         tma("companyAmount", tupleId).getValue("");
       }
       <%--addEventPostNewRowイベントに下記1行を追加  --%>
       KAIDEN.gadgetMan.complementData(undefined, "${gadgetId}", "${gadgetId}");
     });
  <%--  --%>
  <%-- 下記2個のイベントを追加 --%>
    /**
     * Complement(Global)イベント
     */
     eventMan.registPullListener("getGlobalComplement", function(/**Object*/args) {
      if(!KAIDEN.getGadget("${gadgetId}").variable["getComplementFunction"]){
        return new Array();
      }
      var global = new Array();
      $.each(KAIDEN.getGadget("${gadgetId}").variable["getComplementFunction"], function(index, func) {
        if ($.isFunction(func)) {
          var comples = func(args);
          if(comples){
            global = global.concat(comples);
          }
        }
      });
      return global;
    });
    
    /**
     * データ読込前(preLoadData)処理
     */
     eventMan.registPushListener("preLoadData", function(/**Object*/arg) {
      if(KAIDEN.getGadget("${gadgetId}").variable["preLoadData"]){
        $.each(KAIDEN.getGadget("${gadgetId}").variable["preLoadData"], function(index, func) {
          if ($.isFunction(func)) {
            func(arg);
          }
        });
      }
      return true;
    });

4.4.2.1.6. Sample

次のJSPは経費明細ガジェットのJSPにICカードデータと連携する設定を追加したサンプルです。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="im" uri="http://www.intra-mart.co.jp/taglib/im-tenant" %>
<%@ taglib prefix="k" uri="http://kaiden.slcs.co.jp/taglib/ui" %>
<%@ taglib prefix="klist_wkf" uri="http://kaiden.slcs.co.jp/taglib/listdata/workflow" %>
<%@ taglib prefix="kmsb" uri="http://kaiden.slcs.co.jp/taglib/master_search/base" %>
<%@ taglib prefix="kmsw" uri="http://kaiden.slcs.co.jp/taglib/master_search/workflow" %>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.HashMap"%>

<c:if test="${empty pwkfCommonIncluded}" scope="request">
  <jsp:include page="/WEB-INF/view/kaiden2/product_workflow/foundation/commonInclude.jsp"></jsp:include>
  <c:set var="pwkfCommonIncluded"  scope="request">true</c:set>
</c:if>

<%-- expenseDetail v01 --%>
<c:set scope="request" var="gadgetClass">expenseDetail</c:set> 
<c:set scope="request" var="gadgetVariation">v01</c:set>
<c:set scope="request" var="gadgetInstance">${param.gadget_instance}</c:set>
<c:set scope="request" var="gadgetId">${gadgetClass}_${gadgetVariation}_${gadgetInstance}</c:set>
<c:set var="accessUrl">kaiden/gadget/expenseDetailV01</c:set>
<c:set var="tmtableId">expenseDetailTable</c:set>
<c:set var="tmtableControllerBlockId">tmtableController</c:set>
<c:set var="searchCriteriaCompany">${param.searchCriteriaCompany}</c:set>
<c:set var="searchCriteriaDate">${param.searchCriteriaDate}</c:set>
<c:set var="companyCurrencyCd">${param.companyCurrencyCd}</c:set>

<c:set scope="request" var="gadget" value="${appDto.gadgets[gadgetId]}" />
<c:set var="detail" value="${gadget.blocks['expenseDetailTable']}" />

<%-- tmtable --%>
<c:set var="allowAddDetail" value="${'1' == detail.allowAddFlag}" />
<c:set var="allowDelDetail" value="${'1' == detail.allowDelFlag}" />

<%-- Surface --%>
<c:set var="surfaceChapterTitle">${gadget.surfaces["chapterTitle"]}</c:set>
<c:set var="surfaceOccurDate">${gadget.surfaces["occurDate"]}</c:set>
<c:set var="surfaceSummary">${gadget.surfaces["summary"]}</c:set>
<c:set var="surfaceExpType">${gadget.surfaces["expType"]}</c:set>
<c:set var="surfaceAccount">${gadget.surfaces["account"]}</c:set>
<c:set var="surfaceTaxType">${gadget.surfaces["taxType"]}</c:set>
<c:set var="surfaceTransAmount">${gadget.surfaces["amount"]}</c:set>
<c:set var="surfacePayType">${gadget.surfaces["payType"]}</c:set>
<c:set var="surfacePayee">${gadget.surfaces["payee"]}</c:set>
<c:set var="surfaceDepartment">${gadget.surfaces["department"]}</c:set>
<c:set var="surfaceProject">${gadget.surfaces["project"]}</c:set>

<%-- Mode --%>
<c:set var="modeOccurDate">${detail.fields["occurDate"].inputType}</c:set>
<c:set var="modeSummary">${detail.fields["summary"].inputType}</c:set>
<c:set var="modeExpTypeCd">${detail.fields["expTypeCd"].inputType}</c:set>
<c:set var="modeAccountCd">${detail.fields["accountCd"].inputType}</c:set>
<c:set var="modeTaxTypeCd">${detail.fields["taxTypeCd"].inputType}</c:set>
<c:set var="modeTransAmount">${detail.fields["transAmount"].inputType}</c:set>
<c:set var="modePayTypeCd">${detail.fields["payTypeCd"].inputType}</c:set>
<c:set var="modePayeeName">${detail.fields["payeeName"].inputType}</c:set>
<c:set var="modeDepartmentCd">${detail.fields["departmentCd"].inputType}</c:set>
<c:set var="modeProjectCd">${detail.fields["projectCd"].inputType}</c:set>

<%-- RequiredMark --%>
<c:set var="reqOccurDate" >${detail.fields["occurDate"].requiredFlag}</c:set>
<c:set var="reqSummary" >${detail.fields["summary"].requiredFlag}</c:set>
<c:set var="reqExpTypeCd" >${detail.fields["expTypeCd"].requiredFlag}</c:set>
<c:set var="reqAccountCd" >${detail.fields["accountCd"].requiredFlag}</c:set>
<c:set var="reqTaxTypeCd" >${detail.fields["taxTypeCd"].requiredFlag}</c:set>
<c:set var="reqTransAmount" >${detail.fields["transAmount"].requiredFlag}</c:set>
<c:set var="reqPayTypeCd" >${detail.fields["payTypeCd"].requiredFlag}</c:set>
<c:set var="reqPayeeName" >${detail.fields["payeeName"].requiredFlag}</c:set>
<c:set var="reqDepartmentCd" >${detail.fields["departmentCd"].requiredFlag}</c:set>
<c:set var="reqProjectCd" >${detail.fields["projectCd"].requiredFlag}</c:set>

<%-- Validator --%>
<c:set var="validOccurDate_def">{k_date:['']}</c:set>
<c:set var="validOccurDate_apply">{${"true" == reqOccurDate ? "k_required:['']" : ""}}</c:set>
<c:set var="validOccurDate_tempsave"></c:set>
<c:set var="validOccurDate_reapply">{${"true" == reqOccurDate ? "k_required:['']" : ""}}</c:set>
<c:set var="validOccurDate_process">{${"true" == reqOccurDate ? "k_required:['']" : ""}}</c:set>

<c:set var="validSummary_def">{k_maxLength:['250']}</c:set>
<c:set var="validSummary_apply">{${"true" == reqSummary ? "k_required:['']" : ""}}</c:set>
<c:set var="validSummary_tempsave"></c:set>
<c:set var="validSummary_reapply">{${"true" == reqSummary ? "k_required:['']" : ""}}</c:set>
<c:set var="validSummary_process">{${"true" == reqSummary ? "k_required:['']" : ""}}</c:set>

<c:set var="validExpTypeCd_def">{k_expTypeExists:['expTypeCd', 'searchCriteriaCompany', 'searchCriteriaDate']}</c:set>
<c:set var="validExpTypeCd_apply">{${"true" == reqExpTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validExpTypeCd_tempsave"></c:set>
<c:set var="validExpTypeCd_reapply">{${"true" == reqExpTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validExpTypeCd_process">{${"true" == reqExpTypeCd ? "k_required:['']" : ""}}</c:set>

<c:set var="validAccountCd_def">{k_accountExists:['accountCd', 'searchCriteriaCompany', 'searchCriteriaDate']}</c:set>
<c:set var="validAccountCd_apply">{${"true" == reqAccountCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validAccountCd_tempsave"></c:set>
<c:set var="validAccountCd_reapply">{${"true" == reqAccountCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validAccountCd_process">{${"true" == reqAccountCd ? "k_required:['']" : ""}}</c:set>

<c:set var="validTaxType_def">{k_taxTypeExists:['taxTypeCd', 'searchCriteriaCompany', 'searchCriteriaDate']}</c:set>
<c:set var="validTaxType_apply">{${"true" == reqTaxTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validTaxType_tempsave"></c:set>
<c:set var="validTaxType_reapply">{${"true" == reqTaxTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validTaxType_process">{${"true" == reqTaxTypeCd ? "k_required:['']" : ""}}</c:set>

<c:set var="validPayTypeCd_def">{k_payTypeExists:['payTypeCd', 'searchCriteriaCompany', 'searchCriteriaDate']}</c:set>
<c:set var="validPayTypeCd_apply">{${"true" == reqPayTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validPayTypeCd_tempsave"></c:set>
<c:set var="validPayTypeCd_reapply">{${"true" == reqPayTypeCd ? "k_required:['']" : ""}}</c:set>
<c:set var="validPayTypeCd_process">{${"true" == reqPayTypeCd ? "k_required:['']" : ""}}</c:set>

<c:set var="validPayeeName_def">{k_maxLength:['250']}</c:set>
<c:set var="validPayeeName_apply">{${"true" == reqPayeeName ? "k_required:['']" : ""}}</c:set>
<c:set var="validPayeeName_tempsave"></c:set>
<c:set var="validPayeeName_reapply">{${"true" == reqPayeeName ? "k_required:['']" : ""}}</c:set>
<c:set var="validPayeeName_process">{${"true" == reqPayeeName ? "k_required:['']" : ""}}</c:set>

<c:set var="validDepartmentCd_def">{k_departmentExists:['searchCriteriaCompany', 'departmentSetCd', 'departmentCd', 'searchCriteriaDate']}</c:set>
<c:set var="validDepartmentCd_apply">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>
<c:set var="validDepartmentCd_tempsave"></c:set>
<c:set var="validDepartmentCd_reapply">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>
<c:set var="validDepartmentCd_process">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>

<c:set var="validProjectCd_def">{k_projectExists:['projectCd', 'searchCriteriaCompany', 'searchCriteriaDate']}</c:set>
<c:set var="validProjectCd_apply">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>
<c:set var="validProjectCd_tempsave"></c:set>
<c:set var="validProjectCd_reapply">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>
<c:set var="validProjectCd_process">{k_requiredAny:['departmentCd', 'projectCd']}</c:set>
    <%
      @SuppressWarnings("unchecked")
      Map<String,Object> search = new HashMap<String,Object>();
      search.put("use", "true");
      search.put("surface","searchTransitManager");
      search.put("sprite","kaiden-ui-icon-iccard_gray-16");
      
      Map<String,Object> importSetting = new HashMap<String,Object>();
      importSetting.put("use", "true");
      importSetting.put("surface","importTransitManager");
      importSetting.put("sprite","kaiden-ui-icon-iccard_gray-16");
      
      Map<String,Object> settings = new HashMap<String,Object>();
      settings.put("search", search);
      settings.put("import", importSetting);
      
      Map<String,Object> occurDate = new HashMap<String,Object>();
      occurDate.put("value","payDate");
      occurDate.put("mode","0");
      occurDate.put("disabled","true");
      occurDate.put("readonly","true");
      Map<String,Object> transAmount = new HashMap<String,Object>();
      transAmount.put("value","payment");
      transAmount.put("mode","0");
      transAmount.put("disabled","true");
      transAmount.put("readonly","true");
      Map<String,Object> payTypeCd = new HashMap<String,Object>();
      payTypeCd.put("value","0001");
      payTypeCd.put("mode","0");
      payTypeCd.put("disabled","true");
      Map<String,Object> summary = new HashMap<String,Object>();
      summary.put("value","memo");
      summary.put("mode","1");
      
      Map<String,Object> relations = new HashMap<String,Object>();
      relations.put("occurDate", occurDate);
      relations.put("transAmount", transAmount);
      relations.put("payTypeCd", payTypeCd);
      relations.put("summary", summary);
      
      Map<String,Object> args = new HashMap<String,Object>();
      args.put("settings", settings);
      args.put("relations", relations);
      
      Map<String,Object> include = new HashMap<String,Object>();
      include.put("args", args);
      include.put("tmtableId", "expenseDetailTable");
      request.setAttribute("include", include);
      
      Map<String,Object> url = new HashMap<String,Object>();
      url.put("url", "kaiden/gadget/gadgetBuilder");
      request.setAttribute("config.url", "kaiden/gadget/gadgetBuilder");
      
      Map<String,Object> block = new HashMap<String,Object>();
      block.put("allowAddFlag", pageContext.getAttribute("allowAddDetail"));
      request.setAttribute("block", block);
    %>
<c:set scope="request" var="surfaces" value="${gadget.surfaces}"/>
<c:import url="/WEB-INF/view/kaiden2/product_workflow/generic/gadget/include/searchTransitManager.jsp"/>

<k:gadgetContainer gadgetClass="${gadgetClass}"
                   gadgetVariation="${gadgetVariation}"
                   gadgetInstance="${gadgetInstance}"
                   gadgetTitle="${surfaceChapterTitle}"
                   gadgetId="${gadgetId}"
                   style="width:850px;overflow:hidden;">
  <div id="${gadgetId}-under" style="width:100%; margin:10px 1px;"></div>
  <k:blockContainer id="caution" style="display:block;"></k:blockContainer> 
  <form id="gadget_form" onsubmit="return false;">
    <k:tmtable id="${tmtableId}" class="imui-form kaiden-ui-tmt-form" style="table-layout:fixed" rowNumberTarget="rowNumber">
      <colgroup>
         <col style="width:42px;overflow:hidden">
         <col style="width:230px;overflow:hidden">
         <col style="width:185px;overflow:hidden">
         <col style="width:185px;overflow:hidden">
         <col style="width:185px;overflow:hidden">
      </colgroup>
      <thead>
        <tr>
          <td rowspan="3" style="vertical-align:middle;">
            <k:tmtableOperationPanel
              position="header"
              allowAdd="${allowAddDetail}"
              allowDel="${allowDelDetail}"
            />
          </td>
          <th>
            <k:surface
              name="occurDateSurface"
              surfaceKey="${surfaceOccurDate}"
              requiredMark="${reqOccurDate}"
            />
          </th>
          <th colspan="3">
            <k:surface
              name="summarySurface"
              surfaceKey="${surfaceSummary}"
              requiredMark="${reqSummary}"
            />
          </th>
        </tr>
        <tr>
          <th colspan="2">
            <k:surface
              name="expTypeSurface"
              surfaceKey="${surfaceExpType}"
              requiredMark="${reqExpTypeCd}"
              style="display:inline;"
            />
            <k:surface
              name="accountSurface"
              surfaceKey="${surfaceAccount}"
              style="display:inline;"
            />
            <k:surface
              name="taxTypeSurface"
              surfaceKey="${surfaceTaxType}"
              style="display:inline;"
            />
          </th>
          <th>
            <k:surface
              name="departmentSurface"
              surfaceKey="${surfaceDepartment}"
              style="display:inline;"
            />
          </th>
          <th>
            <k:surface
              name="projectSurface"
              surfaceKey="${surfaceProject}"
            />
          </th>
        </tr>
        <tr>
          <th>
            <k:surface
              name="payTypeSurface"
              surfaceKey="${surfacePayType}"
              requiredMark="${reqPayTypeCd}"
              style="display:inline;"
            />
          </th>
          <th>
            <k:surface
              name="payeeSurface"
              surfaceKey="${surfacePayee}"
              requiredMark="${reqPayeeName}"
              style="display:inline;"
            />
          </th>
          <th colspan="2">
            <k:surface
              name="transAmountSurface"
              surfaceKey="${surfaceTransAmount}"
              requiredMark="${reqTransAmount}"
            />
          </th>
        </tr>
     </thead>
     <tbody>
        <tr>
          <td rowspan="3">
            <k:tmtableOperationPanel
              position="detail"
              allowAdd="${allowAddDetail}"
              allowDel="${allowDelDetail}"
              name="rowNumber"
            />
            <div style="display:none;">
              <k:hidden name="relation" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationType" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationId" mode="0" data-kaiden-exempt-data="true" />
              <k:hidden name="relationData" mode="0" data-kaiden-exempt-data="true" />
            </div>
          </td>
          <td>
            <k:date
              name="occurDate"
              mode="${modeOccurDate}"
              surfaceKey="${surfaceOccurDate}"
              validationDefault="${validOccurDate_def}"
              validationApply="${validOccurDate_apply}"
              validationTempsave="${validOccurDate_tempsave}"
              validationReapply="${validOccurDate_reapply}"
              validationProcess="${validOccurDate_process}"
            />
          </td>
          <td  colspan="3">
            <k:text
              name="summary"
              mode="${modeSummary}"
              imeMode="on"
              surfaceKey="${surfaceSummary}"
              style="width:545px;"
              maxlength="250"
              validationDefault="${validSummary_def}"
              validationApply="${validSummary_apply}"
              validationTempsave="${validSummary_tempsave}"
              validationReapply="${validSummary_reapply}"
              validationProcess="${validSummary_process}"
            />
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <k:hidden
              name="expTypeCd"
              mode="${modeExpTypeCd}"
            />
            <kmsw:expType
              name="expTypeName"
              mode="${modeExpTypeCd}"
              imeMode="on"
              surfaceKey="${surfaceExpType}"
              resultValue="expTypeName"
              resultChain="{expTypeCd:'expTypeCd', accountCd:'accountCd', accountName:'accountName', taxTypeCd:'taxTypeCd', taxTypeName:'taxTypeName'}"
              primaryTarget="expTypeCd"
              searchCriteriaDate="searchCriteriaDate"
              searchCriteriaCompany="searchCriteriaCompany"
              searchCriteriaExpTypeCd="expTypeCd"
              style="width:150px;"
              validationDefault="${validExpTypeCd_def}"
              validationApply="${validExpTypeCd_apply}"
              validationTempsave="${validExpTypeCd_tempsave}"
              validationReapply="${validExpTypeCd_reapply}"
              validationProcess="${validExpTypeCd_process}"
            />
            <k:hidden
              name="accountCd"
              mode="${modeAccountCd}"
              surfaceKey="${surfaceAccount}"
              validationDefault="${validAccountCd_def}"
              validationApply="${validAccountCd_apply}"
              validationTempsave="${validAccountCd_tempsave}"
              validationReapply="${validAccountCd_reapply}"
              validationProcess="${validAccountCd_process}"
            />
            <k:text
              name="accountName"
              mode="1"
              class="kaiden-ui-mst-search-chain-item"
              style="width:115px;"
            />
            <k:hidden
              name="taxTypeCd"
              mode="${modeTaxTypeCd}"
              surfaceKey="${surfaceTaxType}"
              validationDefault="${validTaxType_def}"
              validationApply="${validTaxType_apply}"
              validationTempsave="${validTaxType_tempsave}"
              validationReapply="${validTaxType_reapply}"
              validationProcess="${validTaxType_process}"
            />
            <k:text
              name="taxTypeName"
              mode="1"
              class="kaiden-ui-mst-search-chain-item"
              style="width:115px;"
            />
          </td>
          <td>
            <k:hidden
              name="departmentSetCd"
              mode="${modeDepartmentCd}"
            />
            <k:hidden
              name="departmentCd"
              mode="${modeDepartmentCd}"
              surfaceKey="${surfaceDepartment}"
            />
            <kmsb:department
              name="departmentName"
              mode="${modeDepartmentCd}"
              imeMode="on"
              surfaceKey="${surfaceDepartment}"
              resultValue="departmentName"
              resultChain="{departmentSetCd:'departmentSetCd', departmentCd:'departmentCd'}"
              primaryTarget="departmentCd,departmentSetCd"
              searchCriteriaDate="searchCriteriaDate"
              searchCriteriaCompany="searchCriteriaCompany"
              searchCriteriaDepartmentCd="departmentCd"
              searchCriteriaDepartmentSetCd="departmentSetCd"
              style="width:150px;"
              validationDefault="${validDepartmentCd_def}"
              validationApply="${validDepartmentCd_apply}"
              validationTempsave="${validDepartmentCd_tempsave}"
              validationReapply="${validDepartmentCd_reapply}"
              validationProcess="${validDepartmentCd_process}"
            />
          </td>
          <td>
            <k:hidden
              name="projectCd"
              mode="${modeProjectCd}"
              surfaceKey="${surfaceProject}"
            />
            <kmsw:project
              name="projectName"
              mode="${modeProjectCd}"
              imeMode="on"
              surfaceKey="${surfaceProject}"
              resultValue="projectName"
              resultChain="{projectCd:'projectCd'}"
              primaryTarget="projectCd"
              searchCriteriaDate="searchCriteriaDate"
              searchCriteriaCompany="searchCriteriaCompany"
              searchCriteriaProjectCd="projectCd"
              style="width:150px;"
              validationDefault="${validProjectCd_def}"
              validationApply="${validProjectCd_apply}"
              validationTempsave="${validProjectCd_tempsave}"
              validationReapply="${validProjectCd_reapply}"
              validationProcess="${validProjectCd_process}"
            />
          </td>
        </tr>
        <tr>
          <td>
            <klist_wkf:listDataPayType
              blank="false"
              name="payType"
              companyCd="${param.searchCriteriaCompany}"
              searchCriteriaDate="${param.searchCriteriaDate}"
            />
            <k:select
              name="payTypeCd"
              mode="${modePayTypeCd}"
              surfaceKey="${surfacePayType}"
              viewModeName="payTypeName"
              dataName="payType"
              selectChain="{paymentFlag:'paymentFlag'}"
              style="width:230px;"
              validationDefault="${validPayTypeCd_def}"
              validationApply="${validPayTypeCd_apply}"
              validationTempsave="${validPayTypeCd_tempsave}"
              validationReapply="${validPayTypeCd_reapply}"
              validationProcess="${validPayTypeCd_process}"
            />
            <k:hidden
              name="paymentFlag"
              mode="${modePayTypeCd}"
            />
          </td>
          <td>
            <k:text
              name="payeeName"
              mode="${modePayeeName}"
              imeMode="on"
              surfaceKey="${surfacePayee}"
              style="width:160px;"
              maxlength="250"
              validationDefault="${validPayeeName_def}"
              validationApply="${validPayeeName_apply}"
              validationTempsave="${validPayeeName_tempsave}"
              validationReapply="${validPayeeName_reapply}"
              validationProcess="${validPayeeName_process}"
            />
          </td>
          <td colspan="2">
            <jsp:include page="/WEB-INF/view/kaiden2/product_workflow/foundation/genericAmountInputParts.jsp">
              <jsp:param name="gadgetId" value="${gadgetId}" />
              <jsp:param name="tmtableId" value="${tmtableId}" />
              <jsp:param name="searchCriteriaCompany" value="${searchCriteriaCompany}" />
              <%-- 金額 --%>
              <jsp:param name="modeTransAmnt" value="${modeTransAmount}" />
              <jsp:param name="surfaceTransAmnt" value="${surfaceTransAmount}" />
              <jsp:param name="requiredTransAmntApply" value="${reqTransAmount}" />
              <jsp:param name="requiredTransAmntReapply" value="${reqTransAmount}" />
              <jsp:param name="requiredTransAmntProcess" value="${reqTransAmount}" />
            </jsp:include>
          </td>
        </tr>
      </tbody>
    </k:tmtable>
  </form>
</k:gadgetContainer>
<script type="text/javascript">
  jQuery(function($){
    var eventMan = KAIDEN.getGadget("${gadgetId}").eventManager
     ,  tmt = KAIDEN.getGadget("${gadgetId}").tmtables["expenseDetailTable"]
     ,  tma = tmt.tmtableAccessor;

    /***********************************
     * 内部イベント 
     ***********************************/
     
     
     //明細行:行挿入(データ設定前)
     tmt.addEventPostNewRowBeforeSetData(function(tupleId, tma, data) {
       
       //デフォルト部門を要求
       var defaultDept = KAIDEN.gadgetMan.execPull("claimDefaultDepartment", undefined, "${gadgetId}");
       defaultDept = defaultDept[0].result; //先頭行のみ利用
       tma("departmentSetCd", tupleId).setValue(defaultDept.departmentSetCd);
       tma("departmentCd", tupleId).setValue(defaultDept.departmentCd);
       tma("departmentName", tupleId).setValue(defaultDept.departmentName);
       
       //デフォルトプロジェクトを要求
       var defaultPrj = KAIDEN.gadgetMan.execPull("claimDefaultProject", undefined, "${gadgetId}");
       defaultPrj = defaultPrj[0].result; //先頭行のみ利用
       tma("projectCd", tupleId).setValue(defaultPrj.projectCd);
       tma("projectName", tupleId).setValue(defaultPrj.projectName);
       
     });
    
     //明細行:行挿入(データ設定後)
     tmt.addEventPostNewRow(function(tupleId, tma, data) {
       //マスタ検索部品の整合性確認.
       KAIDEN.MasterSearch.refresh(tma("expTypeName", tupleId).elem().get(0));
       KAIDEN.MasterSearch.refresh(tma("departmentName", tupleId).elem().get(0));
       KAIDEN.MasterSearch.refresh(tma("projectName", tupleId).elem().get(0));
       
       //初期表示に先頭行を選択しているため、立替フラグ(hidden)の更新を実施 ※入力モードの場合のみ
       if (tma("payTypeCd", tupleId).elem(true).length > 0) { 
         KAIDEN.base.foundation.SelectListData.setChainValue(tma("payTypeCd", tupleId).elem(true).get(0));
       }
       
       //事前申請書取込では、会社通貨額が設定されているため、取引通貨額に会社通貨額を設定する
       //※外貨版から標準版にコピーする際、会社通貨額(レート換算後)の金額を設定する
       var compAmnt = tma("companyAmount", tupleId).getValue();
       if (compAmnt) {
         tma("transAmount", tupleId).setValue([compAmnt, KAIDEN.Util.addFigure(compAmnt)]);
         tma("companyAmount", tupleId).getValue("");
       }
       
       KAIDEN.gadgetMan.complementData(undefined, "${gadgetId}", "${gadgetId}");
     });
    
    
    /***********************************
     * 受信イベント(push) 
     ***********************************/
     
    //loadData データ読み込み  イベントリスナの登録
    eventMan.registPushListener("loadData", function(/**Object*/arg) {
      tmt.deleteAll();
      return KAIDEN.ImwModerator.genericLoadDataEvent("${gadgetId}", "${accessUrl}", arg);
    });
    
    
    //loadData4Copy 申請書コピー  イベントリスナの登録
    eventMan.registPushListener("loadData4Copy", function(/**Object*/arg) {
      return KAIDEN.ImwModerator.genericLoadData4CopyEvent("${gadgetId}", "${accessUrl}", arg);
    });
    
    //loadData4Settle 事前申請書取り込み  イベントリスナの登録
    eventMan.registPushListener("loadData4Settle", function(/**Object*/arg) {
      return KAIDEN.ImwModerator.genericLoadData4SettleEvent("${gadgetId}", "${accessUrl}", arg);
      
    });
    
    
    /***********************************
     * 受信イベント(pull) 
     ***********************************/
     
    //claimDateDetail 明細日付を要求  イベントリスナの登録
    eventMan.registPullListener("claimDateDetail", function(/**Object*/arg) { 
      return tmt.getColumnValues(["occurDate", "occurDate"]); 
    });
    
    //claimExpenseAmount 費用合計を要求  イベントリスナの登録
    eventMan.registPullListener("claimExpenseAmount", function(/**Object*/arg) {
      var amounts = tmt.getColumnValues("transAmount");
      var result = new BigDecimal().ZERO;
      $.each(amounts, function(index, value) {
        if ($.isNumeric(value)) {
          result = result.add(new BigDecimal(value));
        }
      });
      return result.toString();
    });
    
    //claimTemporaryPayAmount 従業員立替金額を要求  イベントリスナの登録
    eventMan.registPullListener("claimTemporaryPayAmount", function(/**Object*/arg) {
      var amounts = tmt.getColumnValues(["transAmount", "paymentFlag"]);
      var result = new BigDecimal().ZERO;
      $.each(amounts, function(index, value) {
        if ($.isNumeric(value[0]) && value[1] == "1") {
          result = result.add(new BigDecimal(value[0]));
        }
      });
      return result.toString();
    });
    
    //claimCompanyPayAmount 会社支払額を要求  イベントリスナの登録
    eventMan.registPullListener("claimCompanyPayAmount", function(/**Object*/arg) {
      var amounts = tmt.getColumnValues(["transAmount", "paymentFlag"]);
      var result = new BigDecimal().ZERO;
      $.each(amounts, function(index, value) {
        if ($.isNumeric(value[0]) && value[1] != "1") {
          result = result.add(new BigDecimal(value[0]));
        }
      });
      return result.toString();
    });
    
    //claimExpenseDetail 費用明細を要求  イベントリスナの登録
    eventMan.registPullListener("claimExpenseDetail", function(/**Object*/arg) {
      return tmt.getColumnValues("transAmount");
    });
    
    //claimExpenceCount 費用明細行数を要求  イベントリスナの登録
    eventMan.registPullListener("claimExpenceCount", function(/**Object*/arg) {
      return tmt.getCount();
    });
    
    /**
     * Complement(Global)イベント
     */
     eventMan.registPullListener("getGlobalComplement", function(/**Object*/args) {
      if(!KAIDEN.getGadget("${gadgetId}").variable["getComplementFunction"]){
        return new Array();
      }
      var global = new Array();
      $.each(KAIDEN.getGadget("${gadgetId}").variable["getComplementFunction"], function(index, func) {
        if ($.isFunction(func)) {
          var comples = func(args);
          if(comples){
            global = global.concat(comples);
          }
        }
      });
      return global;
    });
    
    /**
     * データ読込前(preLoadData)処理
     */
     eventMan.registPushListener("preLoadData", function(/**Object*/arg) {
      if(KAIDEN.getGadget("${gadgetId}").variable["preLoadData"]){
        $.each(KAIDEN.getGadget("${gadgetId}").variable["preLoadData"], function(index, func) {
          if ($.isFunction(func)) {
            func(arg);
          }
        });
      }
      return true;
    });
  });
</script>