2015年8月8日 星期六

Scriptcase 控制欄位鎖住/開鎖的方法

會有需要鎖單功能,也就是將表單鎖住,不讓使用者修改。
需要經過開鎖,才可以編修。

ScriptCase 有提供對欄位 設為 readonly, disabled 等 macro

sc_block_display (Block_Name, on/off)
sc_field_disabled ("Field_Name = True/False", "Parameter")
sc_field_display ({My_Field}, on/off)
sc_field_readonly ({Field}, on/off)
sc_form_show 'on' or 'off

以上這些 Macro,可以對  form / block / field 做各種顯示不顯示,等設定。

而對於 Master / Detail 裡的 Detail 就不能了。因為 Detail 是另一個 Application 不是一個 field 或 block!

如果設了兩個 Block,分別設為 detail ,一個有IUD功能,另一個沒有,結果還是沒有!

最後,試了一個變通的方法:

製作兩個 Detail  Application,一個可以準備可以允許編輯用的;另一個準備來只准讀取 Read Only 的。幸好,使用 Scriptcase 複製 Application 還蠻方便。一下子就好了,名稱上一個叫做 xxxxxx_detail ;另一個叫做 xxxxx_detail_readonly,其內容,其實都一模一樣。

就在 Master application中,分別建立兩個 Master/Detail,一個在聯結中設定允許INSERT/UPDATE/DELETE、另一個不允許INSERT/UPDATE/DELETE,然後,分別放在兩個不同的Block中,而用 sc_block_display()來控制顯示哪一個block,就可以了!

註:2015/08/17 今天終於找到了,讓上面所講的鎖定/結鎖,能自動儲存起來,存在一個欄位中,然後,往前、往後以後,回到這一筆資料,依然是鎖定/解鎖 的狀態。
那就是:

if ({lock_field}=='1') {
   {lock_field}='0';
   enable_all_fields();
} else {
    {lock_field}='1';
    disable_all_fields();
}
sc_ajax_javascript( 'nm_atualiza', array('alterar'));


註:自己另行設計一個 button,TYPE:JavaScript,可以自訂 LABEL、還有 CONFIRM Message等。
在下面的 JavaScript 裡面輸入:

nm_atualiza('alterar');

這是執行"SAVE"的意思。



另一個應用場景是:如果希望自動執行SAVE,而不要讓使用者再按一次SAVE,就可以在程式中自己加入這段程式碼。

下面這一段程式:
執行SAVE,然後等一秒鐘,然後自動下一筆(nm_move('avanca');)

nm_atualiza('alterar'); setTimeout(function() {nm_move('avanca');},1000); //you need a delay (1000 = 1s) here to wait for the update to finish, otherwise the form would lock up. You might need to adjust the time. Just try what works best for your system.

Parameters for nm_move():
first = ‘inicio’
previous = ‘retorna’
next = ‘avanca’
last = ‘final’








沒有留言:

張貼留言

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。