如何编写取消按钮的代码以撤消/回滚添加和更新正在进行的行4gl

时间:2016-09-26 07:02:22

标签: progress-4gl openedge

我编写了一个简单的代码来搜索数据库中的某些数据并将其显示在浏览器中(br1),它包含以下布局screenshot

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.

我已经编写了保存更新的代码并添加了保存按钮。

现在当按下取消按钮时,我需要在添加/更新完成之前撤消/回滚数据到原始值。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

我认为你需要重新考虑你的设计!

"撤消"意味着事务处于打开状态并且特定事务将被回滚。例如,您可以通过在事务中封装整个GUI来实现此目的,但这是不好的做法。如果有人离开会话,它将提供长事务,锁定问题,双文件增长和潜在崩溃。不是一个好主意 - 你想让你的交易变小!

您需要研究更基于服务的方法。例如:

  • 当界面加载时,您将感兴趣的记录加载到临时表中。

  • 点击"添加," "更新","删除"等你对这些记录进行了更改。 "添加"在临时表中创建一条新记录,"更新"更改记录并删除临时表中的删除(或删除标记)记录。

  • 点击"保存"首先检查数据库中是否没有更改记录,如果不是,则将临时表中的更改保存到数据库中。如果它们被更改,您可能需要提醒用户。

  • 点击"取消"你只需退出并忽略这些变化。

通过使用数据集,您可以获得对此方式的部分支持。阅读那些!

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

答案 1 :(得分:0)

  1. / ************* ************************************用户按取消时删除当前输入记录的代码 按钮。如果数据已经存在于dtabase中,则显示其他 分配数据库中的值。

    *************** ******************************** / {mfdtitle.i} / *********** ********* VARIABLES定义 *************** /

    DEF VAR part 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。

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

    / *************************** FRAME *************** /

    FORM FORM COLON 30 m_desc1 COLON 30 m_desc2 COLON 30 m_can COLON 30 框架宽100个标签。 SETFRAMELABELS(FRAME a:handle)。

    / ********************************************** ******************************** / mainloop:UPDATE部分与框架a。

    FOR EACH pt_mstr WHERE pt_domain = global_domain AND pt_part = part NO-LOCK:ASSIGN       m_desc1 = pt_desc1       m_desc2 = pt_desc2。       显示m_desc1 m_desc2 WITH FRAME a。 END。

    如果不可用(pt_mstr)那么:更新       m_desc1       m_desc2       m_can COLUMN-LABEL" CANCEL" WITH FRAME a。

    创建pt_mstr。       分配          pt_part = part          pt_desc1 = m_desc1          pt_desc2 = m_desc2。端。

    如果m_can = YES则执行:UNDO mainloop,RETRY mainloop。结束。 / ******************* ********* /

    1. 列表项