ebs form开发总结Word下载.docx

上传人:b****5 文档编号:20513933 上传时间:2023-01-23 格式:DOCX 页数:27 大小:649.45KB
下载 相关 举报
ebs form开发总结Word下载.docx_第1页
第1页 / 共27页
ebs form开发总结Word下载.docx_第2页
第2页 / 共27页
ebs form开发总结Word下载.docx_第3页
第3页 / 共27页
ebs form开发总结Word下载.docx_第4页
第4页 / 共27页
ebs form开发总结Word下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

ebs form开发总结Word下载.docx

《ebs form开发总结Word下载.docx》由会员分享,可在线阅读,更多相关《ebs form开发总结Word下载.docx(27页珍藏版)》请在冰豆网上搜索。

ebs form开发总结Word下载.docx

第一步:

使用datablockwizard创建块

第二步:

ROW_ID项的子类名设置为ROW_ID。

其他需要显示在画布上的项设置子类,另设置显示在STK画布上的属性:

第三步:

将数据块中显示在STK上的项复制到PROMT块中,并设置数据块中的trigger(模板中的FOLDER块有现成的trigger)

PRE-QUERY//POST-QUERY

WHEN-NEW-BLOCK-INSTANCE//WHEN-NEW-RECORD-INSTANCE…

提示项的itemtype为display,子类为FOLDER_PROMT_MULTIROW

第四步:

在when-new-form-instance初始化form。

使用app_folder.define_folder_block

如果用到了FIX画布,需要使用参数8

第五步:

在画布上调整布局

设置块的ScroolBarCanvas在fix画布上

注意:

ITEM名称

画布

子类

FOLDER_SWITCHER

FIX

SWITCHER

DRILLDOWN_RECORD_INDICATOR

~~

FOLDER_TITLE

DYNAMIC_TITLE

FOLDER_OPEN

FOLDER_DUMMY

TOOLBAR

ORDER_BY1

STK

FOLDER_ORDERBY

第六步:

在WHEN-WINDOW-RESIZED触发器内

if:

system.event_windowin('

MAIN'

'

DOC'

TXN_DETAILS'

)then

app_folder.event('

WHEN-WINDOW-RESIZED'

);

endif;

2.TAB页的Folder功能

原理:

与无tab页不同就是创建画布时,我们会选择创建一个tab_canvas类型的画布

假如你要显示的item都来自一个block,则我们只需要一个fix画布;

如果画布上的item来自多个block,则需要多个fix画布。

我们通过when-tab-changed触发器和show_view(hide_view)来控制画布的显示与隐藏

2.1首先要创建类型为Tab的画布,在画布下添加两个子类为Tab_page的画布,注意的是最好使得这两个画布的名称和将来放在两画布上的stacked画布名称一致。

如下图左

2.2画布建好以后,我们来看如何布局。

首先将MAIN_TAB画布,堆叠在MAIN画布上,再将图中TAX画布(fix和stacked画布)和BASE画布(同上)堆叠在MIAN_TAB画布,尽量保持TAX和BASE重合,就是说x和y坐标相同。

2.3接下来就是在formbuilder中写显示和隐藏的代码

FORM级的WHEN-TAB-PAGE-CHANGED

以下的两个过程是为了防止bug

参考(\桌面\ebs常用文档大全\FOLDER)

1.在FORM触发器内

ELSIF(event='

FOLDER_RETURN_ACTION'

)THEN

if(:

global.folder_action='

CONFIRM-HIDE-FIELD'

if:

global.folder_filed='

ADDITION1'

THEN

:

global.folder_action_allowerd:

='

FALSE'

;

ENDIF;

endif;

2.在block触发器

elsifevent='

WHEN-NEW-ITEM-INSTANCE'

then

curr_canvas_name:

=get_item_property(name_in('

SYSTEM.CURSOR_ITEM'

),item_canvas);

current_tab:

=get_canvas_property('

MAIN_TAB'

topmost_tab_page);

tab_canvas_name:

=name_in('

SYSTEM.EVENT_CANVAS'

IFcurr_canvas_nameIN('

TAX_STK'

BASE_STK'

IFcurr_canvas_name!

=current_tabTHEN

set_canvas_property('

topmost_tab_page,curr_canvas_name);

ENDIF;

3.说明性弹性域

第一步:

在实际开发中(暂时做过的项目中),会提供给你注册的plsql块(保存在sql中),

执行后,就会在ebs中注册。

在数据块中创建item,取名DF,类型textitem,子类TEXT_ITEM_DESC_FLEX

在DF项下,创建两个触发器

WHEN-VALIDATE-ITEM--override

代码:

FND_FLEX.EVENT(‘WHEN-VALIDATE-ITEM’)

WHEN-NEW-ITEM-INSTANCE--before

FND_FLEX.EVENT(‘WHEN-NEW-ITEM-INSTANCE’)

修改DF所在数据块的trigger,添加完成后初始化弹性域

添加此代码:

FND_FLEX.EVENT(‘..’)

使用fnd_descr_flex.define初始化弹性域

启用弹性域

1.先是查找出注册好的弹性域

2.进入段设置界面

Open弹性域

3.

然后保存

4.

最后保存。

4.关键性弹性域

下面讲解的是核算科目账户对应的键弹性域的创建方法

4.1创建三个item项,设置相应属性

CODE_COMBINATION:

显示项(称为账户项),字段长度设置2000,显示核算科目的数字组合。

LOV为ENABLE_LIST_LAMP,验证为NO

COMBINATION_DESC:

显示项,字段长度设置2000,显示核算科目的中文描述组合

GL_CCID:

数据库表项,存储的是核算科目对应的ID

4.2为账户项添加两个触发器

WHEN-NEW-ITEM-INSTANCE:

触发器执行层次设置为Before

WHEN-VALIDATE-ITEM

为两个触发器添加代码:

fnd_flex.event('

4.3为这三个item所在的block块添加触发器

PRE-QUERYPOST-QUERYPRE-INSERTPRE-UPDATEWHEN-VALIDATE-RECORD

触发器代码:

fnd_flex.event('

PRE-INSERT'

4.4在pre-form触发器获取账户结构ID

selectb.CHART_OF_ACCOUNTS_ID

fromgl_sets_of_booksb

whereb.SET_OF_BOOKS_ID=fnd_profile.value('

GL_SET_OF_BKS_ID'

4.5初始化键弹性域

fnd_key_flex.define(

block=>

'

DETAIL'

field=>

CODE_COMBINATION'

appl_short_name=>

SQLGL'

--注册的应用简称

code=>

GL#'

--弹性域的注册代码

id=>

GL_CCID'

description=>

COMBINATION_DESC'

num=>

:

parameter.CHARTS_ACCOUNT_ID'

--4.4得到的账户结构ID

4.6遇到的奇葩问题

1).建好弹性域以后,如果我们为账户项赋了值以后,会自动获取数据库表项的值(GL_CCID),如果你有自己的函数来为数据库表项赋值(在系统自动获取之前),那就会被自动获取的值覆盖,关键是这个自动获取的值还有可能是错误的,所以在PRE-INSERT触发器之前,重新赋值即可。

4.单选框和复选框

ValuewhenChecked:

Y

ValuewhenUnchecked:

N

CheckBoxMappingofOtherValues:

Unchecked因为复选框除了选中,被选中外,还有一个null值状态,所以要设置null状态下的值是多少。

获得复选框的值:

块名.复选框名–>

YorN

单选框:

是一个单选组,组里有单选按钮

单选组:

子类---RadioGroup

单选按钮:

子类---RadioButton

RadioButtonValue—这个属性必须有值

5.手电筒窗口查询

1.打开一个模板APPSTAND,将ObjectGroups下的QUERY_FIND对象拖到自己的form中,点击copy。

将在block,canvases,windows下生成对应名称为QUERY_FIND的对象。

2.将new和find按钮,QUERY_FIND数据块下的key-nxtblock代码修改

New:

新建的数据块名称

Find:

查询的数据块名称

key-nxtblock:

查询数据块的名称

3.设置query_find查询块的

属性为主界面块,这样关闭query_find的时候,就会显示主界面块。

4.在主界面块内创建query_find触发器,名称不能修改,添加如下代码:

App_find.query_find(main_win,query_find_win,query_find_block);

参数1:

main_win—查询窗口显示在哪个窗口上

参数2:

query_find_win---查询窗口界面对应的窗口

参数3:

query_find_block–查询窗口对应的块名称

5.在主界面块中的pre-query内添加查询代码

Copy,app_find.query_range等

6.主界面块的when-new-record-instace触发器ExecutionHierarchy设置为After

在其他窗口上调用出手电筒

若该窗口有两个块。

则在两个块上建立query_find触发器,代码为app_find.query_find

6.菜单栏

通过这种方法来设置菜单的名称(when-new-form-instance)

fnd_message.set_name('

SQLSZA'

SZA_PA_010_BUDGET_CHECK'

)/*;

消息内容:

预算检查(&

B)*/

app_special.instantiate('

SPECIAL1'

fnd_message.get);

app_special.disable('

--使菜单灰显(失效)

app_special.enable('

--启用菜单

7.主从块

7.启用功能

fnd_function.execute(function_nameINVARCHAR2,

open_flagINVARCHAR2DEFAULT'

Y'

session_flagINVARCHAR2DEFAULT'

SESSION'

other_paramsINVARCHAR2DEFAULTNULL,

activateINVARCHAR2DEFAULT'

ACTIVATE'

browser_targetINVARCHAR2DEFAULTNULL);

关于详细介绍请查看

8.行指示器打开记录

1).更改行指示器的子类,如图

2.在Item触发器when-item-instance内

CURRENT_RECORD_INDICATOR名称改成DRILLDOWN_RECORD_INDICATOR

 

三.Form开发中常用的技巧

1.关闭窗口

如何正确的关闭非主窗口(A是主窗口块,B是非主窗口块)

在APP_CUSTOM.close_window这个过程内,if语句内注册window的关闭事件,代码为

clear_block;

go_item(‘A.Item_name’);

第二种方法是:

设置B的previousnavigateblock为A,建议使用

在form触发器WHEN-WINDOW-RESIZED中的代码作用:

folder能否随着窗口大小变化而变化。

2.lov查找

为item(lov)赋初值,初值在lov中存在多个。

在这中情况下,当你做其他操作时,lov会自动弹出让你选择某一个值。

如果lov中数据过多,需要先在查找中先输入字符,然后在匹配查找的方法:

不显示lov项可以设置显示项的宽度为0即可

3.得到dml语句错误信息

在on-insert触发器内,加入如下代码:

exception

whenothersthen

fnd_message.debug(sqlerrm);

可以得到触发器的具体信息。

4.clear_block函数

一般在form的插入或更新模式下,clear_blcok会引发是否保存当前内容的系统提示,如果不希望提示,可以使用clear_block(NO_VALIDATE)

5.查询函数的使用

app_query.append(block_name,sql)

block_name---字符串

sql---字符串,一条查询语句

app_find.query_range(qf_block_name.item_name1,qf_block_name2,block_item_name)

参数qf_block_name.item_name1,qf_block_name2:

因为该函数适用于范围查找,所以参数1表示范围开始,参数2表示范围结束

block_item_name–数据块对应的item项

Copy(qf_item,block_item)

类似于第二种,不是范围查找,针对某一个数据块

do_key

使用如下代码,不直接调用execute_query。

parameter.g_query_find:

TRUE'

do_key('

execute_query'

:

app_query.reset('

TRACK'

6.设置头块和行块的增删改属性

尽量不设置insert_allowed和update-allowed属性,insert属性一般只设置行块,头块都是可以新增的,update属性通过设置item的能否输入来实现。

当查询后重新在when-new-block-instance调用一下刷新按钮以及块状态的过程。

一般都会在过程中先把块的delete_allowed和insert_allowed设置为NO,然后再根据逻辑去该状态。

这样就不会出错。

示例代码:

PROCEDUREset_repl_statusIS

BEGIN

sza_set_block_property(p_block_name=>

'

REPL_HEADERS'

p_delete_flag=>

N'

REPL_LINES'

p_insert_flag=>

IF:

repl_headers.status_codeIN('

1NEW'

ELSIF:

repl_headers.status_code='

4REJECT'

ENDIF;

app_standard.synchronize;

ENDset_repl_status;

7.设置窗口的标题

在when-new-form-instance设置

app_window.set_title('

RETIRE_PLAN'

:

PARAMETER.ORG_CODE);

8.跳转块或者查询块的正确方法(system.message_level)

在ebsform中,消息是有等级的,为了clear_block,do_key('

)等时,屏蔽一些小错误,将等级下调至10.

ifevent='

WHEN-BUTTON-PRESSED'

then--在ebsform中

l_message_level:

=:

system.message_level;

:

system.message_level:

=10;

go_block('

approve_action'

clear_block;

do_key('

=l_message_level;

endif;

9.分段排序

实现:

晚于当前系统时间的item排在前面,升序。

早于当前系统时间的item排在后面,升序

使用union的原因:

Union:

对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

UnionAll:

对两个结果集进行并集操作,包括重复行,不进行排序;

10.编译刚定义好的消息

刚定义好的消息要通过编译才能显示详细说明,不然只会显示简码。

编译消息-应用开发员职责-->

其他-->

请求-->

运行复制按钮,选择‘生成消息’行,(如果自己选择,则需要输入参数信息)

11.提示:

FND_MESSAGE

Question的使用:

'

SZA_EAM_DRAW_RETURN_SAVE_TIP'

//用于显示在选择框的内容提示(set_string也可以)

l_question_rt:

=fnd_message.question('

YES'

NO'

CANCEL'

1,

3,

question'

ifl_question_rt<

>

1then

raiseform_trigger_failure;

定义变量接受返回值即可l_question_rt为number类型,根据返回值执行逻辑。

例子:

第二种使用方法:

fnd_message.set_name('

SZA_EAM_TXN_CANCEL_LIN'

SPECIAL5'

fnd_message.get);

使用fnd_message.get取出栈内的消息

12.提示:

set_alert_property

使用set_alert_property来设置提示的信息,可以用字符串连接来输出信息,比FND_MESSAGE方便

13.屏蔽错误

如果碰到无法解决的错误,但是错误对程序并不影响。

在ON-ERROR触发器中,用一下代码替代

app_standard.event('

ON-ERROR'

IFERROR_CODE=41016THEN

NULL;

ELSE

app_standard.event('

END;

14.关于list的一些函数

clear_listadd_list_element配合使用在pro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1