出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

画面状態の保持について   ぽんぽんさん [2002/08/24 2:37:32] [2536]
  Re:画面状態の保持について   とこおかさん [2002/08/24 6:27:01] [2537]
    Re:画面状態の保持について   ぽんぽんさん [2002/08/24 10:34:12] [2540]
  アルゴリズム?   北岳さん [2002/08/24 6:57:48] [2538]
    Re:アルゴリズム?   ぽんぽんさん [2002/08/24 10:30:48] [2539]

[2536] 画面状態の保持について
投稿者:ぽんぽんさん 2002/08/24 2:37:32
はじめまして、ぽんぽんです。
力不足によりヘルプお願いします。

現在、ワークフローシステムのWeb開発を行っている物です。

今回、画面の状態保持について、効率的な方法を助言して頂きたいのです。

現在、業務アプリで申請案件を一覧表示する機能が存在しております。
仕様は、案件毎にチェックボックスが存在しており、
「連続承認」ボタンを押下する事により、チェックされている案件を
連続して承認する機能を開発しています。

大まかな処理の流れとして、下記の通りです。

(1)リクエスト可能判断する。
可能でなければSession情報より取得する。
(2)対象ユーザの案件情報を取得する。
(3)表示用データを作成する。
(4)表示用データをソートする。
(5)表示用データより画面へ表示する。

尚、画面上、指定件数を超えた場合に改ページ制御をしています。
(「次へ」「前へ」等のアンカーをクリックすると、次・前ページの情報を表示する。)

ページ切り替え方法は、当該モジュールをサブミットする事により、
前情報より次ページに必要な情報を取得して、再描画を行います。

ここで質問です。

チェックボックスの状態を「hidden」に保持する事により、
再描画前の情報は「Request.form」により取得可能ですが、、、

(1)チェックボックスの状態保持は全ページ有効でなければならない。
※「次へ」「前へ」を押下するたびになんらかの方法で状態を保持しなければならない。
(2)データ一覧のヘッダ項目をクリックする事により、ソートが行われるが、
ソートしてもチェック状態を再現しなければならない。
(3)個別に案件を開封した場合は、処理の性質上、前情報が取得出来ない。
※Session等に変数を保持しなければならない。
(4)案件開封前に変更されたチェックは保持しなくてもよい。
(5)デフォルトはすべてチェックされていなければならない。

上記5点について考慮しなければなりません。

現状はチェック状態保持以外については完成しているのですが、
チェック状態の保持がうまく動作しません。

尚、現状の方式は全データ件数分のhiddenを作成して(発生件数は少ないです。)、
ページボタンが押下されたタイミングで、チェックされている案件の
申請書番号をhiddenに書き込み、チェックされていない場合は
「""」を書き込むようにしています。
ただし、並び替えが発生した場合は、書き込むインデックスが同じなためか、
上手く処理されません。

説明が下手で申し訳ありませんが、
何か効率的なアルゴリズムがありましたら、ご教授願います。

[2537] Re:画面状態の保持について
投稿者:とこおかさん 2002/08/24 6:27:01
とこおかです。
#ちょっとイメージ掴みにくい為見当違いかもしれませんが

>申請書番号をhiddenに書き込み、チェックされていない場合は
>「""」を書き込むようにしています。
この状態を常にif等で確認し、""以外はデフォルトでチェックを入れてあげればどうでしょう?

>チェック状態の保持がうまく動作しません。
具体的に?エラー?表示しないだけ?

>ただし、並び替えが発生した場合
イメージ沸かない…

#できていない個所だけ抜粋してもう少し詳しく状況説明した方が
#イメージが沸きやすいです(~~;

[2540] Re:画面状態の保持について
投稿者:ぽんぽんさん 2002/08/24 10:34:12
> とこおかです。
> #ちょっとイメージ掴みにくい為見当違いかもしれませんが
>
> >申請書番号をhiddenに書き込み、チェックされていない場合は
> >「""」を書き込むようにしています。
> この状態を常にif等で確認し、""以外はデフォルトでチェックを入れてあげればどうでしょう?
>
> >チェック状態の保持がうまく動作しません。
> 具体的に?エラー?表示しないだけ?
>
> >ただし、並び替えが発生した場合
> イメージ沸かない…
>
> #できていない個所だけ抜粋してもう少し詳しく状況説明した方が
> #イメージが沸きやすいです(~~;
>

わかりにくく申し訳ありません。。。(^^;
北岳さんに対するコメントに、処理をいれて見ました。
ご参照願います。

[2538] アルゴリズム?
投稿者:北岳さん 2002/08/24 6:57:48
>チェックされている案件の申請書番号をhiddenに書き込み、
>チェックされていない場合は「""」を書き込むようにしています。
>ただし、並び替えが発生した場合は、書き込むインデックスが同じなためか、
>上手く処理されません。
 
現状は、
 
「hidden の Name に ASPが作る連番を与え、
チェックされたら hidden の Value に申請書番号を書込む。
チェック状態は sessionに保持する。」
 
と読めますが、これだと途中でソートされたら確かにメチャクチャになるので、
 
「全hidden の Name にユニークな値(ex.申請書番号)を与え、
チェックされたら hidden の Value に "checked" を書込む。
session変数にもユニークな名前を与える。」
 
ならどうでしょう。
 
---------------------------------------------------------
>何か効率的なアルゴリズムがありましたら、ご教授願います。
 
効率的なアルゴリズム、効率的な EXE や DLL のソースコード、独創的なビジネスモデル、
特許になりそうな新技術・新商品アイデア・・・
WEBの一般公開サイトでこれらを求めても、色よい回答はないでしょう。
会社の従業員が下手に回答したら、機密漏洩を問われるかも。
 
上のレスは、効率的かどうかはともかく、
『秘密にしたいアルゴリズム』でないことは確かです。

[2539] Re:アルゴリズム?
投稿者:ぽんぽんさん 2002/08/24 10:30:48
早速のご回答ありがとうございます。
質問内容がわかりにくく、申し訳ありません。

> >チェックされている案件の申請書番号をhiddenに書き込み、
> >チェックされていない場合は「""」を書き込むようにしています。
> >ただし、並び替えが発生した場合は、書き込むインデックスが同じなためか、
> >上手く処理されません。
>  
> 現状は、
>  
> 「hidden の Name に ASPが作る連番を与え、
> チェックされたら hidden の Value に申請書番号を書込む。
> チェック状態は sessionに保持する。」
>  
> と読めますが、これだと途中でソートされたら確かにメチャクチャになるので、
>  
> 「全hidden の Name にユニークな値(ex.申請書番号)を与え、
> チェックされたら hidden の Value に "checked" を書込む。
> session変数にもユニークな名前を与える。」
>  
> ならどうでしょう。

現状、下記の処理を想定してみました。
如何でしょうか?

----------------------------------------------------
■gv_workList(n1, n2)
n1:レコード件数分
n2:指定列情報

■DAT_WORKID = 申請書番号の格納されている列番号

<%
'@ 初期表示
If "" = gv_reload_type or true = isNull(gv_reload_type) then
'@ 初期起動時、デフォルトはすべての案件がチェック済みとするため、
セッションに情報を格納する。
For ic = 1 To gv_workNum
Session("GWSV_SELECT_WORKID") = Session("GWSV_SELECT_WORKID") & _
gv_workList(ic, DAT_WORKID) & ","
Next
'@ ページ切り替え等
ElseIf false = gv_reload_type Then
Session("GWSV_SELECT_WORKID") = ""
For ic = 1 To gv_workNum
If Request.Form("id_" & gv_workList(ic, DAT_WORKID)) = "cheked" Then
Session("GWSV_SELECT_WORKID") = Session("GWSV_SELECT_WORKID") & _
gv_workList(ic, DAT_WORKID) & ","
End If
Next
'@ 案件開封後から復帰した場合
ElseIf true = gv_reload_type Then
現状処理なし
End If

'@--- hidden情報作成 START

Dim aryWorkID

aryWorkID = Split(Session("GWSV_SELECT_WORKID"), ",")

For ic = 1 To gv_workNum
bFlg = false
For ix = 0 To UBound(arySelectWork)
If gv_workList(ic, DAT_WORKID) = arySelectWork(ix) Then
bFlg = true
Exit For
End If
If bFlg = true Then
%><input type="hidden" name="id_<%= gv_workList(ic, DAT_WORKID) >" value="cheked"><%
Else
%><input type="hidden" name="id_<%= gv_workList(ic, DAT_WORKID) >" value=""><%
End If
Next
Next
'@--- hidden情報作成 END

.
.
.

'@--- 一覧表示 START
For ic = start To end
PutCheckBox( ic, gv_workList(ic, DAT_WORKID)
Next
'@--- 一覧表示 END


'@--- 関数PutCheckBox() START
Sub PutCheckBox( arg_Idx, arg_WorkID )
Dim aryWorkID

For ic = 1 To gv_workNum
bFlg = false
aryWorkID = Split(Session("GWSV_SELECT_WORKID"), ",")
For ix = 0 To UBound(aryWorkID)
If arg_WorkID = aryWorkID(ix) Then
bFlg = true
Exit For
End If
Next
If bFlg = true Then
%><INPUT TYPE="checkbox" NAME="chkSelectWork<%=arg_Idx%>" cheked><%
Else
%><INPUT TYPE="checkbox" NAME="chkSelectWork<%=arg_Idx%>"><%
End If
Next
End Sub
'@--- 関数PutCheckBox() END
----------------------------------------------------

尚、上記処理中(gv_workList)に情報がはいる形となっていますが、
一覧表示する度に情報が増えた(または減少)した場合も対応しなければなりません。
減る場合については特に問題ないのですが、
増えた場合については、その増えた申請書番号はチェックされた状態でなければなりません。

よろしくお願いします。



TreeBBS For ASP V.0.1.3
Program By YasNet