ABAP 通过递归实现深度优先遍历。(可拓展至BOM展开)

"主要逻辑就是查询下层之前,先做数据处理。
********数据定义
DATA: a TYPE char2,
b TYPE char2,
c TYPE char2,
d TYPE char2.

DATA: BEGIN OF ty_data,
a TYPE char2,
b TYPE char2,
c TYPE char2,
d TYPE char2,
END OF ty_data.

DATA gt_data LIKE TABLE OF ty_data.
DATA gs_data LIKE ty_data.

DATA gt_data1 LIKE TABLE OF ty_data.
DATA gs_data1 LIKE ty_data.

******赋值
gs_data-a = ‘a’.
gs_data-b = ‘b’.
APPEND gs_data TO gt_data.

gs_data-a = ‘a’.
gs_data-b = ‘e’.
APPEND gs_data TO gt_data.

gs_data-a = ‘b’.
gs_data-b = ‘c’.
APPEND gs_data TO gt_data.

gs_data-a = ‘b’.
gs_data-b = ‘d’.
APPEND gs_data TO gt_data.

gs_data-a = ‘c’.
gs_data-b = ‘d’.
APPEND gs_data TO gt_data.

*********显示
WRITE : / , ‘递归前’,/.
LOOP AT gt_data INTO gs_data.
WRITE: gs_data-a , gs_data-b, /.
CLEAR gs_data.
ENDLOOP.

*******主要逻辑
LOOP AT gt_data INTO gs_data WHERE a = ‘a’.

PERFORM frm_get_data USING gs_data-b.
CLEAR gs_data.
ENDLOOP.

*****显示
WRITE : / , ‘递归后’,/.
LOOP AT gt_data1 INTO gs_data1.
WRITE: gs_data1-a , gs_data1-b,gs_data1-c,gs_data1-d, /.
CLEAR gs_data.
ENDLOOP.

&---------------------------------------------------------------------
*& Form frm_get_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_get_data USING b.

gs_data1-a = gs_data-a.
gs_data1-b = gs_data-b.
gs_data1-c = gs_data-c.
gs_data1-d = gs_data-d.
APPEND gs_data1 TO gt_data1.
CLEAR gs_data1.

LOOP AT gt_data INTO gs_data where a = b…
PERFORM frm_get_data USING gs_data-b.
ENDLOOP.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值