利用REUSE_ALV_HIERSEQ_LIST_DISPLAY进行多层输出(输出表结构的又一例)

本文详细介绍了如何使用 ABAP 编程语言创建 ALV (Application List Viewer) 报表,包括定义列表类型、声明表结构、设置输出格式及通过调用标准函数实现报表展示的过程。

1、在程序里包含SLIS
type-pools: slis.

2、声明主表和明细表

* Global structure of list
types: begin of t_table,
tabname like dd03l-tabname,
ddtext like dd02t-ddtext,
as4user like dd02l-as4user,
end of t_table.

types: begin of ud_struct,
position like dd03l-position,
tabname like dd03l-tabname,
fieldname like dd03l-fieldname,
ddtext like dd03t-ddtext,

keyflag like dd03l-keyflag,
rollname like dd03l-rollname,
domname like dd03l-domname,
datatype like dd03l-datatype,
ddleng like dd03l-leng,
checktable like dd03l-checktable,
decimals like dd03l-decimals,
eddtext like dd03t-ddtext,
dddtext like dd03t-ddtext,
end of ud_struct.
data: gt_outtabt type t_table occurs 0 with header line.
data: gt_outtabf type ud_struct occurs 0 with header line.

3、申明主表和明细表的名称变量
g_tabname_header type slis_tabname,
g_tabname_item type slis_tabname.

4、声明主表和明细表连接关键字变量
data: gs_keyinfo type slis_keyinfo_alv

5 、设置输出格式

6、具体完整样例
*&---------------------------------------------------------------------
*& Report ZGETTABLEFIELD *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

report zgettablefield .
* Data declaration
type-pools: slis.

* Global structure of list
types: begin of t_table,
tabname like dd03l-tabname,
ddtext like dd02t-ddtext,
as4user like dd02l-as4user,
end of t_table.

types: begin of ud_struct,
position like dd03l-position,
tabname like dd03l-tabname,
fieldname like dd03l-fieldname,
ddtext like dd03t-ddtext,

keyflag like dd03l-keyflag,
rollname like dd03l-rollname,
domname like dd03l-domname,
datatype like dd03l-datatype,
ddleng like dd03l-leng,
checktable like dd03l-checktable,
decimals like dd03l-decimals,
eddtext like dd03t-ddtext,
dddtext like dd03t-ddtext,
end of ud_struct.

tables: dd03l,dd02l.

data: gt_fieldcat type slis_t_fieldcat_alv.
data: gt_outtabt type t_table occurs 0 with header line.
data: gt_outtabf type ud_struct occurs 0 with header line.
data: gs_keyinfo type slis_keyinfo_alv,
g_tabname_header type slis_tabname,
g_tabname_item type slis_tabname.


data: g_repid like sy-repid.
data : begin of exclude occurs 5,
fcode like sy-ucomm,
end of exclude.
data p_ucomm like sy-ucomm.

select-options s_tname for dd02l-tabname default 'VBAK'.

*======================================================================*
* Initialization fieldcatalog
*======================================================================*
initialization.
g_repid = sy-repid.
g_tabname_header = 'GT_OUTTABT'.
g_tabname_item = 'GT_OUTTABF'.
* define keyinfo
clear gs_keyinfo.
gs_keyinfo-header01 = 'TABNAME'.
gs_keyinfo-item01 = 'TABNAME'.
gs_keyinfo-header02 = space.
gs_keyinfo-item02 = 'POSITION'.

*======================================================================*
* Ereignis : AT SELECTION-SCREEN OUTPUT (PBO-Zeitpunkt) *
*======================================================================*
at selection-screen output.
data exclude like rsexfcode occurs 0 with header line.
if sy-dynnr = 1000.
call function 'RS_SET_SELSCREEN_STATUS'
exporting
p_status = 'ZGETTBFD'
tables
p_exclude = exclude
exceptions
others = 1.
endif.
p_ucomm = space.

*======================================================================*
* Ereignis : AT SELECTION-SCREEN (PAI-Zeitpunkt) *
* letztes PAI-Ereignis *
*======================================================================*
at selection-screen.
p_ucomm = sy-ucomm.
case p_ucomm.
when 'STBL'.
set parameter id 'DTB' field s_tname.
* PERFORM AUTHORITY_CHECK USING 'SE11' .
call transaction 'SE11' and skip first screen.
endcase.

*======================================================================*
* Data selection
*======================================================================*
start-of-selection.
perform select_table tables gt_outtabt.
perform select_field tables gt_outtabf.
*======================================================================*
* Display list
*======================================================================*
end-of-selection.

perform fieldcat_init using gt_fieldcat[].
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
* i_callback_program = g_repid
* it_fieldcat = gt_fieldcat[]
* TABLES
* t_outtab = gt_outtabf.
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = g_repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
* IT_EXCLUDING =
* it_special_groups = gt_sp_group[]
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* i_default = g_default
* i_save = g_save
* is_variant = g_variant
* it_events = gt_events[]
* IT_EVENT_EXIT =
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = gs_keyinfo
* IS_PRINT =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
tables
t_outtab_header = gt_outtabt
t_outtab_item = gt_outtabf.

************************************************************************
* Form Name : fieldcat_init
* Created by : DEV01
* Created on :
* Form Description:
* Set field's output layout
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* <--- rt_fieldcat: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form fieldcat_init
using rt_fieldcat type slis_t_fieldcat_alv.
data: ls_fieldcat type slis_fieldcat_alv.
data: pos type i value 1.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'TABNAME'.
ls_fieldcat-tabname = g_tabname_header.
ls_fieldcat-ref_fieldname = 'TABNAME'.
ls_fieldcat-ref_tabname = 'DD03T'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDTEXT'.
ls_fieldcat-tabname = g_tabname_header.
ls_fieldcat-ref_fieldname = 'DDTEXT'.
ls_fieldcat-ref_tabname = 'DD02T'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.


* ls_fieldcat-fieldname = 'TABNAME'.
* ls_fieldcat-tabname = g_tabname_item.
* ls_fieldcat-ref_fieldname = 'TABNAME'.
* ls_fieldcat-ref_tabname = 'DD03T'.
* LS_FIELDCAT-KEY = 'X'.
* APPEND ls_fieldcat TO rt_fieldcat.
* CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'POSITION'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'POSITION'.
ls_fieldcat-ref_tabname = 'DD03L'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'FIELDNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'FIELDNAME'.
ls_fieldcat-ref_tabname = 'DD03T'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDTEXT'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DDTEXT'.
ls_fieldcat-ref_tabname = 'DD03T'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'KEYFLAG'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'KEYFLAG'.
ls_fieldcat-ref_tabname = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DATATYPE'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DATATYPE'.
ls_fieldcat-ref_tabname = 'DD03T'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDLENG'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'LENG'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DECIMALS'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DECIMALS'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'CHECKTABLE'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'CHECKTABLE'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'ROLLNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'ROLLNAME'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DOMNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DOMNAME'.
ls_fieldcat-ref_tabname = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.
endform. "fieldcat_init
************************************************************************
* Form Name : select_table
* Created by : DEV01
* Created on :
* Form Description:
* Get Table's information
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* <---rt_outtab: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form select_table tables rt_outtab like gt_outtabt[].

select dd02l~tabname dd02t~ddtext dd02l~as4user
into (rt_outtab-tabname,rt_outtab-ddtext,rt_outtab-as4user)
from dd02l left join dd02t
on dd02l~tabname = dd02t~tabname
and dd02l~as4local = dd02t~as4local
and dd02l~as4vers = dd02t~as4vers
and dd02t~ddlanguage = sy-langu
where dd02l~tabname in s_tname
and dd02l~as4local = 'A'
order by dd02l~tabname.
append rt_outtab.
endselect.

endform. "SELECT_DATA
************************************************************************
* Form Name : select_field
* Created by : DEV01
* Created on :
* Form Description:
* Get Table field's information
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* <---rt_outtab: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form select_field tables
rt_outtab like gt_outtabf[].

select dd03l~position dd03l~tabname
dd03l~fieldname
dd03t~ddtext
dd03l~keyflag
dd03l~rollname
dd03l~domname
dd03l~datatype
dd03l~leng
dd03l~checktable dd03l~decimals

dd04t~ddtext dd01t~ddtext
into (rt_outtab-position, rt_outtab-tabname,
rt_outtab-fieldname, rt_outtab-ddtext,
rt_outtab-keyflag,rt_outtab-rollname,
rt_outtab-domname,rt_outtab-datatype,
rt_outtab-ddleng,rt_outtab-checktable,

rt_outtab-decimals,
rt_outtab-eddtext,rt_outtab-dddtext)
from dd03l left join dd03t
on dd03l~tabname = dd03t~tabname
and dd03l~fieldname = dd03t~fieldname
and dd03t~ddlanguage = sy-langu
left join dd04t
on dd03l~rollname = dd04t~rollname
and dd04t~ddlanguage = sy-langu
left join dd01t
on dd03l~domname = dd01t~domname
and dd01t~ddlanguage = sy-langu
where dd03l~tabname in s_tname
order by dd03l~tabname dd03l~position.
if rt_outtab-ddtext = space.
if rt_outtab-eddtext = space.
rt_outtab-ddtext = rt_outtab-dddtext.
else.
rt_outtab-ddtext = rt_outtab-eddtext.
endif.
endif.
append rt_outtab.
endselect.

endform. "SELECT_DATA

*&---------------------------------------------------------------------*
*& Form FUNCTION_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_EXCLUDE text *
*----------------------------------------------------------------------*
form function_exclude tables p_exclude structure exclude.
* data : rcode like sy-subrc.
* clear p_exclude.
* refresh p_exclude.
* exclude-fcode = 'EERW'.
* append exclude.
* exclude-fcode = 'EXIT'.
* append exclude.
endform. " FUNCTION_EXCLUDE

相关连接:http://blog.youkuaiyun.com/CompassButton/archive/2005/02/05/281435.aspx

内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值