ORACLE EBS FORM二次开发整理.docx
ORACLE EBS FORM二次开发整理一、开始开发标准FORM 1. 输出不必要的BLOCKNAME,DETAILBLOCK。 2. 修改触发器:PRE-FORM FND_STANDARD.FORM_INFO(版本号,名称,模块,日期,作者); APP_WINDOW.SET_WINDOW_POSITIN(第一个窗口名称,FIRST_WINDOW); FND_ORG.CHOOSE_ORG;选择组织 APP_WINDOW.SET_TITLE(窗体名称,:global.org_code); 3. 修改程序单元:app_customer:close_window 4. 编译 f60gen module=/porcli/applmgr/1159/au/11.5.0/forms/ZHS/IAQTEST01.fmb userid=apps/simple4u output_file=/porcli/applmgr/1159/inv/11.5.0/forms/ZHS/IAQTEST01.fmx module_type=form batch=no compile_all=yes f60gen <Form Name> apps/<apps password> pre_insert, pre_update中加入代码:fnd_standard.set_who 二、QUERY FIND 制作 一. 把APPSTAND 的QUERY FIND 对象组拉到 开发的FORM上,选择子类。 二. 在目的数据块的添加QUERY FIND ,然后修改代码 app_find.query_find (block_window VARCHAR2, -目的数据块 find_window VARCHAR2, -查询窗口 find_block VARCHAR2) -查询数据块 4在QUERY FIND里面添加文本项等查询内容。 3在目的数据块添加PRE-QUERY(BLOCK LEVEL),添加代码如下: IF :parameter.G_query_find = 'TRUE' THEN APP_FIND.QUERY_RANGE(:QUERY_FIND.CDATE_FROM, :QUERY_FIND.CDATE_TO, 'MAIN.CREATION_DATE'); APP_FIND.QUERY_RANGE(:QUERY_FIND.ITEM_FROM, :QUERY_FIND.ITEM_TO, 'MAIN.SEGMENT1'); APP_FIND.QUERY_RANGE(:QUERY_FIND.DESC_FROM, :QUERY_FIND.DESC_TO, 'MAIN.DESCRIPTION'); :parameter.G_query_find := 'FALSE' END IF; 三、FOLDER 制作 1. 添加附加程序库: APPFLDR.pll. 2. 把APPSTAND 的STANDARD FOLDER 对象组拉到 开发的FORM上,选择子类。 3. 在目的画布上画一个堆叠画布,之类信息选择CANVAS_STACKED。 4. 创建一个数据块,作为创建数据块的FOLDER使用,子类信息选择BLOCK。 5. 把需要放到FOLDER的数据项放到堆叠画布上,把这些数据项的提示全部去掉,然后给每一个数据项创建一个提示,提示用显示项做,子类信息选择FOLDER_PROMPT_MULTIROW,显示项名称和对应的数据项名称必须相同。 6. 创建三个按钮,名称分别是ORDER_BY1,ORDER_BY2,ORDER_BY3,之类信息选择之类信息选择FOLDER_ORDER_BY,把这三个按钮放在堆叠画布上。 7. 在原来画布上创建一个FOLDER_OPEN按钮,之类信息选择FOLDER_OPEN。 8. 在原来画布上创建一个FOLDER_TITLE显示项,之类信息选择DYNAMIC_TITLE。 9. 在新建的数据块上创建一个FOLDER_DUMMY,之类信息选择FOLDER_DUMMY。 10. FOLDER_ACTION触发器的代码修改,修改如下: -message('You must modify the FOLDER_ACTION trigger in your form!'); app_folder.event(:global.folder_action); 11. 修改WHEN-NEW-FORM-INSTANCE代码,修改如下: app_folder.define_folder_block app_folder.event('INSTANTIATE'); 12. 把APPSTAND的SAMPLE_FOLDER数据块的TRIGGER全部靠到原来数据库上。 (添加块的trigger。新增Pre-Query、Post-Query、Key-Prev-Item、Key-Next-Item、Key-ExeQry 、 Key-EntQry、When-New-Record-Instance、Post-Block、Pre-Block,When-New-Block-Instance, Key-Prvrec,Key-Nxtrec, Key-Clrblk, Key-Clrrec, Query_Find以上Trigger均直接 引用标准Standard Trigger ,如:app_folder.event('KEY-PREV-ITEM'); ) 四、DATE的使用 1. ITEM的LOV属性选择ENABLE_LAMP_LIST 2. LOV for Validation属性选择false 3. 增加Item级trigger:key_listvalue calendar.show; 4. 并注意时间的长度格式 五、FND_ORG.CHOOSE_ORG的使用 注:FND_ORG.CHOOSE_ORG 需要创建的参数: CHART_OF_ACCOUNTS_ID(Number) ORG_NAME(Char) ORG_CODE(Char) ORG_ID(Number) 六、说明性弹性域使用 1. 注册table以及column 利用ad_dd package begin ad_dd.register_table(p_appl_short_name=>'CUS' , p_tab_name => 'actuant_task_lists_all', p_tab_type => 'T' ); end; begin ad_dd.register_column(p_appl_short_name =>'CUS' , p_tab_name => 'actuant_task_lists_all', p_col_name =>'ATTRIBUTE9' , p_col_seq => 9, p_col_type =>'VARCHAR2' , p_col_width =>250 , p_nullable => 'Y', p_translate => 'N'); end; 2. Application中Flex Table的定义 Application Developer GUIàFlexfieldàDescriptiveàRegister 3. 增加Item 属性继承text_item_desc_flex,并显示于canvas上 4. 增加一些标准trigger FORM LEVEL a.定义flex的trigger when_new_form_instance FND_DESCR_FLEX.DEFINE(BLOCK=>'ACTUANT_TASK_LISTS_ALL', FIELD=>'DESC_FLEX', APPL_SHORT_NAME =>'CUS', DESC_FLEX_NAME =>'Actuant Header Flex'); b. PREQUERY FND_FLEX.EVENT(PRE-QUERY); c. POSTQUERY FND_FLEX.EVENT(POST-QUERY); d. PREINSERT FND_FLEX.EVENT(PRE-INSERT); e. PREUPDATE FND_FLEX.EVENT(PRE-UPDATE); f. WHENVALIDATERECORD FND_FLEX.EVENT(WHEN-VALIDATE-RECORD); g. WHENNEWITEMINSTANCE FND_FLEX.EVENT(WHEN-NEW-ITEM-INSTANCE); 5. 弹性栏位的开启和编译 七、关键性弹性域使用 1. 添加代码,ID,描述3个项,继承TEXT_ITEM子类 2. 增加一些标准trigger FORM LEVEL a.定义flex的trigger when_new_form_instance fnd_key_flex.define( BLOCK => 'CONTRACTS', field => 'SUB_CODE', id => 'SUB_ID', description => 'SUB_DESC', appl_short_name => 'SQLGL', code => 'GL#', num => nvl(to_number(fnd_profile.VALUE('MFG_CHART_OF_ACCOUNTS_ID'), -1), -STRUCTURE Number required => 'N', validate => 'FULL', usedbflds => 'N'); b. PREQUERY FND_FLEX.EVENT(PRE-QUERY); c. POSTQUERY FND_FLEX.EVENT(POST-QUERY); d. PREINSERT FND_FLEX.EVENT(PRE-INSERT); e. PREUPDATE FND_FLEX.EVENT(PRE-UPDATE); f. WHENVALIDATERECORD FND_FLEX.EVENT(WHEN-VALIDATE-RECORD); g. WHENNEWITEMINSTANCE FND_FLEX.EVENT(WHEN-NEW-ITEM-INSTANCE); 3. 弹性栏位的开启和编译 八、Special菜单的制作 1. 增加一个User_Named的trigger,并改名SPECIALn(1<=n<=15) 2. 在PREFORM中调用app_special.instantiate 来注册菜单项 app_special.instantiate('SPECIAL1', 'Approve', '', FALSE); parameter2: Special上显示的字,可以其他方式得到 3. 在PRE-BLOCK 或PRE-RECORD 中调用app_special.enable 启 用或屏蔽菜单项,或者其他trigger: app_special.enable('SPECIAL1', property_on); 4. 在specialn的trigger里面写要得代码 请求日期INV_SRS_DATE_STANDARD :$PROFILES$.GL_SET_OF_BKS_ID 科目GL_SRS_LEDGER_FLEXFIELD