我的问题如下:
我有一份名为Y5000112
的报告
我的同事总是使用选择屏幕变种 V1
手动执行一次,然后使用变种 V2
再次执行第一次 PERNR
执行选择。
在这种情况下,这些结果是DATA: t_list TYPE TABLE OF abaplist.
* lt_seltab TYPE TABLE OF rsparams,
* ls_selline LIKE LINE OF lt_seltab.
SUBMIT Y5000114
USING SELECTION-SET 'MA OPLAN TEST'
EXPORTING LIST TO MEMORY
AND RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = t_list
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE 'Unable to get list from memory'.
ELSE.
* I want to fill ls_seltab here with all pernr (table pa0020) but I haven't got a clue how to do this
* LOOP AT t_list.
* WRITE /t_list.
* ENDLOOP.
SUBMIT Y5000114
* WITH-SELECTION-TABLE ls_seltab
USING SELECTION-SET 'MA OPLAN TEST2'
AND RETURN.
ENDIF.
。
我的目标:
自动执行此操作 - 单击执行该查询两次,并使用第一次执行的PERNR结果自动填充第二次执行的PERNR选择。
我发现了如何触发报告执行以及之后的另一个,如何将其设置为某个变体并且到目前为止 - [编辑]在第一个答案之后我进一步了解但我仍然不知道如何循环我的结果并将它们放入下一个报告提交中:
function submitAndReturnExport(Reportname,VariantName,OptionalPernrSelection)
{...return resultObject;}
var t_list = submitAndReturnExport("Y5000114","MA OPLAN TEST");
var pernrArr = [];
for (var i in t_list)
{
pernrArr.push(t_list[i]["pernr"]);
}
submitAndReturnExport("Y5000114","MA OPLAN TEST2",pernrArr);
P.S。
我对ABAP不是很熟悉,所以如果我没有提供足够的信息,请在评论中告诉我,我会尝试找出你需要知道的任何事情来解决这个问题。< / p>
这是我想象中的JS代码,可以非常普遍地表达我想要完成的事情。
_id
答案 0 :(得分:3)
它并不是那么容易,因此不会有任何单行代码段。
没有标准的方法从报告中获取结果。尝试使用EXPORTING LIST TO MEMORY
子句,但请考虑可能的报告需要进行调整:
提交[report_name]
WITH SELECTION-TABLE [rspar_tab]
导出内存列表
和返回。
上述陈述的结果应该从内存中读取并适用于输出:
call function 'LIST_FROM_MEMORY'
TABLES
listobject = t_list
EXCEPTIONS
not_found = 1
others = 2.
if sy-subrc <> 0.
message 'Unable to get list from memory' type 'E'.
endif.
call function 'WRITE_LIST'
TABLES
listobject = t_list
EXCEPTIONS
EMPTY_LIST = 1
OTHERS = 2
.
if sy-subrc <> 0.
message 'Unable to write list' type 'E'.
endif.
另一种(更有效的方法,恕我直言)是通过类cl_salv_bs_runtime_info
获得对结果网格的访问。请参阅示例here
P.S。使用相互依赖的不同参数执行相同的报告(第一次迭代的输出句法=第二次的输入句点)肯定是一个糟糕的设计,这些操作应该是内部完成。
至于我,我最好重新考虑报告的整个架构。