HTMLのボタンの2度押し禁止の実装

よくある制御ですが、相変わらず画面系に縁が薄いのメモ

方法は2種類

1.ボタンを非活性化する

2.2度目のボタンクリックの処理を無効にする


今回は1の非活性化

手順

1.対象のボタンにクリックイベントを設定
<button type="button" name="btnUpdate" id="btnUpdate" value="更新" onclick="update()">
2.クリックイベントで呼び出すFunctionを作成
function update(){
//処理を実装
}

3.2の関数の冒頭で、対象ボタンのオブジェクトを取得
 
var elebtnUpdate=document.getElementById("btnUpdate");

4.3のオブジェクトの disable プロパティをTrue
  elebtnUpdate.disabled = true;
  

以上。

注意
 submitボタンに実装すると思わぬ問題が発生するようです。
 通常のボタンに実装するのが安全らしい。

ちなみに、1の2度目の処理の無効化は、呼び出す関数ないでフラグを
立てて、フラグが立っていたら、すぐ Return でFunctionを抜ける
方式のようです。

実装の抜粋

オブジェクトの非活性化

var elebtnUpdate=document.getElementById("btnUpdate");
elebtnUpdate.disabled = true;

対象のボタンの定義

<button type="button" name="btnUpdate" id="btnUpdate" value="更新" style="WIDTH: 100px; HEIGHT: 30px" onclick="update()">
<font size="3">更新</font>
</button>


EssBaseにJAVA APIで接続、Calcの実行、Reportの実行
切断方法

接続情報
サーバ名
URL
アプリケーション名
キューブ名(テーブル)
ユーザ名
パスワード

String svName ="localhst";

eesServerName =svName;
domainName =svName;
eesUrl ="http://localhost:13080/aps/JAPI";
olapServerName =svName;
applicationName = "app";
cubeName = "cube";
userName = "user";
password = "password";


//EssBaseに接続

ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);

dom = ess.signOn(userName, password, domainName, eesUrl);

//Calcの実行


// Open connection with olap server and get the cube.
olapSvr = (EssOlapServer)dom.getOlapServer(olapServerName);


olapSvr.connect();

cube = olapSvr.getApplication(applicationName).getCube(cubeName);

//Calcの実行(Voidの非同期メソッド)
cube.calculate("実行させるCalcスクリプト" ,false);


//Reportの実行

// Open connection with olap server and get the cube.
olapSvr = (EssOlapServer)dom.getOlapServer(olapServerName);

olapSvr.connect();

cube = olapSvr.getApplication(applicationName).getCube(cubeName);


IEssSequentialIterator output = cube.report(repScript, false, false, true, false);

//取得したオブジェクト(データ)を文字列として取得

String part = null;
while ((part = output.getNextString()) != null){
  sbStr.append(part);
}


後処理

* Closes all the Essbase connections.
*/
public void clean() {
 // Close cube view.
  try {
    if (cv != null)

    //キューブオブジェクトのClose
     cv.close();
    }
  
  } catch (EssException ignored) {
  
  }
  // Sign off from the domain.
  try {
     if (ess != null && ess.isSignedOn() == true)
     //ログオフ?
       ess.signOff();
     }
   } catch (EssException ignored) {
   }
   
   try {
     if (olapSvr != null && olapSvr.isConnected() == true)
     //切断
       olapSvr.disconnect();
     }
   } catch (EssException ignored) {
   }
}

ViewListのグループ化を試してみた。

書籍の例にならってやったのですが、どうもグループ化されない。

そこで調べてみたら、若干実装方法が違った。

今回はtableタグを利用して3レコードを1グループ化するものです。

大きな違いは "groupPlaceholderContainer" を使用することです。

手順
1.asp:ListView タグに GroupItemCount でグループ化する件数を指定

2.GroupTemplate タグに "itemPlaceholderContainer" と
  "itemPlaceholder" を指定

3.LayoutTemplate タグに "groupPlaceholderContainer" と
  "groupPlaceholder" を指定  

まぁ、デザインでListViewの構成で、レイアウトの選択にて

フロー でなく、 並べて表示 を選択していれば大枠は自動生成される。

groupPlaceholderContainer この意味を理解していなかったのが原因かと。

<div>
<asp:ListView ID="ListView1" runat="server" DataKeyNames="EmployeeId"
DataSourceID="SqlDataSource1" GroupItemCount="3">
<EmptyDataTemplate>
<table runat="server" style="">
<tr>
<td>
データは返されませんでした。</td>
</tr>
</table>
</EmptyDataTemplate>
<ItemTemplate>
<td runat="server" style="">
DepartmentName:
<asp:Label ID="DepartmentNameLabel" runat="server"
Text='<%# Eval("DepartmentName") %>' />
<br />
EmployeeId:
<asp:Label ID="EmployeeIdLabel" runat="server"
Text='<%# Eval("EmployeeId") %>' />
<br />
Name:
<asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
<br />
DepartmentId:
<asp:Label ID="DepartmentIdLabel" runat="server"
Text='<%# Eval("DepartmentId") %>' />
<br />
Birthday:
<asp:Label ID="BirthdayLabel" runat="server" Text='<%# Eval("Birthday") %>' />
<br />
Sales:
<asp:Label ID="SalesLabel" runat="server" Text='<%# Eval("Sales") %>' />
<br />
TelNo:
<asp:Label ID="TelNoLabel" runat="server" Text='<%# Eval("TelNo") %>' />
<br />
<asp:CheckBox ID="SexCheckBox" runat="server" Checked='<%# Eval("Sex") %>'
Enabled="false" Text="Sex" />
<br />
</td>
</ItemTemplate>
<GroupSeparatorTemplate>
<tr><td colspan="3" align="center">グループ区切り</td></tr>
</GroupSeparatorTemplate>

<GroupTemplate>
<tr ID="itemPlaceholderContainer" runat="server">
<td ID="itemPlaceholder" runat="server">
</td>
</tr>
</GroupTemplate>

<EmptyItemTemplate>
<td runat="server">表示するれこードなし</td>
</EmptyItemTemplate>

<LayoutTemplate>
<table runat="server">
<tr runat="server">
<td runat="server">
<table ID="groupPlaceholderContainer" runat="server" border="0" style="">
<tr ID="groupPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
</table>
</LayoutTemplate>
</asp:ListView>

※参考にしたHP
http://www.atmarkit.co.jp/fdotnet/dotnettips/916aspnetlistvwgroup/aspnetlistvwgroup.html