在运行时生成ABAP报告

时间:2016-01-28 05:06:18

标签: sap abap

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

由于

3 个答案:

答案 0 :(得分:0)

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

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] }.

答案 1 :(得分:0)

答案 2 :(得分:0)

<强> 1。可以使用通用报告。

你的问题是,你必须画出一个严格的框架 通用,什么不是,这意味着,一些东西必须是通用的,那 它将处理你以前想要做的事情(主要是选择), 期间(主要是操纵---&gt;我会提供一个badi)和输出。 这意味着,至少有输出步骤,可以对ALL有效 以前的步骤产生的数据。 考虑一个通用的ALV-table_output,repo中有很多例子。 如果你想成为简单列表的东西,这可能包括 更多的工作,比如,结构有多大,当窦你包裹一条线时,等等,考虑使用一个允许切换输出类型的标志。

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

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

<强> 2。通用报告是严格的。

这是什么意思?如果设置不正确,您可能希望解析传递的数据(表名,连接绑定,选择参数值)并抛出异常。很多工作。你应该提供一个badi。如果您不这样做,请期待转储。让它转储。最后,您的report-api的用户应该知道(或许通过文档)如何调用它。如果没有,结果将是动态SQL转储。

第3。通用报告可能会受益于badis / exits。

我认为这是自我解释。特别是通用/动态选择/修改/显示数据应该是可扩展的 定制修改。当你检查时,f4-search-help出口是什么样的,你会明白,我的意思。

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

<强> 5。通用编码在repo中有一些最好的prectice示例。

不要重新发明轮子。通过调试来检查se16n是如何工作的, 通过调试来检查se11是如何工作的。检查,SQL-Query-builder是什么 看起来像在调试器中。你会很快得到这个想法, 复制粘贴应该是你工作中最简单的部分。

<强> 6。这是您可能使用的基本部分。

子句确定和设置参数。

 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的通用表。

您需要更多提示吗?

相关问题