Form_Form Builder开发基于视图页面和自动代码生成包(案例)

 2014-01-06 Created By BaoXinjian

一、摘要


Oracle EBS二次开发中,由于功能要求复杂的缘故和数据库设计的要求,基于表的Form开发并不多见,为了能够更好的利用Form的特性,

需要开发基于视图的表单,开发基于视图的表单和基于表的表单实质并没有区别,

只是基于视图的表单中需要开发人员来明确编写增、删、改、锁的程序逻辑,而基于表的表单自动帮助完成这些功能。

1. Oracle Form开发的两种模式

(1). 基于Database Table开发

(2). 基于Database View开发

2. 基于视图的Form需要引入4个块级别的触发器:

(1).ON-INSERT 编写插入数据的SQL语句或程序逻辑

(2).ON-UPDATE 编写更新数据的SQL语句或程序逻辑

(3).ON-DELETE 编写删除数据的SQL语句或程序逻辑

(4).ON-LOCK 编写锁定记录的程序逻辑

针对上面的增删改的常用功能,可以引用Hand技术的大侠们提供的PLSQL包生产代码 HAND_PLSQL_AUTOCREATE

 

二、HAND_PLSQL_AUTOCREATE


1. procedure - regist_table

2. procedure - form_view_iud

3. procedure - table_handle_pkg

 

三、案例


1. 打开包hand_plsql_autocreate

2. 视图:form_view_iud

3. 输入4个参数:

数据块的名称

数据库对应数据库视图对应的基表

据库表的所有者

数据库表的主键

4. 执行,查看运行结果:

到form中建包:包名:数据块名称+_PRIVATE

5. 添加块触发器:

on-insert : 数据块名称+_PRIVATE.insert_row

on-update : 数据块名称+_PRIVATE.update_row

on-lock : 数据块名称+_PRIVATE.lock_row

on-delete : 数据块名称+_PRIVATE.delete_row --若数据块不允许删除数据,则可以省略此触发器

6. 调用方式

7. 复制代码至Package中,建立增删改锁程序

CREATE OR REPLACE PACKAGE cux_order_headers_pkg AS

  ** PROCEDURE:   insert_row()
  PROCEDURE insert_row();

  ** PROCEDURE:   lock_row()
  PROCEDURE lock_row();

  ** PROCEDURE:   update_row()
  PROCEDURE update_row();

  ** PROCEDURE:   delete_row()
  PROCEDURE delete_row();

END;

8. 添加Form Trigger中调用insert/update/lock/delete procedurer

 

Thanks and Regards

转载:张礼军/黄建华大侠 - http://oracleseeker.com/2009/09/28/view_based_form_development_for_oracle_ebs/

转载:百度文库 - http://wenku.baidu.com/

转载于:https://www.cnblogs.com/eastsea/p/4194697.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Windows Forms 应用程序中,`Form_Load` 事件是在窗体加载完成后触发的,即窗体的构造函数执行完毕并且窗体已经准备好显示之后。如果你在 `Form_Load` 事件中使用了异步操作(例如 `Task`),可能会导致代码不执行的问题。 这是因为在 `Form_Load` 事件中使用异步操作时,主线程可能会在异步操作还未完成之前继续执行下面的代码,导致异步操作的代码不被执行。 解决这个问题的一种方法是使用 `async` 和 `await` 关键字来等待异步操作完成。你可以将异步操作放在一个单独的方法中,并在 `Form_Load` 事件处理程序中使用 `await` 等待异步方法完成。 下面是一个示例代码: ```csharp private async void Form_Load(object sender, EventArgs e) { await DoAsyncTask(); // 在异步任务完成后执行的代码 } private async Task DoAsyncTask() { // 异步任务的代码 await Task.Delay(1000); // 示例异步操作,延迟1秒 // 异步任务完成后的代码 } ``` 在这个示例中,`DoAsyncTask` 方法是一个异步方法,它执行异步任务并等待一段时间(通过 `Task.Delay` 模拟)。在 `Form_Load` 事件处理程序中,我们使用 `await` 关键字等待 `DoAsyncTask` 方法完成。这样,当异步任务完成后,才会继续执行 `Form_Load` 事件处理程序中的剩余代码。 确保在 `Form_Load` 事件处理程序中使用 `async` 关键字,并返回类型为 `void` 或 `Task`。同时,确保在异步方法前面加上 `await` 关键字以等待异步操作完成。这样你就可以在 `Form_Load` 事件中正确地执行异步操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值