FORM开发基本内容整理Word格式.docx
《FORM开发基本内容整理Word格式.docx》由会员分享,可在线阅读,更多相关《FORM开发基本内容整理Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
FND_ORG.CHOOSE_ORG;
五、设置WINDOW的TITLE
1.根据把ChooseORG加在FORM上还是BLOCK上定将以下语句写在其中一个触发器中,WHEN-NEW-FORM-INSTANCE或者WHEN-NEW-BLOCK-INSTANCE:
APP_WINDOW.SET_TITLE('
RESULT'
:
PARAMETER.ORG_CODE);
或者:
SET_WINDOW_PROPERTY(window_name,title,'
你要写的标题'
六、记录指示器
1.新增ITEM,设置ITEM的属性:
子类信息:
设成DRILLDOWN_RECORD_INDICATOR,数据库项:
否.
七、客制化菜单
1.增加一个自定义Form级的触发器(SPECIAL11)
--名字必须定义为“SPECIAL+数字”,否则会报错。
并且数字的大小决定了菜单出现的先后顺序。
数字还有更大作用就是决定了,自定义菜单选项放在哪个主菜单下。
SPECIAL1—SPECIAL15在“工具”主菜单下。
SPECIAL16—SPECIAL30在“报表”主菜单下。
SPECIAL31—SPECIAL45在“活动”主菜单下。
2.在Form级触发器WHEN-NEW-FORM-INSTANCE中添加如下代码进行调用:
APP_SPECIAL.INSTANTIATE('
菜单触发器名'
菜单显示名称'
'
TRUE,'
LINE'
--可根据不同数据块,实现客制化菜单是否可用,语句:
app_special.enable('
SPECIAL11'
property_off);
八、客制化右键菜单
1.在FROM级增加自定义触发器(名字规则为:
POPUP+N)
2.在右键菜单所在的ITEM或BLOCK的“PRE-POPUP-MENU”触发器上初始化菜单,增加代码如下:
APP_POPUP.INSTANTIATE('
POPUP10'
TRUE,'
POPUP3'
FALSE,NULL);
九、实现手电筒查找的功能
1.打开标准FORM---APPSTAND.fmb。
将对象组中的QUERY_FIND拖至待开发的FORM中。
继承为子类。
将FORM的第一个导航块及控制台窗口设成QUERY_FIND。
2.打开QUERY_FIND画布,改写“新建”、“查找”两个按钮WHEN-BUTTON-PRESS之中的代码:
NEW代码:
APP_FIND.NEW('
查询的数据块名'
FIND代码:
:
PARAMETER.G_QUERY_FIND:
='
TRUE'
;
APP_FIND.FIND('
FALSE'
3.设置QUERY_FIND数据块的“前一导航数据块”为要实现询查功能的数据块。
4.修改QUERY_FIND数据块KEY-NXTBLK触发器代码如下:
APP_FIND.FIND('
5.修改QUERY_FIND窗口的标题及尺寸,并在QUERY_FIND画布上创建要查找的条件ITEM。
6.在要实现查询的数据块,创建PRE-QUERY触发器,将各查询条件的值赋给块上的item,如下:
If:
parameter.g_query_find='
then
APP_FIND.QUERY_RANGE(:
query_find.dept,:
query_find.dept,'
test_livia.test_dept'
APP_FIND.QUERY_RANGE(:
query_find.in_date_from,:
query_find.in_date_to,'
test_livia.test_indate'
endif;
--注:
APP_FIND.QUERY_RANGE参数前两个是QUERY_FIND中的item(主要用于范围参数form/to),后一个是查询块中的item。
7.在要实现查询的数据块,再创建QUERY_FIND触发器,增加代码如下:
APP_FIND.QUERY_FIND('
QUERY_FIND'
一十、文件夹功能(注意每个对象都要设子类信息)
1.完成普通界面的各个对象设置;
2.在同一窗口打开标准的Form和我们自己客制的Form,并且选择APPSTAND.FMB的ObjectGroupsSTANDARD_FOLDER然后用鼠标拖动至我们自己的Form的ObjectGroups,继承为子类。
不要关闭APPSTAND.FMB。
3.做完上面的步骤后,检查一下Attachedlibraries里面有没有APPFLDR。
如果没有,我们需要从resource中手工添加进来。
4.增加StackedCanvas‘FOLDER_STACK’这一步是必须的,而且你期望实现Folder拖动功能的那些Item都是放在这个Canvas里面,这个StackedCanvas又是放在前面我们建立的正常主Canvas上面。
5.创建控制块MY_FOLDER_PROMPT,设置块的属性(子类信息:
block;
数据库数据块:
否);
6.在控制块新增ITEM,即要在stacked-canvas上实现拖动的ITEM的列名。
设置item属性(对象类型:
显示项;
FOLDER_PROMPT_MULTIROW;
默认值:
即显示的列名)
7.在控制块增加相关的item:
Item
Property
Value
ORDER_BY1
ORDER_BY2
ORDER_BY3
ItemType
PushButton
SubclassInformation
FOLDER_ORDERBY
Canvas
MY_FOLDER
X/Yposition、Width、Height
0(此四项0是这是这个Item不需要显示出来,是因为目前我们不需要利用几个Button.)
FOLDER_OPEN
TriggerWHEN-BUTTON_PRESSED
copy('
OPEN'
global.folder_action'
execute_trigger('
folder_action'
FOLDER_TITLE
DisplayItem
DYNAMICTITLE
FOLDER_DUMMY
TextItem
TOOLBAR
8.增加FORM级和BLOCK级的相关trigger。
Level
Trigger
Event
Form
FOLDER_ACTION
app_folder.event(:
global.folder_action);
WHEN-NEW-FORM-INSTANCE
app_folder.define_folder_block
('
MY_FOLDER'
--'
ObjectName'
(一般是该form的名称,有多个文件夹时,在form名称后加下划线接01,如:
MY_FOLDER_01)
'
folder_block'
MY_FOLDER_PROMPT'
prompt_block'
FOLDER_STACK'
stacked_canvas'
window'
NULL--'
disabledfunctions'
);
/*有多个文件夹时,在每个app_folder.define_folder_block语句后面加上下面的一行代码:
app_folder.event('
INSTANTIATE'
*/
Block
PRE-BLOCK
PRE-BLOCK'
POST-BLOCK
POST-BLOCK'
WHEN-NEW-BLOCK-INSTANCE
WHEN-NEW-BLOCK-INSTANCE'
PRE-QUERY
PRE-QUERY'
KEY-EXEQRY
KEY-EXEQRY'
KEY-NEXT-ITEM
KEY-NEXT-ITEM'
KEY-PREV-ITEM
KEY-PREV-ITEM'
备注
最简单的方式是直接把标准Form‘APPSTAND.fmb’中的Block‘SAMPLE_FOLDER’中的各个Triger复制过来
一十一、说明性弹性域
1.创建数据表:
使用说明性弹性域的数据表,必须含有ATTRIBUTE_CATEGORY及若干ATTRIBUT字段。
ATTRIBUTE_CATEGORY字段:
指弹性域的CONTEXT字段。
ATTRIBUT字段:
指各弹性栏位实际使用的字段。
2.注册弹性域表
register_table(p_appl_short_nameinvarchar2,
p_tab_nameinvarchar2,
p_tab_typeinvarchar2,
p_next_extentinnumberdefault512,
p_pct_freeinnumberdefault10,
p_pct_usedinnumberdefault70);
3.注册弹性域列
register_column(p_appl_short_nameinvarchar2,
p_tab_nameinvarchar2,
p_col_nameinvarchar2,
p_col_seqinnumber,
p_col_typeinvarchar2,
p_col_widthinnumber,
p_nullableinvarchar2,
p_translateinvarchar2,
p_precisioninnumberdefaultnull,
p_scaleinnumberdefaultnull);
4.注册弹性域列,操作路径:
应用开发员=>
弹性域=>
说明性=>
注册。
5.注册弹性域段,操作路径:
段(注意global是共有栏位)。
6.在FORM中启用说明性弹性域:
首先,修改FORM级的一些触发器;
●POST-FORM:
APP_STANDARD.EVENT('
POST-FORM'
●PRE-QUERY:
FND_FLEX.EVENT('
●POST-QUERY:
POST-QUERY'
●PRE-INSERT:
PRE-INSERT'
●PRE-UPDATE:
PRE-UPDATE'
●WHEN-VALIDATE-RECORD:
WHEN-VALIDATE-RECORD'
●WHEN-NEW-FORM-INSTANCE:
fnd_descr_flex.define(BLOCK=>
<
BLOCK_NAME>
FIELD=>
DISPLAYFIELDNAME>
APPL_SHORT_NAME=>
APPL_SHORT_NAME>
DESC_FLEX_NAME=>
DESC_FLEX_NAME>
7.然后在需要使用弹性域的BLOCK增加弹性域的item,设置item属性;
(子类信息:
TEXT_ITEM_DESC_FLEX,数据库项:
否)。
设置DESC_FLEX项的以下触发器:
●WHEN-VALIDATE-ITEM:
FND_FLEX.EVENT('
WHEN-VALIDATE-ITEM'
●WHEN-NEW-ITEM-INSTANCE:
WHEN-NEW-ITEM-INSTANCE'
●KEY–EDIT:
APP_STANDARD.EVENT('
KEY-EDIT'
●KEY–LISTVAL:
KEY-LISTVAL'
一十二、附件功能
1.注册表和列
2.定义单据实体
3.定义单据类型:
●短文本类型,存放表:
FND_DOCUMENTS_SHORT_TEXT
●长文本类型,存放表:
FND_DOCUMENTS_LONG_TEXT
●Web页类型,存放表:
FND_DOCUMENTS_TL
●文件类型,存放表:
FND_LOBS
4.定义附件功能
一十三、表单个性化
1.操作菜单路径:
Help=>
diagnostics=>
CustomCode=>
personalize
一十四、LOV及联动
多个item调用同一个LOV时,删除联动:
可以调用APP_FIELD.clear_dependent_fields和APP_FIELD.set_dependent_field来将两个(或多个)Item建立关联,当一个为空时,另一个不可录入,反正,可录入,且父ItemField变化时,子Fields清空。
----------------------------------------------------------------------------------------------------------------------------------
APP_FIELD.clear_dependent_fields(
master_fieldVARCHAR2,
field1VARCHAR2,
field2VARCHAR2DEFAULTNULL,
field3VARCHAR2DEFAULTNULL,
field4VARCHAR2DEFAULTNULL,
field5VARCHAR2DEFAULTNULL,
field6VARCHAR2DEFAULTNULL,
field7VARCHAR2DEFAULTNULL,
field8VARCHAR2DEFAULTNULL,
field9VARCHAR2DEFAULTNULL,
field10VARCHAR2DEFAULTNULL)
实现:
如果master_field为空,则清空后续所有fieldn.
一十五、常用接口表或API
模块
业务表
标准请求
接口表
公开发布API
PO采购单
PO_VENDORS、PO_HEADERS_ALL、
PO_LINES_ALL、PO_LINE_LOCATIONS_ALL、
PO_DISTRIBUTIONS_ALL、PO_REQUISITION_HEADERS_ALL、
PO_REQUISITION_LINES_ALL、
PO_REQ_DISTRIBUTIONS_ALL
ImportStandardPurchaseOrders、
ImportPriceCatalogs
po_headers_interface
po_lines_interface
po_distributions_interface
错误:
po_interface_errors
po_change_api1_s.record_acceptance
po_change_api1_s.update_po
po_document_control_pub.control_document
OM销售单
OE_ORDER_HEADERS_ALL、OE_ORDER_LINES_ALL、WSH_DELIVERY_ASSIGNMENTS、WSH_DELIVERY_DETAILS
OrderImport
oe_headers_iface_all
oe_lines_iface_all
oe_actions_iface_all
oe_order_pub.process_order
APINVOICE应付发票
AP_INVOICES_ALL、AP_INVOICE_DISTRIBUTIONS_ALL、
AP_PAYMENT_SCHEDULES_ALL
PayablesOpenInterfaceImport
ap_invoices_interface、ap_invoice_lines_interface、
ap_interface_rejections
ARTRANSACTIONS应收发票
RA_CUSTOMER_TRX_ALL、
RA_CUSTOMER_TRX_LINES_ALL、
AR_PAYMENT_SCHEDULES_ALL、
RA_CUST_TRX_LINE_GL_DIST_ALL
AutoinvoiceMasterProgram
ra_interface_lines_all、
ra_interface_salescredits_all、
ra_interface_distributions、
ra_interface_errors_all
AR_INVOICE_API_PUB
BOM物料清单
MTL_SYSTEM_ITEMS_B、
BOM_INVENTORY_COMPONENTS、
BOM_OPERATION_SEQUENCES
BillandRoutingInterface
bom_bill_of_mtls_interface、
bom_inventory_comps_interface、
mtl_interface_errors
bom_bo_pub.process_bom
BOMROUTINGS工艺路线
BOM_DEPARTMENTS、BOM_RESOURCES、
BOM_DEPARTMENT_RESOURCES
bom_op_routings_interface、
bom_op_sequences_interface、
bom_op_resources_interface、
bom_rtg_pub.process_rtg
INVItems物料
MTL_SYSTEM_ITEMS_B、MTL_SYSTEM_ITEMS_TL、
MTL_MATERIAL_TRANSACTIONS、
MTL_SECONDARY_INVENTORIES、
MTL_ITEM_SUB_INVENTORIES、
MTL_ITEM_LOCATIONS
ImportItems
mtl_system_items_interface
mtl_item_revisions_interface
inv_item_grp.create_item
INVItemCategories物料类别
MTL_ITEM_CATEGORIES
ItemCategoryAssignmentOpenInterface
mtl_item_categories_interface
inv_item_category_pub
APSuppliers供应商
AP_SUPPLIERS、
AP_SUPPLIER_SITES、
AP_SUPPLIER_CONTACTS
SupplierOpenInterfaceImport
ap_suppliers_int、
ap_supplier_sites_int、
ap_sup_site_contact_int、
ap_po_v