Form 开发经验技巧

  1. Form中提交并发请求  
APP_STANDARD.APP_VALIDATE(BLOCK_SCOPE);
IF (not FORM_SUCCESS) THEN
  Raise form_trigger_failure ;
END IF;
IF :SYSTEM.FORM_STATUS = 'CHANGED' THEN
  DO_KEY('COMMIT_FORM');
END IF;

  第二个IF语句判断系统状态,如果用户更新了一行记录,之后没有保存提交请求,那么需要在提交之前进行保存,因为可能使用的请求中使用到了该item所对应的后台字段,那么保存这一步就很重要了。

  APP_VALIDATE()解释:代替标准的Form内建确认。This procedure acts similarly to Oracle Forms' built-in
Validate, except that it navigates to the first item that caused the validation failure, and it provides support for the button standard. Use it instead of the Oracle Forms built-in.

  1. 非数据库字段查询处理  

  在Form中在查询的记录不希望某些记录显示出来,例如不需要供应商A被显示出来,假设供应商A是数据库项,可以使用

set_block_property(‘block_name’,DEFAULT_WHERE, ‘VENDOR_NAME <>’ || ‘A’)

但是建议不要使用上述方法,因为Block的Default where一旦被设置了以后,并不是只有本次生效,而是一直生效,也就是当下一次使用Ctrl + F11来进行查询的时候,实际上,查询语句的where条件就一直加入了我们手动加进去的查询语句。所以建议使用app_query.append来添加 复杂的查询语句。我们的重点是对非数据字段的查询,也就是如果供应商为非数据库项,那么如果在查询窗口中刚好对供应商有这个查询条件,该如何去做?

  由于供应商字段为非数据库项,那么只能在post-query中去判断,例如在post-query中写道:

If Vendor_name = ‘A’ then
    Raise form_trigger_failure;
End if;

 那么供应商A将不会被显示出来。由于Post-query是在查询出每条记录时都执行的,所以raise form_trigger_failure并不影响只是阻止了本触发器,但是并不是阻止了所有的。最后要说明的一点是建议还是不要采用这样的方式,因为这是效率最低的判断,如果可以使用数据库项进行查询,就尽量不要使用这个方法。

控制Form为只查询

  在定义Function的时候,如果在参数中加入QUERY_ONLY=YES,那么Form就只能查询,在Form中调用

FND_FUNCTION.EXECUTE( FUNCTION_NAME => ‘XXPOFJCT’,
                      OTHER_PARAMS  => ‘QUERY_ONLY=YES’);  

  那么新加出来的form就是只查询状态。这个QUERY_ONLY参数是系统自带的一个参数,但是实际上,它也是在Form的查询中,进行了对 QUERY_ONLY参数的判断。所以需要特别注意的就是,当使用了这个参数后,客户化的Form在控制块查询时,是需要进行QUERY_ONLY参数判 断的。

if name_in('parameter.query_only') <> 'Y' and :block.item = 'TTTT' then
  set_block_property('block',update_allowed,property_true);
else
  set_block_property('block',update_allowed,property_false);
end if;

 

  对于上例中对块进行控制的语句,如果没有加入对QUERY_ONLY的判断,那么对具有只查询功能的Function来说,QUERY_ONLY这个就等于没有作用了,因为在这里,其他条件可能使得这个Form也是可以进行修改的。

IF :VAR1 IS NULL ...  direct reference
IF NAME_IN ( :VAR1 ) IS NULL ...  indirect reference

  Referencing items indirectly allows you to write more generic(一般的、普通的), reusable code.  By using variables in place of actual item names, you can write a subprogram that can operate on any item whose name has been assigned to the indicated variable.
If you nest the NAME_IN function, Form Builder evaluates the individual NAME_IN functions from the innermost one to the outermost one.

 

  控制Item的属性 

  凡是需要改变item属性,都使用app_item_property.set_property( )代替set_item_property。

假设通过某个item的值来决定另外一个item的属性,例如名为status的item值决定了名为quantity的item是否可以更改,首 先,第一个触发器是POST-QUERY,当查询出记录出,根据status的值来决定quantity,当对某条记录进行更改的时候,需要对该记录进行 重新判断(如果修改的status就可能需要做出改变),所以第二个触发器为ON-UPDATE(或者POST-UPDATE目前找不出区别来),第三个 触发器为WHEN-NEW-RECORD-INSTANCE,当新建记录时,可能Item的默认值已经确定了,那么就需要对其进行判断(这个只是可能,根 据具体事件进行处理)

PACKAGE BODY JOBS_PKG IS
  procedure control_item_property
  is
  begin
    if :JOBS.JOB_STATUS = 'NEW' then
      app_item_property.set_property('JOBS.REQUIRED_QUANTITY',alterable,PROPERTY_ON);
    else
      app_item_property.set_property('JOBS.REQUIRED_QUANTITY',alterable,PROPERTY_OFF);
    end if;
  end control_item_property;
  procedure block_event(event varchar2)
  is
  begin
    if event = 'WHEN-NEW-RECORD-INSTANCE' then
      control_item_property;
    elsif event = 'POST-QUERY' then -- post-insert
      control_item_property;
    elsif event = 'POST-UPDATE' then
      control_item_property;
    else
      app_exception.invalid_argument('JOBS_PKG.BLOCK_EVENT','Event',event);
    end if;
  end block_event;
END JOBS_PKG;

 

Trigger的执行层次

执行层次属性可以指定,当上一级有同样名称的trigger时,当前的trigger代码如何执行。

有以下三种设置:

Override(忽略):本trigger会执行。上一级的同名trigger会被忽略(不执行)。

Before(之前):本trigger会在上一级同名的trigger之前执行。

After(之后):本trigger会在上一级同名的trigger之后执行。

一般来说,WHEN-NEW-BLOCK-INSTANCE,WHEN-NEW-RECORD-INSTANCE,WHEN-NEW-ITEM-INSTANCE,都需要把执行层次设置为before

按钮处理逻辑

点击按钮之前最好先检查一下系统的状态,可能用户在修改了某一些东西后直接点按钮,我们要帮他保存

另外在查询模式下不允许用户点按钮。

app_standard.app_validate(block_scope);
if(not form_success) then
  raise form_trigger_failure;
end if;
if :system.form_status = 'CHANGED' then
  if not app_form.quietcommit then
    raise form_trigger_failure;
  end if;
end if;

 

日历相关

Calendar.show(first_date date):first_date指定日历出现时显示的初始日期,如果不填默认当前日期

Calendar.step(‘name(标识符)’, <low_date>, <high_date>):可以屏蔽一个日期范围,第一个参数为标识名字(唯一,可任意)。<low_date>若为空则默认为无穷小,而<high_date>为空则默认无穷大

Calendar.step(‘WEEKEND’):可以屏蔽周末,即周六周日的日期都不能用

综合的Exp:

需要使得ORD_HOLIDAYS表中的日期都不可用

 

calendar.setup( 'Manafacturing Holidays',
                 null ,
                 null ,
                 'select action_date LOW_DATE, action_date HIGH_DATE'
                 ' from org_holidays where date_type = "HOLIDAY" ');

 

转载于:https://www.cnblogs.com/SanFrans/p/3232428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: EBS Form开发手册是指Oracle E-Business Suite(EBS)中Form开发的详细指南和教程。Oracle EBS是一套集成的企业资源规划(ERP)软件解决方案,它提供了许多标准的应用程序模块,用于不同的业务领域,例如财务、供应链、人力资源等。 Form是EBS中用于开发用户界面的工具之一,它可以创建交互式的数据输入和显示窗体。Form开发手册提供了详细的说明和示例,帮助开发人员理解和使用Form开发工具的各种功能。 在EBS Form开发手册中,你可以学习到如何创建自定义的数据输入和显示窗体,如何利用Form Builder工具进行界面设计和布局,以及如何添加和管理字段、按钮、菜单等控件。手册还解释了各种Form开发的常用概念和技术,例如表单对象、触发器、继承、模块间通信等。 此外,手册还介绍了如何处理Form的验证、处理用户输入、数据保存和查询等操作。它还提供了一些最佳实践和技巧,以帮助开发人员编写高效、可靠和易于维护的Form代码。 总之,EBS Form开发手册是EBS开发人员学习和参考的重要资源。通过学习这份手册,开发人员可以深入了解Form开发工具的使用方法和技巧,从而更好地设计和开发EBS应用程序界面。 ### 回答2: EBS(Elastic Block Store)是亚马逊云计算平台提供的一种云存储服务,EBS Form是用于开发和管理EBS卷的专用工具。EBS Form开发手册为使用EBS Form开发人员提供了详细的操作指南和技术参考。 EBS Form开发手册首先介绍了EBS Form的基本概念和主要特性。它解释了如何使用EBS Form创建、修改和删除EBS卷,描述了EBS卷的各种属性和功能选项,并提供了实际案例和最佳实践,以帮助开发人员更好地理解和应用EBS Form。 手册中还包括了EBS Form的安装配置和环境设置的详细说明。它介绍了EBS Form客户端的安装过程,以及如何配置和连接到云存储服务。开发人员可以按照手册提供的步骤和示例,快速搭建EBS Form开发环境,开始使用EBS Form进行云存储的开发工作。 此外,手册还提供了EBS Form的API文档和开发接口说明,以及与其他云服务的集成方法和建议。开发人员可以通过手册了解如何调用EBS Form的API进行卷的管理和操作,并了解如何将EBS Form与其他云计算服务(如Amazon EC2)进行集成,实现更多复杂的应用场景和业务需求。 综上所述,EBS Form开发手册是一本面向开发人员的指南,它详细介绍了EBS Form的功能和用法,提供了丰富的实例和技术参考,帮助开发人员更好地理解和应用EBS Form。通过熟练使用EBS Form开发人员可以更高效地开发和管理云存储服务,满足不同应用场景的需求。 ### 回答3: ebs form开发手册是一本针对EBS(Enterprise Business Suite)系统的表单开发的指南。EBS是由Oracle开发的一套集成的企业级管理软件,涵盖了各个方面的业务功能,如人力资源管理、财务管理、供应链管理等。 该开发手册提供了详细的指导和说明,帮助开发人员了解和掌握EBS系统中的表单开发。它包含了各个阶段的开发过程,从需求分析、设计、开发、测试到部署和维护。通过遵循这个手册,开发人员可以按照规范的流程正确地开发表单,确保系统的稳定性和可靠性。 在这个开发手册中,开发人员将学习使用EBS系统中的表单开发工具和技术,如Oracle Forms和Oracle PL/SQL。他们将了解如何创建表单界面、定义数据字段、实现业务逻辑、编写触发器和事件等。此外,手册还介绍了与表单开发相关的最佳实践和常用的技巧,帮助开发人员提高开发效率和质量。 EBS表单开发手册还提供了丰富的示例和案例,让开发人员能够更好地理解和应用所学知识。通过实际练习和实践,开发人员可以更好地掌握EBS表单开发技巧和方法,为企业提供定制化的解决方案。 总之,EBS表单开发手册是一本详尽的指南,帮助开发人员了解和掌握EBS系统中的表单开发。通过遵循手册中的指导,开发人员可以正确地开发表单,并提供高质量的解决方案,以满足企业的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值