问题的提出
Oracle产品Developer
2000中包括多种开发工具,其中在具体工作时用得最多的是Forms和Reports。Forms是一个设计表单的工具,利用它可以灵活方便地定义各种表单对象,以简化用户在运行期对相关数据库的操作(查询、插入、删除和更新等);Reports则是一个设计报表的工具,利用它可以按照用户的要求方便地生成报表。
在Oracle应用系统中,大量的具有交互性的功能是由Forms实现的。利用Forms所生成的表单模块可以彼此调用,实现业务流程的控制并完成与数据库有关的复杂操作;而由Reports所设计的报表模块往往当做最底层的功能被表单模块所调用。对于一些Oracle用户来说,独立地用好Forms或Reports是没有问题的,但他们却很少考虑如何使二者有机地结合起来,利用Forms对数据操纵的灵活性,由Forms模块向Reports模块传送大量结构化或非结构化的实时数据,减少(或避免)Reports对数据库的访问,从而高速地生成报表并保证报表数据与表单数据的一致性。本文通过实例介绍一种利用Forms的封装例程RUN_PRODUCT(
)在Forms模块中集成Reports模块的方法,利用该方法可以把Forms和Reports有机地结合起来,减少不必要的操作,提高工作效率。
RUN_PRODUCT例程
在Forms模块中调用Reports模块,最有效的方法是利用Forms的封装例程RUN_PRODUCT()。目前,很多程序开发人员在Forms模块中调用Reports模块时,或者没有采用这一例程,或者虽然采用这一例程但并没有充分利用参数表来传递表单中现成的数据,或者只是利用参数表来传递少量的文本参数(非结构化数据)作为Reports中的查询条件,报表的数据仍然要从数据库中查询得到,这样既增加了数据库服务器的负载,又增加了网络的流量,而且报表生成的速度慢,丧失了数据的实时性与一致性。因此,深入了解并熟练掌握参数表的使用方法便显得非常重要。
在使用RUN_PRODUCT(
)之前要先建立参数表,并向参数表中添加参数。RUN_PRODUCT(
)的使用格式如下:
RUN_PROCDUT(REPORTS,
‘report_name', SYNCHRONOUS, RUNTIME, FILESYSTEM, pl_id,
NULL);
其中各参数含义如下:
●REPORTS:说明被调模块是报表模块;
●report_name:被调模块的完整路径名;
●SYNCHRONOUS