巧用標誌欄位實現填報資料的暫存與鎖定

xiaohuihui發表於2019-12-05
需求場景

在使用者錄入完資料後,如果能確保資料正確,可以在頁面端點選鎖定按鈕,從而將資料鎖定,以便防止誤操作對資料產生影響,並且限定鎖定狀態的資料才是有效資料,在查詢統計時只需要統計有效資料。

解決方案

針對這個需求,我們可以在資料表中增加一個標誌欄位,透過該標誌欄位的狀態來確定資料是否處於“鎖定”狀態。

下面是具體的實現步驟:

一:在資料表中增加欄位:flag

1jpg

FLAG 欄位為 0 時表示資料為暫存資料,為 1 是表示是鎖定資料

二:根據需求製作訂單明細表,表樣如下圖:

2jpg

A3 單元格型別為維度格,表示式為 =dd.(DDID), 欄位名稱設定為:dd.DDID

B3~E3 單元格型別為數值格,欄位名稱分別設定資料表中對應的名稱。

資料處理中使用多源 SQL,資料來源為:

3jpg

接下來就看一下如何透過增加標誌位欄位進行資料控制。

在報表後追加一資料列(F 列),將 F3 單元格設定成數值格,並在欄位名稱屬性處設定“FLAG”,這樣就能在 F3 單元格取出狀態位,其餘單元格可根據 F3 的值進行是否可寫控制,值為 1 時為鎖定狀態。

在 B3~E3 單元格的是否可編輯表示式中寫入表示式:F3!=“1”, 這樣當 F3 單元格的值不為 1(非狀態鎖定)時,這些單元格可編輯。

現在報表展現時就能夠根據狀態位的值來控制資料是否可被修改了。接下來再看一下,如何控制狀態位的標誌值。

使用者操作時是在頁面端點選鎖定按鈕,所以可以在點選該按鈕時先更改報表中的狀態位,然後再執行資料儲存操作,而更改狀態位的值可以透過 javascript 指令碼更改報表單元格 (F2) 的值來實現。

接下來看下 F2 單元格設定,如圖:

4jpg

F2 單元格既要接受 js 控制,又要將值回寫到資料庫表中。在透過多源 SQL 回寫資料時,需要設定表示式,這裡將 F2 單元格型別設定成數值型,欄位名稱中寫入:a.TYPE,表示 F2 單元格放入物件 a 中,名字為 TYPE,並且該單元格要讀取資料表中的初始值,所以單元格中寫入 =F3。然後在資料處理的資料去向中設定如下:

5jpg

也就是說,儲存時會將 a.TYPE 的值儲存到 FLAG 欄位中。這裡對透過 string() 函式把 a.TYPE 轉換成字串,這樣就可以將 F2 單元格的值儲存到資料庫表的對應狀態位中。F 列為控制狀態列,設定完成後將列寬設成 0 即可。

接下來看一下如何動態更改 F2 的值。

1、 在填報表工具條中增加鎖定按鈕。

填報表工具條是在 showInput.jsp 中引入的:inputtoolbar.jsp,用文字編輯器開啟,在裡邊增加一個按鈕:

<a %>');return false;" href="#">鎖定</a></li>

注:按鈕樣式可自行設定,此處用簡單的文字。

2、 在 showInput.jsp 中增加 js 函式

function save(arg1){

document.getElementById(arg1+“0_F”+2).setAttribute(“value”,“1”);

_inputSubmit(arg1);// 儲存報表

}

該 js 函式控制,如果頁面端點選鎖定按鈕後,將 F2 單元格的值設成 1,然後再執行儲存報表操作,從而能夠將標誌位儲存到資料庫中。

頁面如下:

6jpg

再將 F 列隱藏掉即可(列寬設成 0)

這樣,我們就實現了點選“鎖定”按鈕將資料鎖定以防在頁面端再次修改。

如需要在查詢統計時只針對鎖定的有效資料,那麼只需要在 where 條件中增加 FLAG=’1’就行了。

需求擴充套件

有了標誌位的使用,在實際中可以做更復雜的控制,比如將填報嵌入業務流程中,實現資料的稽核,回退,入庫等操作,後續文章我們會做詳細的介紹。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2667019/,如需轉載,請註明出處,否則將追究法律責任。

相關文章