- 浏览: 170273 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mahone:
TNS服务是好像是oracle的服务
但是我是使用的 sql ...
如何在两个独立服务器间传输请求内容 -
lyf512616:
您好 我是学生刚开始用SAP,请问转储单是在哪里创建的?
Delivery has not yet been put away / picked (completely) Delivery has not yet be -
mahone:
图挂了
重传吧
Webdynpro ABAP 系列: How to display smartform in WDA -
lovelymangold:
不错,机器配置是?正准备。。。能介绍下吗msn: erp.e ...
SAP NetWeaver 7.01 SR1 SP3 ABAP Developer Edition 安装 -
王三:
ai2ming 写道hints不对不会造成dump的,在ora ...
ABAP 报表程序OpenSQL性能调优
2009-02-23
在PA教程中,对ALV的创建采用了ALV Control Grid的方式, 跟实际开发中的方式有些不同, 经过几周的实际开发,有了些认识,记录下来.
ALV的创建一般有两种方式: 1> 采用function module, 2> OOPS abap
两种创建方式有对应的适用范围,也有一些交集,可以参考下图:
可以看到需要创建ALV list/ hierachical list, Fullscreen grid时可以采用Function module.并且是向后兼容的
而我们创建ALV grid or tree control时则要采用OO的创建方法,在6.4之前也是适用的,但使用OO ALV wrapper to control时,则适用于6.4之后的版本.
NW WAS 与R3 4.6之间还是有较大的改变,整个平台扩展了许多东西, 像web service, OO的大规模使用,而且据说是采用SOA策略的实现,
一 .FM
在使用FM来实现ALV时,对应于fullscreen alv, Type-pool: SLIS非常重要,它定义了FM中的许多参数类型.
1 . ALV是种展现手段,那么它就会涉及到定义数据选择条件,数据获取,数据展现,事件处理等步骤.
1> 在定义选择条件时,可以采用Selection
screen来定义条件,可以定义一个值(PARAMETERS),也可以定义一个范围(SELECTION-OPTIONS),方便的很,如果程序中如
果有动态条件的话,可以考虑采用RANGES来, 并且有个小技巧是采用 ( ) 来动态执行SQL.简单例子如下.
select * into itab
from sflight
where (wheretab)
wheretab 是个行项类型是字符型的内表, 它的每一行就是一个选择条件字符串.
对于这种动态语句尽量避免使用,因为它在运行时才能确定执行语句,并且可以避过编译时的语法检查.
注: SAP标准程序中可以看到这种用法,如FM: SD_PARTNER_READ.
SELECT
* FROM
(object
) INTO
TABLE
l_vbpa WHERE
vbeln = f_vbeln. 它是将选取的数据表动态化了.
2> 数据选取
这里一般对程序性能影响最大,关注点在于对数据库表的访问,内表的操作等方面.
3> 数据展现
field catalog:它是一个内表,对应于每一列的显示选项的技术性信息或额外的信息,像hotspot的定义,这一列显示不显示等.
layout structure: layout for grid,可以定义一些GRID的配置,像求总选项,
4> 事件处理
对于双击事件,hotspot的处理, TOP-OF-PAGE, END-OF-LIST等.
2.相关的FM.
REUSE_ALV_VARIANT_DEFAULT_GET
REUSE_ALV_VARIANT_F4
REUSE_ALV_VARIANT_EXISTENCE
REUSE_ALV_EVENTS_GET: 包含事件名称与事件处理form名称的内表
REUSE_ALV_COMMENTARY_WRITE
REUSE_ALV_FIELDCATALOG_MERGE: 根据ABAP Dictionary中的Transparent table , Structure, View等生成一个field catalog
REUSE_ALV_LIST_DISPLAY: 以list形式显示结果
REUSE_ALV_GRID_DISPLAY: 以Grid形式显示结果
REUSE_ALV_POPUP_TO_SELECT
粗线标识的是最经常使用的.
3. field catalog
1>它是对输出表的字段的描述,定义了字段的输出属性.
比如:
col_pos
字段在表中第几列,
fieldname
输出的字段名,如果此字段是CURR(currency field) ,QUAN(Quantity field) 需要指定相应的CUKY, UNIT字段.设置,Cfieldname
Ctabname
和Qfieldname
Qtabname
no_out
隐藏此列,不输出,但注意用户可以change layout来显示出此列.
hotspot
设置此列的所有cell为热点, 单击即可触发相应function.
do_sum
此列求总
no_zero
只输出有意义的值,空值不输出.
edit_mask
对字段像WRITE般设置格式化.
just
R L 调整对齐方式
调整输出列抬头的文本:文本可以随着用户调整列的宽度而变化,其文本即是在对应data element中定义的,如果需要定制,则可以指定以下字段
seltext_l
(long field label)
seltext_m
(medium field label)
seltext_s
(short field label)
reptext_ddic
(header) Analogous to the Data element main header
Ddictxt
(specify text): You can specify with values 'L', 'M', and 'S',直接指定文本显示长文本,中,短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化.
2> 如何构建
A. 手工构建
创建SLIS_T_FIELD_ALV类型的内表, 行项类型为SLIS_FIELD_ALV 对每个字段的相应属性进行设置后,加入内表.
CLEAR X_FIELDCAT.
X_FIELDCAT-COL_POS = 12.
X_FIELDCAT-FIELDNAME = 'DMBTR'.
X_FIELDCAT-TABNAME = 'I_TAB'.
X_FIELDCAT-SELTEXT_M = 'Local curr'.
X_FIELDCAT-OUTPUTLEN = 12.
X_FIELDCAT-INTTYPE = 'P'.
X_FIELDCAT-JUST = 'R'.
X_FIELDCAT-DO_SUM = 'X'.
APPEND X_FIELDCAT TO I_FIELDCAT.
B. 半自动
调用FM: REUSE_FIELD_CATALOG_MERGE ,传入DDIC中的transparent table, view ,structure的名称,输出field catalog内表.
CALL
FUNCTION
'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
* I_PROGRAM_NAME =
* I_INTERNAL_TABNAME =
i_structure_name = c_alv_structure_name
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_INCLNAME =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = gt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS
= 3
如果要对抬头,hotspot等属性进行调整, 可以循环field catalog内表,修改其对应属性.如:
LOOP
AT
gt_fieldcat ASSIGNING
<l_fcat>.
CASE <l_fcat>-fieldname.
WHEN 'flname'.
"修改属性.
ENDCASE.
ENDLOOP.
4. field layout
注意属性 GET_SELINFOS ,它对于REUSE_ALV_GRID_DISPLAY 的输入IS_SEL_HIDE有用,但在WAS 7.0中已不再支持.
5. 事件
ALV触发的事件可用FM: REUSE_ALV_EVENTS_GET 来获得, 输出一个内表,类型是slis_t_event , 行项为slis_alv_event,包含两个字段,一个事件名,另一个是事件处理的FORM名.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS.
常用事件有:
列表抬头处理: Slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
双击,单击 : Slis_ev_user_command TYPE slis_formname VALUE 'USER_COMMAND'
subtotal文本:
Slis_ev_subtotal_text TYPE slis_formname VALUE
'SUBTOTAL_TEXT'.
参考
https://www.sdn.sap.com/irj/scn/wiki?path=/display/Snippets/Display%252bsubtotal%252btext%252bin%252bALV%252bgrid
https://www.sdn.sap.com/irj/scn/thread?threadID=1033110&tstart=0
注意: 如果必须修改subtotal对应的字段的field_catalog属性no_out为X才可以触发这个事件.
6.开发时一般的需求:
一般都会涉及到REUSE_ALV_GRID_DISPLAY 的输入属性
1> ALV variant 保存
is_default
is_save
is_variant
2> 小计, 排序
it_sort属性,可以定义按哪个字段排序并且可以指定按这个字段小计其它可以汇总的字段.
- spos : Sort sequence
- fieldname : Internal output table field name
- tabname : Only relevant for hierarchical-sequential lists. Name of the internal output table.
- up : 'X' = sort in ascending order
- down : 'X' = sort in descending order
- subtot : 'X' = subtotal at group value change
- group : '* ' = new page at group value change ,'UL' = underline at group value change
3> ALV 抬头 页脚
A. 可以采用TOP_OF_PAGE事件触发可以采用方式:
a.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
输出一个内表:
slis_t_listheader 这种方法输出格式固定,不利于对齐
设置输入属性i_logo可输出图片.
b. Grid方式:设置 , 布局容易控制一些.
DATA
: lr_content TYPE
REF
TO
cl_salv_form_element.
DATA
: lr_grid TYPE
REF
TO
cl_salv_form_layout_grid, " top grid definition
lr_flow TYPE
REF
TO
cl_salv_form_layout_flow, " flow for top grid
l_text(500
) TYPE
c
. " showed in top of list
* create a grid
CREATE
OBJECT
lr_grid.
*创建一个单元格
lr_flow = lr_grid->create_flow(
row = 1 "行
column = 1
). "列
* write a blank column
WRITE
(20
) ''
. "可直接输出
plr_flow = plr_grid->create_flow(
row = 1
column = 2 ).
* create text in cell
lr_flow->create_text( text
= pl_text ). "定制cell里的文本
cl_salv_form_content=>set( lr_content ).
B. 设置I_CALLBACK_HTML_TOP_OF_PAGE 属性触发
FORM f_html_top_of_page USING pr_document TYPE REF TO cl_dd_document.
可以加入HTML文本,链接,图片
CALL METHOD pr_document->add_text( text = 'Picture' ).
CALL METHOD pr_document->add_gap( width = 10 ).
CALL METHOD pr_document->add_picture( picture_id = 'ENJOYSAP_LOGO' ).
4> 点击某列,转到另外一个tranaction中,需要设置列字段为hotspot,再在user_command中处理function code: "&IC1
"
it_events属性,传入一个slis_t_event类型的内表.设置相应处理form,如 handle_user_command.
FORM
handle_user_command USING
p_ucomm LIKE
sy-ucomm
ps_selfield TYPE
slis_selfield.
Reference:
https://www.sdn.sap.com/irj/scn/wiki?path=/display/ABAP/ALV+TUTOTIAL+FOR+BEGINERS+WITH+EXAMPLES
这篇文章对FM方式创建ALV讲得非常全面.
发表评论
-
work item 有错不能执行
2011-04-15 22:38 1553在配置好工作流后, 生成的work item 不能执行. ... -
How to record table changes in SAP?
2011-02-28 21:27 1423There are two ways to log the c ... -
Share Object
2010-10-18 22:42 1207支持多用户读,多程序共享数据,并支持锁机制,共享数据存储在 ... -
ALTER TABLE is not possible
2010-05-08 07:51 1943在DDIC中修改某个表的字段的数据类型时出现在此错误, 可以使 ... -
SAP NetWeaver 7.01 SR1 SP3 ABAP Developer Edition 安装
2010-04-25 10:14 2242跟以前的试用版安装一样. 没啥特殊的,只是许可变了. ... -
ICM 的账户问题 SAP ICM login user account
2010-03-18 10:54 1955安装ECC后,点击SAP MMC中的ICM 结点,会弹出一个对 ... -
SWO1: The program "Z00MARA" is not Unicode-compatible, according to its program
2010-03-08 08:14 1507这两天在做SAP Workflow的Demo, 碰到点问 ... -
Error: Die URL enthält keine vollständige Domainangabe
2010-03-01 10:31 2404Error when processing your requ ... -
ABAP 报表程序OpenSQL性能调优
2009-12-28 07:58 3094临上线了,需求还在改,报表也得改,需求满足了,程序性能又不满 ... -
ABAP屏幕编程的一些问题
2009-12-17 11:07 5129简要介绍: 此处的屏幕指的是SAP GUI中的屏幕, 屏 ... -
Smartform小结
2009-12-15 08:12 5892SAP系统中做打印单据用的, 感觉很不好用, 特别是要嵌 ... -
在SAP GUI 中使用Media Player Control
2009-11-30 09:11 2381一种编程语言不可能是万能的,但通过各种接口技术可以集成其它 ... -
Netweaver平台开发web service的一个教程
2009-11-10 19:55 1710Netweaver平台开发web service的一个教程 -
转换例程Conversion Routine
2009-11-04 22:50 1428转换例程Conversion Routine 用于屏幕 ... -
What is the future for ABAPers?
2009-10-30 21:57 1337A client is looking for the fol ... -
关于SAP LUW与Lock Object的一些理解
2009-10-27 22:10 5822为什么会有SAP LUW 与Lock object?SAP系统 ... -
ABAP Object 之 Event
2009-09-08 12:41 1726OO特点是什么,封装,多态,继承. 在当下流行的编程语言中, ... -
wendynpro for abap 配置
2009-08-18 22:41 1087在开发WDA时发现layout editor不能显示出来, 查 ... -
如何在两个独立服务器间传输请求内容
2009-08-10 09:19 2112问题描述: 在一台ECC服务器上做了配置,开发动作后, 想把开 ... -
ABAP动态编程---动态创建数据类型
2009-08-07 09:51 3054代码演示了如何创建stru ...
相关推荐
【SAP ABAP开发】 ALV报表开发教程 详细较少ALV的报表开发
SAP ALV报表开发指南.pdf
ALV 报表按钮功能
SAP ALV报表开发指南.docx
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数
SAP ALV报表开发介绍.pdf
SAP报表alv设计文档 操作步骤简单 建议初学者使用
abap alv报表实现消消乐小游戏
详细介绍ALV的极好的例子 abapalv报表的极好的例子啊
ABAP ALV 报表基础模板(两种)
sap alv报表的通用框架,具体开发时只需要按实际情况定义自己要显示的内表和取数逻辑。
SAP ALV报表开发介绍.pptx
ABAP选择屏幕与ALV报表的连接
SAP动态树程序DialogALV报表.docx
这个是印度一家公司的报表—alv的教程;还可以
SAP动态树程序DialogALV报表(下).docx
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数,是学习OOALV很不错的学习资料
abap_alv工具栏修改。