随笔分类 - Oracle Form开发
摘要:在EBS中手电筒的运用是很平常的事了,但是在写代码的过程中有一句代码::parameter.G_query_find 很是让人朦胧。其实参数:parameter.G_query_find的作用是决定查询范围的一个开关。当:parameter.G_query_find:= 'TRUE'时,系统会根据我们在触发器 pre-query 中所定义的条件去查询。当:parameter.G_query_find:= 'FALSE'时,系统就会跳过查询条件,进而查询出全部记录。理解这个原理就明白手电筒使用过程中的触发器顺序和这个参数的作用。操作 触发器 相关代码 ...
阅读全文
摘要:1. COMMIT_FORM先针对form上面的数据变动进行commit,然后对于代码中的类似DML语句也进行提交;如果form上面的数据变动和代码中的数据变动有冲突,最后以FORM上的为准。适用:一般来在直接修改FORM上的数据,就使用commit_form。2.COMMIT对form和数据库进行提交。如果form上面的数据和代码中的数据变动有冲突,最后以FORM上的为准。适用:一般来在直接使用DML代码修改数据时,就使用commit。3. DO_KEY('COMMIT_FORM')它会首先寻找form下的triggers中的KEY-COMMIT触发器,并执行KEY-COMM
阅读全文
摘要:在客户化Form开发中,经常会遇到需要给表格的记录块添加一个行号,行号不但作为数据行的一个序号,同时经常被作为单击的行标识,具有比较重要的业务意义。这个行号的特点是:新增行时自动生成默认行号:已有的最大行号+1用户可以修改行号为合法的数字:大于0;保证唯一如果用户修改了行号,新增生成的行号必须在用户修改行号的基础上+1实现这样的行号相对比较麻烦,下面描述如何来实现上图中所示的行号功能:在记录块的PRE-QUERY中查询出数据库中已有的最大行号,并将其记录到参数中作为最大的行号,如果单据的头是新建的,那这个参数默认的最大值则为1在行记录的WHEN-CREATE-RECORD中将最大行号的参数值+
阅读全文
摘要: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语句判断系统状态,如果用户更新了一行记录,之后没有保存提交请求,那么需要在提交之前进行保存,因为可能使用的请求中
阅读全文
摘要:Form中某些按钮可能调用了Package对表中某些字段进行更新,但是数据库中字段的修改不会马上反映到form的界面上,所以要进行重新查询。但是用户可能使用了查询窗口进行查询之后然后再点击按钮动作,如果简单的使用execute_query进行查询的话那么就会把原来的查询条件冲掉。所以这里写了一个公用的包进行查询:---- Name: query_block-- Purpose: BLOCK重新查询-- PROCEDURE query_block(p_block_name VARCHAR2) IS l_cursor_block VARCHAR2(50); l_cursor_reco...
阅读全文
摘要:1.客户化FORM中选择库存组织 1.1. 将INVSTAND.fmb中的对象组:INV_PARAMS复制到客户化Form中1.2. 在Form级别触发器PER-FORM触发器中添加:FND_ORG.CHOOSE_ORG代码1.3. 在程序中使用库存组织ID: PARAMETER.ORG_ID 库存组织CODE:PARAMETER.ORG_CODE 库存组织NAME: PARAMETER.ORG_NAME1.4. 将ORG加入FORM的title:在Form级的WEHN-NEW-FORM-INSTANCE触发器中添加 app...
阅读全文
摘要:在Form中在查询的记录不希望某些记录显示出来,例如不需要供应商A被显示出来,假设供应商A是数据库项,可以使用 set_block_property(‘block_name’,DEFAULT_WHERE,‘VENDOR_NAME <>’ || ‘A’) 但是建议不要使用上述方法,因为Block的Default where一旦被设置了以后,并不是只有本次生效,而是一直生效,也就是当下一次使用Ctrl + F11来进行查询的时候,实际上,查询语句的where条件就一直加入了我们手动加进去的查询语句。所以建议使用app_query.append(用法往下看)来添加复杂的查询语句。 我们的
阅读全文
摘要:Oracle FORM就是由一系列的触发器组成的。下面是对FORM中TRIGGER的执行顺序的总结。其中还有很多触发器没有被提到,这是因为程序中没有用到。但是在FORM运行的过程中,这些触发器的执行过程都是设置好了的,没有用到的触发器也一样会经过已经设置好的那个时间段,只是什么动作都没有做罢了。 下面,是常用的的触发器的执行顺序: 1. 当打开FORM时(Run form):(1) PRE-FORM(Form级)(2) WHEN-CREATE-RECORD(Block级) (3) PRE-BLOCK (Block级)(4) WHEN-NEW-FORM-INSTANCE (Form级)...
阅读全文
摘要:Oracle 的ROWID 用来唯一标识表中的一条记录,是这条数据在数据库中存放的物理地址。 一般来说,每一行数据对应的rowid是固定而且唯一的,在这一行数据存入数据库的时候就确定了。 可以利用rowid来查询记录,而且通过rowid查询记录是查询速度最快的查询方法。ROWID只有在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。 ROWID的结构: 有18位,每位使用base-64代码,包括a-z,A-Z,0-9,+,- 共64个字符表示。 A表示0,B表示1,。。。Z表示25,a表示26,。。。z表示51,0表示52,。。9表示61,+表示62,-表示63。R...
阅读全文
摘要:EBS在客户化表结构设计时,会建立5个WHO字段,记录用户信息。也就是: CREATE_BY NUMBER, CREATE_DATE DATE, LAST_UPDATE_BY NUMBER, LAST_UPDATE_DATE DATE, LAST_UPDATE_LOGIN NUMBER 在FORM中使用属性类,WHO字段并不会自动赋值,必须自己在FORM中编写代码来完成这项工作 EBS提供了FND_STANDARD.SET_WHO函数,只需要在FORM的BLOCK级触发器PRE-INSERT、PRE-UPDATE中进行调用即可。
阅读全文
摘要:开发一个Form主要有以下基本的步骤:1.从服务器$AU_TOP/forms/US下载模板文件template.fmb2.打开template.fmb文件,另存为自己的文件名称;修改模板的名称同文件名称一样 打开template.fmb文件时,需注意以下几点: (1) 出现错误信息FRM-18108:加载对象失败。需要确认本地是否已从服务器$AU_TOP/forms/<lang_code>下载Form源文件APPSTAND.fmb。 (2)出现错误信息FRM-10102:不能附加PL/SQL 库。需确认本地是否已从服务器$AU_TOP/resource下载PLL源文件。 (3) 下
阅读全文