新增form步骤 打开模板TEMPLATE,将其改成自己所要的名称,删除Data Blacks中的BLOCKNAME,DETAILBLOCK,删除Canvases中的BLOCKNAME,删除Windows中的BLOCKNAME,新增自己的Windows,Canvases,DateBlacks,在form级别的PRE-FORM中将Blockname改成自己新增的window,若区分ORG,则将FND_ORG.CHOOSE_ORG;加入BLOCK的上一行,在Program_unit中打开APP_CUSTOM,修改其中的<your first window>为自己的window,在triggers的when_new_item_instance中加入app_window.set_title('<自己的window名称>',:parameter.org_code),将org加入form的title.1.在Form的title上加上Org_code在Form级的WHEN-NEW-FORM-INSTANCE这个trigger中加入app_window.set_title('QUERY_FIND',:parameter.org_code);即可。2.查看弹性栏位数据来源的路径:system administrator-->application-->flexfield-->descriptive-->segment3.初始化view begin dbms_application_info.set_client_info(188); end;对需要user_id才能访问的view,需要先初始化一个合法的user_id进去beginfnd_global.apps_initialize(26872,56536,401);end;4.常用代码 fnd_message.debug('show message'); --show出的提示窗口 raise form_trigger_failure; --配合show message使用,中断Form的执行 在Form open/close的时候对界面的设定 例:在close_window下写入,来控制多window的Form在关闭子窗口时切回到那个block上去 if (wnd = 'QUERY_FIND') then --当query_find这个window关闭的时候 app_window.close_first_window; --关闭第一个window,即为关闭这个window elsif (wnd = 'APPROVER_UPDATE') then --当approve_update这个window关闭时 go_block('QUERY_FIND'); --go_block到query_find这个block上去 end if; 在open_window下写入以下代码,来控制新window打开的方式 if (wnd = 'UPDATE_USER') then --当window UPDATE_USER被打开时 APP_WINDOW.SET_WINDOW_POSITION('UPDATE_USER', 'CASCADE', 'APPROVER_UPDATE'); --设定UPDATE_USER这个window在APPROVER_UPDATE这个window的左上角稍偏下点,具体详见下面的介绍 SET_WINDOW_PROPERTY('UPDATE_USER', VISIBLE, PROPERTY_TRUE); GO_BLOCK('UPDATE_USER'); --指定要显示的block elsif (wnd = 'ACT') then APP_WINDOW.SET_WINDOW_POSITION('ACT', 'CASCADE', 'APPROVER_UPDATE'); SET_WINDOW_PROPERTY('ACT', VISIBLE, PROPERTY_TRUE); GO_BLOCK('ACT'); end if;
app_window.set_window_position详解procedure APP_WINDOW.SET_WINDOW_POSITION( child_window varchar2, style varchar2, parent_window varchar2 default NULL);说明:说明子窗口的显示位置参数:child_window 指定位置的子窗体名称 style 子窗口的定位类型 parent_window 子窗口的上阶窗口名称style:CASCADE 多个窗口从左上向右下排列 RIGHT,BELOW 子窗口在父窗口的右边或者下方,且父窗口不会覆盖子窗口 OVERLAP 子窗口和父窗口重叠,对齐父窗口左边,但向下位移0.3 CENTER 子窗口在父窗口的中间显示 FIRST_WINDOW 显示在toolbar的下方,通常是主窗口
处理查询时候,如果查询界面栏位不下条件,就表示这个栏位为空值方法:在显示记录的block下的KEY-EXEQRY这个trigger下做判断,然后将最终的where条件赋值给这个block的default_where里面去。代码如下declarev_default_where varchar2(400); --定义变量用来存放这个block的初始where条件V_WHERE VARCHAR2(2000); --定义变量用来存放新的where条件beginv_default_where:=get_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE);--获取此block初始的where条件V_WHERE:=v_default_where; --将初始的where条件赋值给V_WHERE这个变量中if v_default_where is null then --当初始条件为空时,并条件的时候不需要加'where','and'之类 if :QUERY_FIND.EMP_CLASS_CODE is null then --如果查询界面的那个栏位为空 V_WHERE:=V_WHERE || ' EMP_CLASS_CODE is null'; --将查询条件并上此栏位is null else V_WHERE:=V_WHERE || ' EMP_CLASS_CODE='||:QUERY_FIND.EMP_CLASS_CODE;--查询界面的栏位有值就用栏位等于的sql查询语句 end if;else --当初始条件不为空,并查询条件时需要加'and' if :QUERY_FIND.EMP_CLASS_CODE is null then V_WHERE:=V_WHERE || ' and EMP_CLASS_CODE is null'; else V_WHERE:=V_WHERE || ' and EMP_CLASS_CODE='||:QUERY_FIND.EMP_CLASS_CODE; end if;end if;set_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE,V_WHERE); --将新的查询条件赋值给这个block的default_where进行查询 clear_record; /*清空,否则Form下次查询的时候会把前一次的条件带入*/EXECUTE_QUERY; --执行查询命令set_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE,v_default_where); --将原默认的default_where值重新恢复回去end;
取消lov的验证set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);常用于界面上的栏位值来源于select ....into...而此栏位又有绑定lov的情况下,防止以查询方式进入界面,没做任何操作就需要保存;或者界面上栏位在Table中只记录id,用name查找时,直接用select name into 栏位。
设置栏位属性值app_item_property.set_property('ACT.NEW_ACT',Required,PROPERTY_TRUE); ACT.NEW_ACT block的栏位 Required 属性名称 PROPERTY_TRUE 属性值
调用block的trigger APP_RECORD.FOR_ALL_RECORDS('ACT_LIST','SELECT_COUNT'); ACT_LIST block名称 SELECT_COUNT trigger名称5.当一个window上有多个canvas的时候,往往会造成某个canvas不显示,解决此方法可用 show_view('canvas')命令,其中canvas为需要显示的canvas名称。 注意:当使用show_view来显示canvas时,焦点会回到之前的canvas上,这样在show canvas_stacked的时候就不会有问题,但在show新打开的window的时候就会造成要显示的window闪一下就跑到之前的window的后面去,解决此问题可以调用 app_custom.open_window('ACT_LIST'); 来show你要的window,其中ACT_LIST为block名称。6.弹出yes or no的询问对话框FND_MESSAGE.SET_STRING('此核流程中已有核人T,是否⑵h除再}u?');v_ques_no := FND_MESSAGE.QUESTION('YES','NO',NULL);if v_ques_no=1 then del_lines(p_head_id); add_lines(p_head_id,p_organization_id); else null;end if;7.单击按钮使得下一个要弹出的界面值清空 go_block('<blockname>'); clear_block(no_validate);8.FND_STANDARD.SET_WHO; 插入建立者,建立日期,最后更新者,最后更新日前,最后登陆人等信息9.清空block中资料 app_find.clear;清除当前block的值,不可用go_block('<blockname>');的方式清除其他的block app_find.clear_detail('<blockname>');清除指定block的值