simple tree구현시 itab의 내용을 loop돌려서 보여줄수 있나요?
첨부 파일은 스탠다드 프로그램 입니다.
이러한 코드를 인터널 테이블에 넣고
form build_node_table using node_table type node_table_type.
data: node like mtreesnode.
loop at gt_pa9701.
clear node.
node-node_key = 'Root'.
node-isfolder = 'X'. " a folder.
node-text = gt_pa9701-pernr.
append node to node_table.
endloop.
이런식으로 gt_pa9701-pernr에 보여주고 싶습니다.
loop하지 않으면 에러가 안납니다. 트리 프로그램을 처음해바서 교재를 참고하여 구현중입니다.
어떻게 해야 하나여?
댓글 6
-
SD2
2009.03.26 05:45
-
정군
2009.03.26 06:06
프로그램 손 놓은지가 하도 오래되고.. 귀차니즘에 테스트 해본 결과가 아니라 확정적으로 말씀드리기 뭣하지만..
답이 안달리고 테스트 결과 기다리다 한 자 또 남깁니다;
CNDP는 character, numeric, date, packed 의 줄임말로 압니다.
즉 데이터 타입이지요.
CNDP 관련 에러가 났다고 나오는건 10중 8,9는 데이터 타입 오류 입니다.
필드명으로 볼 때 node-text는 c 타입일텐데
pernr이면 사번일거구요.
사번은 numeric으로 기억합니다.(찾기 귀찮아서;;)
서로 타입이 틀려 발생하는 에러일 가능성이 있으므로
gt_pa9701-pernr을 C로 바꿔서 넣어보십시오.
(장담은;;;)
-
정군
2009.03.26 06:09
생각난 김에 부가적으로 이야기하면...
제가 처음 ABAP을 접했을 때는 뭐이렇게 문란한 언어가 있나 싶었습니다.
PHP 이래로 처음 느끼는 감정이었죠. C만 공부하다 보니 그랬다 봅니다.
무슨 말인고 하니 데이터 타입을 캐스팅 등을 통하지 않고도 C보다 훨씬 자유롭게 쓰는 점이 좀 놀라웠죠.
그래도 PHP해보고 난 뒤라 좀 덜했지만...
여튼, 03년도 즈음에는 그랬습니다만..
OOP쪽이나 최근 나오는 버전들로 올라갈 수록 점점 더 데이터 타입에 대해서 엄격해 지고 있습니다.
습관을 들이거나, 최소한 자신이 function이나 class의 method에서 요구하는 혹은 attribute에 선언된
타입과 동일하게 넣고 있는지 아닌지를 신경쓰는 버릇이 필요하다고 보입니다.
-
SD2
2009.03.26 07:52
정군님 감사합니다.
정군님 말씀되로 필드명이 틀리더라구요~ 바꿔서 다시 해바도 똑같은 런타임 에러가 나더라구여 ㅜㅡ
loop at gt_pa9701.
endloop.
clear node.
node-node_key = 'Root'.
node-isfolder = 'X'. " a folder.
node-text = gt_pa9701-pernr.
append node to node_table.
이런식으로 돌리면 런타임 에러가 안나더라구여~
루프돌리면서 먼가 이상이 있는거 아닌가여???
-
정군
2009.03.26 16:40
tree 쓴지가 하도 오래되서 기억이 잘 안나고 소스를 직접 해보는게 아니라서 사실 정확한 조언을 드리기 어렵습니다.
다만, 짐작으로 쓰는 것이니 이해해주시고요 ^^;
느낌에는 loop 을 돌려도 문제가 없어야할 것 같습니다.
문제가 될만한 곳은 gt_pa9701-pernr쪽에서 node-text로 값이 들어갈 때 이거나...
node_key가 gt_pa9701의 수 만큼 root 로 들어가는 건데..
첫번째는 아닌 것 같다는 말씀같고...
후배가 쓴 책을 참조해 보니,
root는 node-relakey를 쓰지 않는다고 되어 있네요. 최상위기 때문이랍니다.
제가 추측하는 원인은 gt_pa9701을 loop을 돌더라도 root는 하나여야 하는데
gt_pa9701의 수만큼 root가 생기고 있기 때문이 아닌가 싶습니다.
root는 loop 밖에서 한번만 선언하고
그 하위의 값들은 root의 하위로 오도록 node_relatkey = 'Root'로
해주셔야 할 듯 합니다.
-
SD2
2009.03.26 18:29
원래 제가 소스를 많이 수정했는데요..
알짜배기만 책과 비슷하게 함 올려 봅니다. - 여전히 런타임오류
*&---------------------------------------------------------------------*
*& Report ZSDR3030 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
report zsdr3030 .
types : node_table_type like standard table of mtreesnode
with default key.
data : tree_con_ref type ref to cl_gui_custom_container.
data : g_tree type ref to cl_gui_simple_tree.
data : con1_ref type ref to cl_gui_custom_container.
data : grid1 type ref to cl_gui_alv_grid,
gt_sflight type table of sflight.
types: begin of line,
pernr(8),
end of line.
data gt_pa9701 type standard table of line with header line.
start-of-selection.
select * from sflight into table gt_sflight up to 25 rows.
select pernr from pa9701 into corresponding fields of table gt_pa9701 up to 3 rows.
call screen 0100.
*----------------------------------------------------------------------*
* MODULE init_con OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
module init_con output.
if con1_ref is initial.
create object con1_ref
exporting container_name = 'CON1'.
create object grid1
exporting
i_parent = con1_ref.
call method grid1->set_table_for_first_display
exporting
i_structure_name = 'SFLIGHT'
changing
it_outtab = gt_sflight.
endif.
endmodule. " init_con OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0100 output.
set pf-status '100'.
* SET TITLEBAR 'xxx'.
endmodule. " STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE USER_COMMAND_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
module user_command_0100 input.
case sy-ucomm.
when 'BACK' or 'EXIT' or 'CANC'.
leave to screen 0.
endcase.
endmodule. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module INIT_TREE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module init_tree output.
if g_tree is initial.
data: node_table type node_table_type.
create object tree_con_ref
exporting
" the container is linked to the custom control with the
" name 'TREE_CONTAINER' on the dynpro
container_name = 'TREE_CONTAINER'.
* create a tree control
create object g_tree
exporting
parent = tree_con_ref
" single node selection is used
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
perform build_node_table using node_table.
* node_table_structure_name = 'MTREESNODE'
call method g_tree->add_nodes
exporting
table_structure_name = 'MTREESNODE'
node_table = node_table.
endif.
endmodule. " INIT_TREE OUTPUT
*&---------------------------------------------------------------------*
*& Form BUILD_NODE_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NODE_TABLE text
*----------------------------------------------------------------------*
form build_node_table
using
node_table type node_table_type.
data: node like mtreesnode.
clear node.
node-node_key = 'Root'.
node-isfolder = 'X'. " a folder.
node-text = 'AIRPLANE'.
append node to node_table.
loop at gt_pa9701.
clear node.
node-node_key = 'Child1'.
node-relatkey = 'Root'.
node-isfolder = 'X'.
node-text = gt_pa9701-pernr.
node-expander = 'X' .
append node to node_table.
endloop.
break-point.
clear node.
node-node_key = 'AA'.
node-relatkey = 'Child1'.
node-n_image = '@10@'.
node-text = 'AA'.
append node to node_table.
clear node.
node-node_key = 'AZ'.
node-relatkey = 'Child1'.
node-style = cl_gui_simple_tree=>style_emphasized.
node-text = 'AZ'.
append node to node_table.
clear node.
node-node_key = 'DL'.
node-relatkey = 'Child1'.
node-expander = ' '.
* NODE-HIDDEN = ' '.
node-disabled = 'X'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-text = 'DL'.
append node to node_table.
endform. " BUILD_NODE_TABLE
에러가 아니라 덤프입니다.
The current application triggered a termination with a short dump.
000220 CASE SY-SUBRC.
000230 WHEN 0.
000240 WHEN 1.
000250 * system_error
000260 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 007 RA
000270 WHEN 2.
000280 * method_call_error
> MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RA
000300 WHEN 3.
000310 * property_set_error
000320 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RA
000330 WHEN 4.
000340 * property_get_error
000350 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RA
000360 WHEN OTHERS.
000370 RAISE CNTL_ERROR.
000380 ENDCASE.
000390
000400 ENDFUNCTION.