可以在运行时生成 ABAP 报告吗?
Generation of ABAP report in runtime possible?
有没有可以生成ABAP代码的Function模块。
例如:FM 将表名和连接条件作为输入并生成与之对应的 ABAP 代码。
谢谢
是的,存在这种可能性,但不是通过功能模块。 INSERT REPORT
statement 允许通过从内部文本填充其代码来生成报告 table:
INSERT REPORT prog FROM itab
[MAXIMUM WIDTH INTO wid]
{ [KEEPING DIRECTORY ENTRY]
| { [PROGRAM TYPE pt]
[FIXED-POINT ARITHMETIC fp]
[UNICODE ENABLING uc] }
| [DIRECTORY ENTRY dir] }.
您应该考虑使用 SAPQuery。此处的 SAP 文档:https://help.sap.com/saphelp_erp60_sp/helpdata/en/d2/cb3efb455611d189710000e8322d00/content.htm
1。可以生成通用报告。
你的问题是,你必须对什么是
通用的,什么不是,这意味着,有些东西必须是通用的,那
它将处理你之前想做的任何事情(主要是 selection ),
在(主要是操纵--->我会为此提供一个badi)和输出。
这意味着,至少有输出步骤,它可以对所有有效
之前步骤产生的数据。
考虑一个通用的 ALV-table_output,repo 中有很多示例。
如果您想将打印出来的东西简单地列为清单,这可能包括
更多的工作,比如,结构有多大,当你换行时,等等,考虑使用一个允许切换输出类型的标志。
2。通用报告是一个 transportable 对象。
这是指第一点。定义明确的阶段和限制。报告能做什么,不能做什么。因为,即使它在客户的命名空间中,每次修改仍然会被放入传输层。因此,features/limits 的严格定义是必要的,这样由于 "oh, but we also need that" 语句的传输量不会变得无限。
2。通用报告是严格的。
这是什么意思?如果未正确设置,您可能想要解析传递的数据(table 名称、连接绑定、selection-parameter-values)并抛出异常。很多工作。你应该为此提供一个badi。如果您不这样做,请期待转储。让它倾倒。最后,您的报告-api 的用户应该知道(也许通过文档)如何调用它。否则,将产生一个动态 SQL-dump。
3。通用报告可能受益于 badis/exits.
我认为这是自我解释。特别是 generic/dynamic selection/modification/displaying 的数据应该是可扩展的
自定义修改。当您检查 f4-search-help 出口的工作原理时,您会明白我的意思。
4。通用编码很难调试,主要是黑盒。
自我解释,在下面的代码部分我可以标记其中的一些部分。
5.通用编码在 repo 中有一些最佳实践示例。
不要重新发明轮子。通过调试检查 se16n 是如何工作的,
通过调试检查 se11 是如何工作的。检查 SQL-Query-builder 是什么
看起来像在调试器中。你很快就会明白,
并且复制粘贴应该是您作品中最简单的部分。
6.这些是您可能使用的基本部分。
Where 子句确定和设置参数。
data lt_range type rsds_trange.
data ls_range_f type rsds_frange.
data lt_where type rsds_twhere.
data ls_where like line of lt_where.
ls_range_f = value #( sign = _sign
option = _option
low = _low
high = _high ).
.
.
.
append ls_frange to lt_range.
.
.
.
call function 'FREE_SELECTIONS_RANGE_2_WHERE'
exporting
field_ranges = lt_range
importing
where_clauses = lt_where.
你有参数,让我们创建select-result-table.
data(lt_key) = value abap_keydescr_tab( for line in _joinfields)
( name = fieldname ) ).
data(lo_structdescr) = cast cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( _struct_name ) ).
data(lo_tabledescr) = cl_abap_tabledescr=>create( line_type = lo_structdescr p_key = lt_key ).
create data ro_data type handle lo_tabledescr.
。
.
.
select (sel_st)
from (sel_bind)
into corresponding fields of table t_data
where (dyn_where).
然后将 seelct-table-result-reference 分配给这个 select 的泛型 table。
您需要更多提示吗?
有没有可以生成ABAP代码的Function模块。 例如:FM 将表名和连接条件作为输入并生成与之对应的 ABAP 代码。
谢谢
是的,存在这种可能性,但不是通过功能模块。 INSERT REPORT
statement 允许通过从内部文本填充其代码来生成报告 table:
INSERT REPORT prog FROM itab
[MAXIMUM WIDTH INTO wid]
{ [KEEPING DIRECTORY ENTRY]
| { [PROGRAM TYPE pt]
[FIXED-POINT ARITHMETIC fp]
[UNICODE ENABLING uc] }
| [DIRECTORY ENTRY dir] }.
您应该考虑使用 SAPQuery。此处的 SAP 文档:https://help.sap.com/saphelp_erp60_sp/helpdata/en/d2/cb3efb455611d189710000e8322d00/content.htm
1。可以生成通用报告。
你的问题是,你必须对什么是 通用的,什么不是,这意味着,有些东西必须是通用的,那 它将处理你之前想做的任何事情(主要是 selection ), 在(主要是操纵--->我会为此提供一个badi)和输出。 这意味着,至少有输出步骤,它可以对所有有效 之前步骤产生的数据。 考虑一个通用的 ALV-table_output,repo 中有很多示例。 如果您想将打印出来的东西简单地列为清单,这可能包括 更多的工作,比如,结构有多大,当你换行时,等等,考虑使用一个允许切换输出类型的标志。
2。通用报告是一个 transportable 对象。
这是指第一点。定义明确的阶段和限制。报告能做什么,不能做什么。因为,即使它在客户的命名空间中,每次修改仍然会被放入传输层。因此,features/limits 的严格定义是必要的,这样由于 "oh, but we also need that" 语句的传输量不会变得无限。
2。通用报告是严格的。
这是什么意思?如果未正确设置,您可能想要解析传递的数据(table 名称、连接绑定、selection-parameter-values)并抛出异常。很多工作。你应该为此提供一个badi。如果您不这样做,请期待转储。让它倾倒。最后,您的报告-api 的用户应该知道(也许通过文档)如何调用它。否则,将产生一个动态 SQL-dump。
3。通用报告可能受益于 badis/exits.
我认为这是自我解释。特别是 generic/dynamic selection/modification/displaying 的数据应该是可扩展的 自定义修改。当您检查 f4-search-help 出口的工作原理时,您会明白我的意思。
4。通用编码很难调试,主要是黑盒。 自我解释,在下面的代码部分我可以标记其中的一些部分。
5.通用编码在 repo 中有一些最佳实践示例。
不要重新发明轮子。通过调试检查 se16n 是如何工作的, 通过调试检查 se11 是如何工作的。检查 SQL-Query-builder 是什么 看起来像在调试器中。你很快就会明白, 并且复制粘贴应该是您作品中最简单的部分。
6.这些是您可能使用的基本部分。
Where 子句确定和设置参数。
data lt_range type rsds_trange.
data ls_range_f type rsds_frange.
data lt_where type rsds_twhere.
data ls_where like line of lt_where.
ls_range_f = value #( sign = _sign
option = _option
low = _low
high = _high ).
.
.
.
append ls_frange to lt_range.
.
.
.
call function 'FREE_SELECTIONS_RANGE_2_WHERE'
exporting
field_ranges = lt_range
importing
where_clauses = lt_where.
你有参数,让我们创建select-result-table.
data(lt_key) = value abap_keydescr_tab( for line in _joinfields)
( name = fieldname ) ).
data(lo_structdescr) = cast cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( _struct_name ) ).
data(lo_tabledescr) = cl_abap_tabledescr=>create( line_type = lo_structdescr p_key = lt_key ).
create data ro_data type handle lo_tabledescr.
。 . .
select (sel_st)
from (sel_bind)
into corresponding fields of table t_data
where (dyn_where).
然后将 seelct-table-result-reference 分配给这个 select 的泛型 table。
您需要更多提示吗?