可以在运行时生成ABAP报告吗?

问题描述 投票:0回答:3

是否有任何可以生成ABAP代码的功能模块。例如:FM以表名和联接条件为输入,并生成与之对应的ABAP代码。

谢谢

dynamic sap abap
3个回答
0
投票

1。通用报告是可能的。

您的问题是,您必须对什么是通用,不是什么意思,这意味着某些东西必须是通用的它将处理您之前想要做的任何事情(主要是选择),在(主要是操纵--->我会为此提供一个badi)期间,然后输出。这意味着,至少存在输出步骤,该步骤对于所有之前步骤产生的数据。考虑一个通用的ALV-table_output,回购中有很多示例。如果您想成为简单打印为清单的内容,则可能包括还有更多工作,例如结构有多大,当您打包一条线等时,请考虑使用允许切换输出类型的标志。

2。通用报告是可传输的对象。

这是指第一点。定义明确的阶段和限制。该报告做什么,它不能做什么。因为,即使它在客户的命名空间中,每个修改仍将被放入传输层。因此,必须对特征/限制进行严格的定义,以使由于“哦,但我们也需要”所引起的传输量不会变为无限。

2。通用报告很严格。

这是什么意思?如果未正确设置,则可能要解析传递的数据(表名称,join-binding,selection-parameter-values)并引发异常。很多工作。你应该为此提供一个巴迪。如果您不这样做,请期待转储。让它转储。最后,您的report-api的用户应该知道(也许是通过文档)如何调用它。否则,将导致动态SQL转储。

3。常规报告可能会受益于badis / exit。

我认为这是自我解释。尤其是通用/动态选择/修改/显示数据应该在以下方面可扩展自定义修改。当您检查时,f4-search-help出口的工作方式是什么,您会明白我的意思。

4。通用编码很难调试,主要是黑箱。自我解释,在下面的代码部分中,我可以标记其中一些部分。

5。通用代码在仓库中有一些最佳的例子。

不要重新发明轮子。通过调试来检查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.

您有参数,让我们创建选择结果表。

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分配给此选择的通用表。

您需要更多提示吗?


1
投票

0
投票

是,存在这种可能性,但不是通过功能模块来实现。INSERT REPORTstatement允许通过从内部文本表填充其代码来生成报告:

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] }.
© www.soinside.com 2019 - 2024. All rights reserved.