【问题标题】:FRM-40401 no changes to save after WHEN-CREATE-RECORD triggerFRM-40401 在 WHEN-CREATE-RECORD 触发后没有要保存的更改
【发布时间】:2013-12-11 09:11:45
【问题描述】:

我用谷歌搜索了这个,但很遗憾,找不到任何解决方案。

我有一个带有单个块的简单表单(Oracle Forms Builder 10g)。该表单以 Oracle EBS 样式编写,即该块基于一个视图,该视图将基表字段连同 rowid 和 DML 事件(插入、更新等触发器)由表处理程序处理包。

我想添加的功能如下:当用户创建新记录时,表单会自动建议表单中所有字段的值。因此,我创建了一个 WHEN-CREATE-RECORD 触发器来计算字段值并分配它们。所有,除了主键是基于序列并由包处理。

当我创建新记录时一切正常,但当我尝试保存它时,我得到的只是 FRM-40401“没有更改保存”错误,没有任何反应。

我试图追踪错误,似乎表单将记录视为新记录,没有任何更改。即使我尝试将记录状态显式更改为 INSERT,也会发生这种情况。

我已经尝试将默认行为更改为 STANDARD.COMMIT(为此创建了 ON-COMMIT 触发器),但这并没有解决任何问题。

为了记录,我尝试使表单基于表,摆脱表处理程序并将所有 DML 留给 Forms。我仍然得到 FRM-40401。

我不明白出了什么问题,请问有什么想法吗?

【问题讨论】:

    标签: oracle oracleforms


    【解决方案1】:

    when-create-record 触发器完成后,记录状态将重置为 NEW。这通常是有道理的,因为您实际上是在为项目设置默认值,但用户实际上还没有输入任何数据。

    您需要一些东西来标记记录以便在触发器完成后插入 - 通常用户会在他们向记录中输入一些数据时执行此操作。如果您希望用户能够在不更改任何内容的情况下保存记录,您可以在保存按钮中添加一些内容以执行不更改分配,例如

    :MYBLOCK.ANYITEM := :MYBLOCK.ANYITEM;
    

    这会导致记录被标记为插入。

    【讨论】:

    • 好的,现在说得通了。然后,实际上,我的 TIMER 解决方法与您建议的相同。所以,我保留它:-)
    【解决方案2】:

    好的,我暂时使用了经典的 TIMER 解决方法,一切正常:

    PACKAGE body form_timers IS
    
     PROCEDURE CREATE_NEW_RECORD;
    
      procedure do_create(name varchar2) is
            timer_id TIMER;    
        Begin        
          timer_id := CREATE_TIMER(name,1,NO_REPEAT);
        End;
    
      procedure expired is
            expired_timer CHAR(20);
        BEGIN
            expired_timer:=GET_APPLICATION_PROPERTY(TIMER_NAME);
            IF expired_timer='CREATE_NEW_RECORD' THEN
                 CREATE_NEW_RECORD;
    --      ELSIF expired_timer='T2' THEN 
    --          /* handle timer T2 */ NULL;
            ELSE 
                NULL;
            END IF;
        END;
    
     PROCEDURE CREATE_NEW_RECORD IS
        /* create record logic goes here */
        END;
    
    END;
    

    ...但是,我仍然想知道为什么会发生这种行为。

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多