2016-09-26 56 views
0

我寫了一個簡單的代碼來從數據庫中搜索一些數據並將其顯示在瀏覽器(br1)中,它包含以下佈局screenshot如何編寫取消按鈕的代碼撤消/回滾添加和更新正在進行的行4gl

DO: 
Enable 
oadd oupdate odelete ocancel with frame default-frame. 

Find First Customer where Customer.Cust-Num =input oCustNum exclusive-lock NO-ERROR . 

if available customer 

THEN DO: 

message "1" view-as alert-box. 

    update 
    Customer.Name   = input oName 
    Customer.Balance  = input oBalance 
    Customer.Discount  = input oDiscount 
    Customer.Credit-Limit = input oCredit-Limit 
    Customer.Phone  = input oPhone 
    Customer.Contact  = input oContact . 

     br1:refresh(). 
     end. 

if not available customer 

THEN DO: 

    message "2" view-as alert-box. 
    Create Customer. 

    assign 
    Customer.Cust-Num  = input oCustNum 
    Customer.Name   = input oName 
    Customer.Balance  = input oBalance 
    Customer.Discount  = input oDiscount 
    Customer.Credit-Limit = input oCredit-Limit 
    Customer.Phone  = input oPhone 
    Customer.Contact  = input oContact . 

     end.  
END. 

我寫了保存更新的代碼並添加到保存按鈕。

現在當按下取消按鈕時,我需要在添加/更新完成之前撤銷/回滾數據到原始值。

任何人都可以幫助我嗎?

回答

1

我認爲你需要重新考慮你的設計!

「撤銷」意味着事務處於打開狀態,並且該特定事務回滾。您可以通過將整個GUI封裝在一個事務中來做到這一點,但這是不好的做法。如果有人離開會話,它會給予長期交易,鎖定問題,雙向文件增長和潛在的崩潰。不是一個好主意 - 你想讓你的交易變小!

您需要研究更多基於服務的方法。例如:

  • 當界面加載時,您將感興趣的記錄加載到臨時表中。

  • 當您點擊「添加」,「更新」,「刪除」等等,您對這些記錄進行更改。 「添加」在臨時表中創建一條新記錄,「更新」更改記錄並刪除臨時表中的刪除(或刪除標記)記錄。

  • 單擊「保存」時,首先檢查數據庫中沒有記錄更改,如果沒有,則將臨時表中的更改保存到數據庫中。如果他們改變了,你可能要提醒用戶。

  • 單擊「取消」時,您只需退出並忽略更改。

您可以通過使用數據集來獲得對這種方式的部分支持。閱讀這些!

https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvpds/preface.html#

0
  1. /*************** ******************************************代碼爲刪除當前輸入記錄用戶按取消 按鈕。如果數據已經存在於dtabase中,則顯示else 將分配數據庫中的值。

    ****************************************** *********************************/{mfdtitle.i}/********** **********變量定義 *************************************/

    DEF VAR部分LIKE pt_part NO-UNDO。 DEF VAR m_desc1 LIKE pt_desc1 NO-UNDO。 DEF VAR m_desc2 LIKE pt_desc2 NO-UNDO。 DEF VAR m_can AS LOGICAL NO-UNDO。

    /********************************************* *********************************/

    /*********** ****************框架 ******************************** ************/

    FORM部分COLON 30 m_desc1 COLON 30 m_desc2 COLON 30 m_can COLON 30 WITH FRAME a WIDTH 100 SIDE-LABELS。 SETFRAMELABELS(FRAME a:handle)。

    /********************************************* *********************************/mainloop:用框架更新零件a。

    FOR EACH pt_mstr WHERE pt_domain = global_domain AND pt_part =部 NO-LOCK:ASSIGN m_desc1 = pt_desc1 m_desc2 = pt_desc2。 使用FRAME顯示m_desc1 m_desc2 a。結束。

    如果不可用(pt_mstr)然後執行:UPDATE m_desc1 m_desc2 m_can COLUMN-LABEL 「取消」 WITH框架。

    CREATE pt_mstr。 ASSIGN pt_part = part pt_desc1 = m_desc1 pt_desc2 = m_desc2。結束。

    IF m_can = YES然後執行:UNDO mainloop,RETRY mainloop。結束。 /************************************************ **********/

    1. 列表項
+0

這是答案嗎?它沒有任何意義... – Jensd

+0

而不是m_can你可以使用你的取消按鈕撤消任何你想要通過在你的程序中使用標籤這僅僅是一個例子 –