gpt4 book ai didi

abap - 以编程方式克隆使用逻辑数据库的程序

转载 作者:行者123 更新时间:2023-12-03 02:32:48 32 4
gpt4 key购买 nike

我有一个报告,我们将其命名为 REPORT_A,我想将其克隆到 REPORT_B,执行 REPORT_B,然后回来吧。

我正在执行以下操作:

  DATA: lv_report_name     TYPE c LENGTH 30 VALUE `DEMO_LIST_OUTPUT`,
lv_new_report_name TYPE c LENGTH 30 VALUE `ZZ_DEMO_LIST_OUTPUT`,
lt_report_code TYPE abaptxt255_tab,
lv_message TYPE abaptxt255,
lv_line TYPE i,
lv_word TYPE abaptxt255.

READ REPORT lv_report_name INTO lt_report_code.

SYNTAX-CHECK FOR lt_report_code
MESSAGE lv_message
LINE lv_line
WORD lv_word.

IF sy-subrc = 0.

INSERT REPORT lv_new_report_name FROM lt_report_code STATE 'A'.

GENERATE REPORT lv_new_report_name.

SUBMIT (lv_new_report_name) VIA SELECTION-SCREEN AND RETURN.

ENDIF.

syntax-check 语句返回 sy-subrc = 4,并且 lv_message 包含:

PERNR is not defined for the current logical database

这就是问题 -> REPORT_A 使用 PNP 逻辑数据库并具有 get pernr 语句,因此它无法通过语法检查。

详细信息:REPORT_A 工作正常,tables pernr 在其中声明。如果我在 SE38 中单独运行它,它会完美执行。

但是,由于这个奇怪的错误,我总是无法生成 REPORT_B

即使我跳过 IF 条件,它也会在 submit 行中转储,指出引用相同错误的语法错误,"pernr is未为当前逻辑数据库定义”

有办法解决吗?

我可以动态调用get pernr,这样语法检查就不会失败吗?

最佳答案

首先,要小心,INSERT REPORTGENERATE REPORT供内部使用的语句(保留给 SAP)。

如果您仍然想使用内部语句,请参阅我的答案的其余部分。

否则,解决方法是使用 GENERATE SUBROUTINE POOL 。但它不适用于逻辑数据库。如果您复制标准程序,复制它可能不是一个好主意(没有注释助手可以在修补/升级时帮助您),因此经典的解决方法是添加 implicit enhancement options ,或使用 SAP 在此特定计划中建议的最终用户导出(如果有)。可能还有其他选择,但这取决于您的确切目标,而您(尚未)分享该目标。

<小时/>

语句INSERT REPORT创建一个带有程序条目的源代码模块(在表TRDIR中),默认情况下对应于Executable program (又名“报告”),因此可以使用 SUBMIT 执行。

但就您而言,您想要生成的程序是 program using a Logical Database ,因此您必须分配程序属性逻辑数据库 (TRDIR-LDBNAME)。

程序属性将通过以下语句中的单词DIRECTORY ENTRY传递:

复制现有程序的一个简单解决方案是从表 TRDIR 中读取其程序属性,更改您所在的程序的名称 (TRDIR-NAME)创建,并在DIRECTORY ENTRY之后传递它们。

其他评论:

  • COMMIT WORK 应放置在 GENERATE REPORT 之后,如文档中所述。
  • 应在INSERT REPORTGENERATE REPORT 之后检查SY-SUBRC

因此,以下代码将起作用:

  DATA: lv_report_name     TYPE c LENGTH 30 VALUE `DEMO_LIST_OUTPUT`,
lv_new_report_name TYPE c LENGTH 30 VALUE `ZZ_DEMO_LIST_OUTPUT`,
lt_report_code TYPE abaptxt255_tab,
lv_message TYPE abaptxt255,
lv_line TYPE i,
lv_word TYPE abaptxt255,
ls_trdir TYPE trdir.

READ REPORT lv_report_name INTO lt_report_code.
SELECT SINGLE * FROM trdir INTO ls_trdir WHERE name = lv_report_name.
ls_trdir-name = lv_new_report_name.

SYNTAX-CHECK FOR lt_report_code
MESSAGE lv_message
LINE lv_line
WORD lv_word
DIRECTORY ENTRY ls_trdir.

IF sy-subrc = 0.

INSERT REPORT lv_new_report_name FROM lt_report_code STATE 'A' DIRECTORY ENTRY ls_trdir.
IF sy-subrc = 0.

GENERATE REPORT lv_new_report_name.
IF sy-subrc = 0.

COMMIT WORK.

SUBMIT (lv_new_report_name) VIA SELECTION-SCREEN AND RETURN.

ELSE.
* Handle the error + rollback
ENDIF.
ELSE.
* Handle the error + rollback
ENDIF.
ELSE.
* Handle the error
ENDIF.

关于abap - 以编程方式克隆使用逻辑数据库的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733516/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com