Form_Form Builder的基本语法(概念)

2014-05-21 BaoXinjian In
Capgemini

1. Trigger 

    (1). Override模式:默认模式不再触发高级别事件 

     (2). Before模式:触发完本级别事件后再触发高级别事件 

     (3). After模式:触发高级别事件后再触发本级别事件

2. 常用form trigger 

     (1). Form Level 

         i. per-form: form版本信息 

                     设定第一个windows 

                     切换org 

                     对Global和Parameter参数赋值 

        ii. when-new-form-instance:
定义弹性域 

                     定义folder 

     (2). Block Level 

         i. post-query 

         ii. when-new-record-form

3. Form 对基于View的block进行数据操作

on-lock 

     on-insert 

     on-update 
     on-delete

4. Form Trigger的优先级

(1).先从Item -> Record -> Block
-> Form

(2).如果另外设置Execution
Hierarch属性(override,before,after),则按照设置后的顺序执行。

如果是override的话,则执行完这个级别的触发器,就不往上执行了,

before就是执行完这个级别的触发器后,如果上一个级别也有这个触发器的话,继续去执行,

after就是先去执行上一个级别的触发器,然后再回来执行。

5. 打开Form时的Tigger执行的顺序

  • (1)PRE-FORM

  • (2)PRE-BLOCK(BLOCK级)

  • (3)WHEN-NEW-FORM-INSTANCE

  • (4)WHEN-NEW-BLOCK-INSTANCE

  • (5)WHEN-NEW-RECORD-INSTANCE

  • (6)WHEN-NEW-ITEM-INSTANCE

6. 触发Tigger的Execution
Hierarchy

(1).当一个事件发生的时候,Forms
Engine可一并触发由低到高3个级别(Item、Block、Form)的同名事件,如何触发,由定义低级别的事件时所设置的执行层次决定。

     (2).Execution Hierarchy:

        Override模式,默认模式,不再触发高级别事件

        Before模式,触发完本级别的事件后,再触发高级别事件

        After模式,先触发高级别事件,再回来触发本级别事件

    当然了,如果某一层次我们没定义事件代码,Forms
Engine就跳过该级别,直接进入下一级别。此外,Block中任何Item发生的事件,都可能引发该Block级事件,所以在Block级写本属于Item级的事件,要特别性能问题;Form级事件更有类似问题。

    例子. WHEN-VALIDATE-ITEM例子

    假设:

        1、 Item
XXX的WHEN-VALIDATE-ITEM的代码是“代码1”,模式是“After”;

        2、 Item
XXX所在BlockWHEN-VALIDATE-ITEM的代码是“代码2”,模式是“Override”;

        3、
Form级WHEN-VALIDATE-ITEM的代码是“代码3”。
    事件:发生Item
XXX的WHEN-VALIDATE-ITEM

那么:实际先执行“代码2”,然后执行“代码1”。

7. Form Builder的四种commit方式

(1).commit 

        对form和数据库进行提交. 

        如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准。

(2).commit_form 

        针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交;会触发on-update,如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准。 

     (3).do_key(‘commit_form‘) 

        会首先寻找form下的triggers中的KEY-COMMIT这个trigger,并执行KEY-COMMIT中所写的代码。 

        如果没有KEY-COMMIT这个trigger,则会针对form和代码一起提交。 

        如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准。 

     (4).forms_ddl(‘commit‘); 

        只针对代码中的update,insert,delete语句进行提交,form上面的数据变动不提交.

8. Form 中遍历行

go_block(‘block_name‘); 

     first_record; 

     LOOP 
     
message(:block_name.item); 
      if
:system.last_record  = ‘TRUE‘ then 

          exit; 

       end if; 

      next_record; 

     END LOOP;

9. Compile Form

frmcmp_batch module=xxapinvoice.fmb
userid=apps/apps output_file=$CUX_TOP/forms/ZHS/xxapinvoice.fmx

10. Form 的查询三种方式

(1). 使用:parameter.G_query_find参数;

if
(name_in(‘PO_HEADERS.PO_HEADER_ID‘) is not null) then

          
:parameter.g_query_find := ‘TRUE‘; 

          
app_find.find(‘CUX_PO_HEADERS_ADD_MESSAGE‘); 

            go_block(‘CUX_PO_HEADERS_ADD_MESSAGE‘); 

          
:parameter.G_query_find := ‘FALSE‘; 

         else

          
FND_MESSAGE.DEBUG(‘请先保存订单头‘); 

        end if;

在CUX_PO_HEADERS_ADD_MESSAGE的PRE-BLOCK中处理

COPY(name_in(‘PO_HEADERS.PO_HEADER_ID‘),‘CUX_PO_HEADERS_ADD_MESSAGE.PO_HEADER_ID‘);

(2). 使用Default_where属性处理 

        declare 

          lv_default
varchar2(2000); 

         begin 

           lv_default:=‘.....‘; 

           go_block(‘CUX_PO_HEADERS_ADD_MESSAGE‘); 

         
set_block_property(‘CUX_PO_HEADERS_ADD_MESSAGE‘,DEFAULT_WHERE,lv_default); 

          execute_query; 

         end;

(3).
用app_find.query_range()来处理: 

        begin 

           .... 

            app_find.query_range(:find_date_from, 

                               
:find_date_to, 

                               
‘CUX_PO_HEADERS_ADD_MESSAGE.REATE_DATE‘); 

            :parameter.q_query_find:=‘false‘; 

         end;

(4). LOV查询,选择LOV值后自动查询Block,如选择Invoice
Num后自动查询: 
        a.
创建一个Paramter参数<invoice_id>
       
b. 创建LOV, 并将返回的值付给:Parameter.Invoice_id 

             SELECT
invoice_id, invoice_number, description FROM bxj_invoices_all 

         c. 添加Block层级的Trigger<query_find> 

             app_find.query_find(‘q_invoices‘); 

         d. 添加Block层级Trigger<pre_query> 

             IF
:parameter.g_query_find = ‘true‘ THEN 

                 :invoice_header.invoice_id
= :paramter.invoice_id 

                 :paramter.g_query_find
= ‘true‘ 

             END
IF;

11. Form 建立表时常用栏位

(1). 1个表关键字ID,通常与表名一致,并用Sequence为每条记录获得一个唯一值。

     (2). 1个组织ID,根据不同的开发选用不同层次的组织ID,这里的销售订单跑在OU层,所以基表命名为_ALL表,并创建一个过滤组织的View作为“基表”。

     (3). 5个Who字段,记录由谁在何时创建,并由谁在何时修改,登录ID是多少。

     (4). 4个请求字段,处理的请求ID、请求日期、并发程序ID及其应用ID,如果有的话。

     (5). 16个描述性弹性域字段,1个上下文字段,15个弹性域字段。

Thanks and Regards

Form_Form Builder的基本语法(概念),布布扣,bubuko.com

时间: 2024-10-23 10:04:58

Form_Form Builder的基本语法(概念)的相关文章

Report_Report Builder的一些基本概念(概念)

2014-05-31 BaoXinjian In Capgemini 1. Repot 对象 (1).数据模型对象 查询.组.列.链接.用户参数 (2).布局对象 重复帧.帧.领域.样板.锚. (3).参数表单对象 参数.字段.样板 (4).PLSQL对象程序单元 (5).触发器 (6).外部的Library库 2. Report Styles Tabular Report: 基本的类型报告,没列对应于从数据库中选择的一个列 Group Above Reports: Group Left Rep

【Python笔记】Python的几个高级语法概念浅析:lambda表达式 &amp;&amp; 闭包 &amp;&amp; 装饰器

本文主要记录自己对几个高级语法概念的理解:匿名函数.lambda表达式.闭包.装饰器. 这几个概念并非Python特有,但本文只限于用Python做说明. 1. 匿名函数 匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合: 1) 作为参数传给高阶函数(higher-order function ),如python中的built-in函数filter/map/reduce都是典型的

Form_Form Builder国际化多语言开发(案例)

http://oracleseeker.com/2008/09/28/data-translation-in-ebs-forms-breifing/

Form_Form Builder Export导出为Excel(案例)

2014-01-09 Created By BaoXinjian /* Formatted on 2015/1/13 11:04:15 (QP5 v5.115.810.9015) */ DECLARE --以上五个变量照搬即可 URL VARCHAR2 (2000); DB_FILE NUMBER; WEB_SERVER_PREFIX VARCHAR2 (255); RES BOOLEAN; MIME_TYPE VARCHAR2 (255); L_ORGANZIATION_ID NUMBER;

Form_Form Builder编译Fmb/Library/Menu方式总结(汇总)

2014-12-27 Created By 鲍新建 1. Compiling Form 1. R12 Version frmcmp.sh module=XXAPINVOICE.fmb userid=apps/apps@prod module_type=form compile_all=special (Batch Mode) frmcmp_batch module=XXAPINVOICE.fmb userid=apps/apps@prod output_file=XXAPINVOICE.fmx

c++builder XE7 新语法

Non-static data member initializers 非静态成员变量初始化变得简单 As a simple example, class A { public: int a = 7; }; would be equivalent to class A { public: A() : a(7) {} }; http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htmC++11 Features Supporte

C和OC的基础语法(易混淆的概念知识)

List 0. 深复制与浅复制, NSObject万能指针.id指针.instancetype区别,单例import.include.@class的区别 strong 与 weak 区别 #define  和  typedef的区别, static 与  extern 区别,@required与@optional 区 别,@private.@protected .@public.@package区别 变量的命名规则以及规范(4规则,2规范) 数据类型转换 printf与scanf,自增自减,逻辑

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

基本的语法

2 基本的语法 在学习Python其它知识之前,先理解几个基本语法概念,这样才可以理解它的代码是怎么样排列组合的,否则编辑出来的文本文件并不能叫做程序,因为Python的运行环境并不能对它进行解释执行,没有正确的结果输出. 2.1 大小写区分 在Python程序中,对于每一个变量的名称都是大小写区分的,比如My和my是两个不同的变量. 2.2 空格和制表符 在编写程序时,都需要对程序进行排版,否则看起来不清楚,不明白,不容易理解.但在Python里,排版不仅仅是为了好看,还当作一种语法来看待.这