文档库 最新最全的文档下载
当前位置:文档库 › ABAP 树型菜单程序

ABAP 树型菜单程序

ABAP 树型菜单程序
ABAP 树型菜单程序

ABAP 树型菜单程序

Jerry 项目中树型菜单很少用到,但是学会了,也是一种好事。最近,客户方就有一个要求,能够实现特殊的文档管理,包括动态的树型菜单。此文档中,我就介绍如何用ABAP创建一个简单的树型菜单!下面几个步骤只讲创建树型菜单几个重要的地方,最后面是详细的实现代码。建议学者粗略看看步骤,重点看最后的代码,然后自己学着按下面的DEMO写测试程序,直到成功为止,如有不懂的地方,可以到群内留言。或者文档有写得不好的地方,也可以提出来,我们一起加以改善!

一. 创建一个DIALOG屏幕(0900),创建一个定制控制: TREE_CONTAINER,作为一个容器来存放程序创建的

树型菜单,如下图所示:

二. 在屏幕PBO事件中,创建一个MOUDLE: m_init_tree,然后创建一个Subroutine: frm_init_tree。

在Subroutine中创建一个Object: g_application,g_application指向自己创建的一个Class:lcl_application。这个Class主要定义了一些事件,比如单击,双击,展开,链接单击等事件,用来注册及捕获树型菜单的父节点,子节点单击,双击,展开,链接单击等事件,然后在自己Class :lcl_application中相应自定义的Method中写相应的Code,实现特殊的操作。

三. 用程序创建一个容器类cl_gui_custom_container的实例g_custom_container,代码如下

CREATE OBJECT g_custom_container

EXPORTING

container_name = 'TREE_CONTAINER'

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

从上面的代码可以看出,程序创建了一个指向步骤一创建的定制控制: TREE_CONTAINER一个自定义容器类.

四. 设置树型菜单名称,宽度,菜单列数,并创建树型菜单Class:cl_gui_column_tree实例:g_tree,并和

屏幕容器相关联

hierarchy_header-heading = '资源管理'. "树型菜单名称

hierarchy_header-width = 50. "宽度

CREATE OBJECT g_tree

EXPORTING

parent = g_custom_container "将创建的树型菜单和屏幕容器相关联 node_selection_mode = cl_gui_column_tree=>node_sel_mode_single "模式 item_selection = 'X'

hierarchy_column_name = c_column-column1 "列数

hierarchy_header = hierarchy_header

EXCEPTIONS

cntl_system_error = 1

create_error = 2

failed = 3

illegal_node_selection_mode = 4

illegal_column_name = 5

lifetime_error = 6.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

五. 定义树型菜单的一些事件,比如单击,双击等

" node double click根节点双击

event-eventid = cl_gui_column_tree=>eventid_node_double_click.

event-appl_event = 'X'. " process PAI if event occurs

APPEND event TO events.

" item double click子节点双击

event-eventid = cl_gui_column_tree=>eventid_item_double_click.

event-appl_event = 'X'.

APPEND event TO events.

" expand no children展开文件

event-eventid = cl_gui_column_tree=>eventid_expand_no_children.

event-appl_event = 'X'.

APPEND event TO events.

" link click链接单击,我认为是最后的子节点单击

event-eventid = cl_gui_column_tree=>eventid_link_click.

event-appl_event = 'X'.

APPEND event TO events.

" button click

event-eventid = cl_gui_column_tree=>eventid_button_click.

event-appl_event = 'X'.

APPEND event TO events.

" checkbox change

event-eventid = cl_gui_column_tree=>eventid_checkbox_change.

event-appl_event = 'X'.

APPEND event TO events.

" header click

event-eventid = cl_gui_column_tree=>eventid_header_click.

event-appl_event = 'X'.

APPEND event TO events.

设置类实例g_tree的相关事件,因为类g_tree的属性event默认为空,所以在这里要调用

set_registered_events设置事件

CALL METHOD g_tree->set_registered_events

EXPORTING

events = events

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

illegal_event_combination = 3.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

六. 注册树型菜单事件到第二步中创建的类lcl_application的实例g_application,然后我们就可以在

g_application中相关的方法中捕获树型菜单的相关事件,写自己的程序作特殊的处理。

比如SET HANDLER g_application->handle_node_double_click FOR g_tree.注册树型菜单双击事件句柄

七. 添加树型菜单子节点

主要用到树型菜单的g_tree的treev_ntab属性treev_ntab的四个属性非常重要,一个是node_key,就是为此节点起命名,树型菜单中的每一个节点都必须有一个命名,并且必须唯一。第二个属性是relatkey,

就是指定本节点从属于那一个节点之下,也就是指定它的上级节点,如果是根节点,就无需指定。第三个属性isfolder,就是说指定节点是否允许有子节点。第四个expander就是节点是否可以展开。节点的属性设置好后,就可以调用g_tree的method: add_nodes_and_items来添加树型菜单节点,以下的DEMO就刚开始就添加了”业扩工程”,“在建工程”,”改造工程”三个根节点。

八. 展示根节点,调用g_tree的expand_node方法将第七步的三个根节点进行展示.启动程序,将会看到

屏幕上就有了一个简单的树型菜单,至于怎么在这三个根节点下再加子节点,读者就自己看

OK_CODE:ADD事件里的代码,道理是一样的。

完整的程序代码

*&---------------------------------------------------------------------*

*& Report YTEST2

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT y_tree_test.

TYPES: item_table_type LIKE STANDARD TABLE OF mtreeitm

WITH DEFAULT KEY.

DATA: it_pic_data TYPE TABLE OF /sc1/pic_data,

it_data_output TYPE TABLE OF /sc1/pic_data,

wa_pic_data TYPE /sc1/pic_data,

it_data_collect TYPE TABLE OF /sc1/pic_data,

wa_data_collect TYPE /sc1/pic_data.

DATA: it_data TYPE TABLE OF bapiconten WITH HEADER LINE.

DATA: v_url(255) TYPE c,

v_index TYPE i.

DATA: g_event(30),

g_node_key TYPE tv_nodekey,

g_item_name TYPE tv_itmname,

g_header_name TYPE tv_hdrname.

DATA: o_container TYPE REF TO cl_gui_custom_container,

o_container1 TYPE REF TO cl_gui_custom_container,

o_container2 TYPE REF TO cl_gui_custom_container,

o_container3 TYPE REF TO cl_gui_custom_container,

o_container4 TYPE REF TO cl_gui_custom_container,

o_container5 TYPE REF TO cl_gui_custom_container,

o_container6 TYPE REF TO cl_gui_custom_container,

o_picture TYPE REF TO cl_gui_picture,

o_picture1 TYPE REF TO cl_gui_picture,

o_picture2 TYPE REF TO cl_gui_picture,

o_picture3 TYPE REF TO cl_gui_picture,

o_picture4 TYPE REF TO cl_gui_picture,

o_picture5 TYPE REF TO cl_gui_picture,

o_picture6 TYPE REF TO cl_gui_picture.

DATA: total_page(255) TYPE c VALUE '第3页/共5页'.

DATA: g_tc_pic_upload_lines LIKE sy-loopc.

DATA p_comp_code LIKE t001-bukrs.

DATA p_prctr TYPE /dsd/sl_bso.

DATA p_kunnr TYPE kna1-kunnr.

DATA pic_name(30) TYPE c..

DATA p_pic_type TYPE /sc1/e_pic_type.

DATA pic_name1 TYPE name1.

DATA pic_num TYPE /sc1/pic_num.

DATA g_1st_time TYPE xflag.

DATA: node_table TYPE treev_ntab,

node TYPE treev_node,

item_table TYPE item_table_type,

item TYPE mtreeitm,

lv_nodekey TYPE tv_nodekey.

DATA: ok_code TYPE sy-ucomm.

CONSTANTS:

BEGIN OF c_nodekey,

root TYPE tv_nodekey VALUE 'root',

root2 TYPE tv_nodekey VALUE 'root2',

root3 TYPE tv_nodekey VALUE 'root3', "#EC NOTEXT child1 TYPE tv_nodekey VALUE 'Child1', "#EC NOTEXT child2 TYPE tv_nodekey VALUE 'Child2', "#EC NOTEXT new1 TYPE tv_nodekey VALUE 'New1', "#EC NOTEXT new2 TYPE tv_nodekey VALUE 'New2', "#EC NOTEXT * new3 type tv_nodekey value 'New3', "#EC NOTEXT * new4 type tv_nodekey value 'New4', "#EC NOTEXT END OF c_nodekey,

BEGIN OF c_column,

column1 TYPE tv_itmname VALUE 'column1', "#EC NOTEXT column2 TYPE tv_itmname VALUE 'column2', "#EC NOTEXT

column3 TYPE tv_itmname VALUE 'column3', "#EC NOTEXT column4 TYPE tv_itmname VALUE 'column4',

column5 TYPE tv_itmname VALUE 'column5',

column6 TYPE tv_itmname VALUE 'column6',

column7 TYPE tv_itmname VALUE 'column7',

column8 TYPE tv_itmname VALUE 'column8',

END OF c_column.

*----------------------------------------------------------------------* * CLASS lcl_application DEFINITION

*----------------------------------------------------------------------* *

*----------------------------------------------------------------------* CLASS lcl_application DEFINITION.

PUBLIC SECTION.

METHODS:

handle_node_double_click

FOR EVENT node_double_click

OF cl_gui_column_tree

IMPORTING node_key,

handle_header_click

FOR EVENT header_click

OF cl_gui_column_tree

IMPORTING header_name,

handle_expand_no_children

FOR EVENT expand_no_children

OF cl_gui_column_tree

IMPORTING node_key,

handle_item_double_click

FOR EVENT item_double_click

OF cl_gui_column_tree

IMPORTING node_key item_name,

handle_button_click

FOR EVENT button_click

OF cl_gui_column_tree

IMPORTING node_key item_name,

handle_link_click

FOR EVENT link_click

OF cl_gui_column_tree

IMPORTING node_key item_name,

handle_checkbox_change

FOR EVENT checkbox_change

OF cl_gui_column_tree

IMPORTING node_key item_name checked.

ENDCLASS. "LCL_APPLICATION DEFINITION

*----------------------------------------------------------------------* * CLASS LCL_APPLICATION IMPLEMENTATION

*----------------------------------------------------------------------* *

*----------------------------------------------------------------------* CLASS lcl_application IMPLEMENTATION.

METHOD handle_node_double_click.

" this method handles the node double click event of the tree

" control instance

" show the key of the double clicked node in a dynpro field

* g_event = 'NODE_DOUBLE_CLICK'.

* g_node_key = node_key.

CLEAR wa_pic_data.

CLEAR it_data[].

ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK

METHOD handle_header_click.

" this method handles header click event of the tree

" control instance

" show the name of the clicked header in a dynpro field

g_event = 'HEADER_CLICK'.

g_header_name = header_name.

CLEAR: g_node_key, g_item_name.

ENDMETHOD. "HANDLE_HEADER_CLICK

METHOD handle_item_double_click.

" this method handles the item double click event of the tree

" control instance

DATA lwa_bds TYPE bds_conn00.

DATA: bdcdata_wa TYPE bdcdata,

bdcdata_tab TYPE TABLE OF bdcdata.

DATA opt TYPE ctu_params.

opt-dismode = 'E'.

opt-defsize = 'X'.

" show the key of the node and the name of the item

" of the double clicked item in a dynpro field

g_event = 'ITEM_DOUBLE_CLICK'.

g_node_key = node_key.

g_item_name = item_name.

CLEAR wa_pic_data.

CLEAR it_data[].

SELECT SINGLE * INTO CORRESPONDING FIELDS OF wa_pic_data FROM /sc1/pic_data WHERE /sc1/pic_data~pic_num = g_node_key.

IF sy-subrc EQ 0.

IF o_picture1 IS INITIAL.

CREATE OBJECT: o_container1 EXPORTING container_name = 'PIC_CONTAINER1', o_picture1 EXPORTING parent = o_container1.

CLEAR v_url.

* READ TABLE it_pic_data INTO wa_pic_data INDEX v_index.

* pic_name = wa_pic_data-pic_nam.

CALL FUNCTION '/SC1/TIN_BD_GET_TO_TAB'

EXPORTING

doc_id = wa_pic_data-loio_id

TABLES

et_file_content = it_data.

CALL FUNCTION 'DP_CREATE_URL'

EXPORTING

type = 'IMAGE'

subtype = 'X-UNKNOWN'

TABLES

data = it_data

CHANGING

url = v_url.

CALL METHOD o_picture1->load_picture_from_url

EXPORTING

url = v_url.

CALL METHOD o_picture1->set_display_mode

EXPORTING

display_mode = o_picture1->display_mode.

ELSE.

CLEAR v_url.

* READ TABLE it_pic_data INTO wa_pic_data INDEX v_index.

* pic_name = wa_pic_data-pic_nam.

CALL FUNCTION '/SC1/TIN_BD_GET_TO_TAB'

EXPORTING

doc_id = wa_pic_data-loio_id

TABLES

et_file_content = it_data.

CALL FUNCTION 'DP_CREATE_URL'

EXPORTING

type = 'IMAGE'

subtype = 'X-UNKNOWN'

TABLES

data = it_data

CHANGING

url = v_url.

CALL METHOD o_picture1->clear_picture.

CALL METHOD o_picture1->load_picture_from_url

EXPORTING

url = v_url.

CALL METHOD cl_gui_cfw=>flush.

IF sy-subrc EQ 0.

CALL METHOD o_picture1->set_display_mode

EXPORTING

display_mode = o_picture1->display_mode.

ENDIF.

ENDIF.

pic_name1 = wa_pic_data-pic_nam.

pic_num = wa_pic_data-pic_num.

ENDIF.

ENDMETHOD. "HANDLE_ITEM_DOUBLE_CLICK

METHOD handle_link_click.

" this method handles the link click event of the tree " control instance

" show the key of the node and the name of the item

" of the clicked link in a dynpro field

g_event = 'LINK_CLICK'.

g_node_key = node_key.

g_item_name = item_name.

CLEAR g_header_name.

ENDMETHOD. "HANDLE_LINK_CLICK

METHOD handle_button_click.

" this method handles the button click event of the tree

" control instance

" show the key of the node and the name of the item

" of the clicked button in a dynpro field

g_event = 'BUTTON_CLICK'.

g_node_key = node_key.

g_item_name = item_name.

CLEAR g_header_name.

ENDMETHOD. "HANDLE_BUTTON_CLICK

METHOD handle_checkbox_change .

" this method handles the checkbox_change event of the tree " control instance

* DATA checked TYPE as4flag.

" show the key of the node and the name of the item

" of the clicked checkbox in a dynpro field

g_event = 'CHECKBOX_CHANGE'.

g_node_key = node_key.

g_item_name = item_name.

CLEAR g_header_name.

CASE node-relatkey .

WHEN 'root'.

WHEN 'root3'.

ENDCASE.

ENDMETHOD. "HANDLE_CHECKBOX_CHANGE

METHOD handle_expand_no_children.

ENDMETHOD. "HANDLE_EXPAND_NO_CHILDREN ENDCLASS. "LCL_APPLICATION IMPLEMENTATION

DATA: g_application TYPE REF TO lcl_application,

g_custom_container TYPE REF TO cl_gui_custom_container,

g_tree TYPE REF TO cl_gui_column_tree,

g_ok_code TYPE sy-ucomm.

START-OF-SELECTION.

CALL SCREEN 0900.

*&---------------------------------------------------------------------* *& Module STATUS_0900 OUTPUT

*&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* MODULE status_0900 OUTPUT.

SET PF-STATUS 'STATUS_0900'.

* SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0900 OUTPUT

*&---------------------------------------------------------------------* *& Module M_INIT_TREE OUTPUT

*&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* MODULE m_init_tree OUTPUT.

PERFORM frm_init_tree.

ENDMODULE. " M_INIT_TREE OUTPUT

*&---------------------------------------------------------------------* *& Form FRM_INIT_TREE

*&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* * --> p1 text

* <-- p2 text

*----------------------------------------------------------------------* FORM frm_init_tree .

DATA: node_table TYPE treev_ntab,

item_table TYPE item_table_type,

event TYPE cntl_simple_event,

events TYPE cntl_simple_events,

hierarchy_header TYPE treev_hhdr.

IF g_tree IS INITIAL.

CREATE OBJECT g_application.

* create a container for the tree control

CREATE OBJECT g_custom_container

EXPORTING " the container is linked to the custom control with the " name 'TREE_CONTAINER' on the dynpro

container_name = 'TREE_CONTAINER'

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

* setup the hierarchy header

hierarchy_header-heading = '资源管理'.

" heading

hierarchy_header-width = 50. " width: 30 characters

CREATE OBJECT g_tree

EXPORTING

parent = g_custom_container

node_selection_mode = cl_gui_column_tree=>node_sel_mode_single item_selection = 'X'

hierarchy_column_name = c_column-column1

hierarchy_header = hierarchy_header

EXCEPTIONS

cntl_system_error = 1

create_error = 2

failed = 3

illegal_node_selection_mode = 4

illegal_column_name = 5

lifetime_error = 6.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

* define the events which will be passed to the backend

" node double click

event-eventid = cl_gui_column_tree=>eventid_node_double_click. event-appl_event = 'X'. " process PAI if event occurs

APPEND event TO events.

" item double click

event-eventid = cl_gui_column_tree=>eventid_item_double_click. event-appl_event = 'X'.

APPEND event TO events.

" expand no children

event-eventid = cl_gui_column_tree=>eventid_expand_no_children. event-appl_event = 'X'.

APPEND event TO events.

" link click

event-eventid = cl_gui_column_tree=>eventid_link_click.

event-appl_event = 'X'.

APPEND event TO events.

" button click

event-eventid = cl_gui_column_tree=>eventid_button_click.

event-appl_event = 'X'.

APPEND event TO events.

" checkbox change

event-eventid = cl_gui_column_tree=>eventid_checkbox_change.

event-appl_event = 'X'.

APPEND event TO events.

" header click

event-eventid = cl_gui_column_tree=>eventid_header_click.

event-appl_event = 'X'.

APPEND event TO events.

CALL METHOD g_tree->set_registered_events

EXPORTING

events = events

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

illegal_event_combination = 3.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

* assign event handlers in the application class to each desired event SET HANDLER g_application->handle_node_double_click FOR g_tree.

SET HANDLER g_application->handle_item_double_click FOR g_tree.

SET HANDLER g_application->handle_expand_no_children FOR g_tree.

SET HANDLER g_application->handle_link_click FOR g_tree.

SET HANDLER g_application->handle_button_click FOR g_tree.

SET HANDLER g_application->handle_checkbox_change FOR g_tree.

SET HANDLER g_application->handle_header_click FOR g_tree.

PERFORM build_node_and_item_table USING node_table item_table.

CALL METHOD g_tree->add_nodes_and_items

EXPORTING

node_table = node_table

item_table = item_table

item_table_structure_name = 'MTREEITM'

EXCEPTIONS

failed = 1

cntl_system_error = 3

error_in_tables = 4

dp_error = 5

table_structure_name_not_found = 6.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

* expand the node with key 'Root'

CALL METHOD g_tree->expand_node

EXPORTING

node_key = c_nodekey-root

EXCEPTIONS

failed = 1

illegal_level_count = 2

cntl_system_error = 3

node_not_found = 4

cannot_expand_leaf = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

ENDIF.

ENDFORM. " FRM_INIT_TREE

*&---------------------------------------------------------------------* *& Form BUILD_NODE_AND_ITEM_TABLE

*&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* * -->P_NODE_TABLE text

* -->P_ITEM_TABLE text

*----------------------------------------------------------------------* FORM build_node_and_item_table USING node_table TYPE treev_ntab

item_table TYPE item_table_type. DATA: node TYPE treev_node,

item TYPE mtreeitm.

* Build the node table.

* Caution: The nodes are inserted into the tree according to the order * in which they occur in the table. In consequence, a node must not

* must not occur in the node table before its parent node.

* Node with key 'Root'

node-node_key = c_nodekey-root.

" Key of the node

CLEAR node-relatkey. " Special case: A root node has no parent CLEAR node-relatship. " node.

CLEAR node-n_image. " Folder-/ Leaf-Symbol in state "closed": " use default.

CLEAR node-exp_image. " Folder-/ Leaf-Symbol in state "open":

" use default

CLEAR node-expander. " see below.

* node-relatship = cl_gui_column_tree=>relat_last_child.

node-hidden = ' '. " The node is visible,

node-disabled = ' '. " selectable,

node-isfolder = 'X'. " a folder.

node-expander = 'X'.

APPEND node TO node_table.

node-node_key = c_nodekey-root2.

" Key of the node

CLEAR node-relatkey. " Special case: A root node has no parent CLEAR node-relatship. " node.

CLEAR node-n_image. " Folder-/ Leaf-Symbol in state "closed": " use default.

CLEAR node-exp_image. " Folder-/ Leaf-Symbol in state "open":

" use default

CLEAR node-expander. " see below.

* node-relatship = cl_gui_column_tree=>relat_last_child.

node-hidden = ' '. " The node is visible,

node-disabled = ' '. " selectable,

node-isfolder = 'X'. " a folder.

node-expander = 'X'.

APPEND node TO node_table.

node-node_key = c_nodekey-root3.

" Key of the node

CLEAR node-relatkey. " Special case: A root node has no parent CLEAR node-relatship. " node.

CLEAR node-n_image. " Folder-/ Leaf-Symbol in state "closed": " use default.

CLEAR node-exp_image. " Folder-/ Leaf-Symbol in state "open": " use default

CLEAR node-expander. " see below.

* node-relatship = cl_gui_column_tree=>relat_last_child.

node-hidden = ' '. " The node is visible,

node-disabled = ' '. " selectable,

node-isfolder = 'X'. " a folder.

node-expander = 'X'.

APPEND node TO node_table.

* Node with key 'Root'

CLEAR item.

item-node_key = c_nodekey-root.

item-item_name = c_column-column1. " Item of Column 'Column1' item-class = cl_gui_column_tree=>item_class_text. " Text Item

item-text = '业扩工程'.

APPEND item TO item_table.

CLEAR item.

item-node_key = c_nodekey-root3.

item-item_name = c_column-column1. " Item of Column 'Column1' item-class = cl_gui_column_tree=>item_class_text. " Text Item

item-text = '在建工程'.

APPEND item TO item_table.

*

CLEAR item.

item-node_key = c_nodekey-root2.

item-item_name = c_column-column1. " Item of Column 'Column1'

item-class = cl_gui_column_tree=>item_class_text. " Text Item

item-text = '改造工程'.

APPEND item TO item_table.

ENDFORM. " BUILD_NODE_AND_ITEM_TABLE

*&---------------------------------------------------------------------*

*& Module CANCEL_9000 INPUT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------* MODULE cancel_9000 INPUT.

CASE ok_code .

WHEN 'BACK' OR 'EXIT'.

LEAVE PROGRAM.

WHEN 'CANCY'.

LEAVE PROGRAM.

ENDCASE.

ENDMODULE. " CANCEL_9000 INPUT

*&---------------------------------------------------------------------*

*& Module USER_COMMAND_0900 INPUT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------* MODULE user_command_0900 INPUT.

DATA: node_delete TYPE treev_upno.

DATA lv_vbeln TYPE vbeln_vl.

DATA: it_delete_nodes TYPE treev_nks.

DATA: wa_delete_nodes TYPE tv_nodekey.

CLEAR: it_data_collect[].

CASE ok_code.

WHEN 'ADD'.

CLEAR: it_data_collect[].

CALL METHOD g_tree->delete_all_nodes.

CLEAR: node_table[], item_table[].

PERFORM build_node_and_item_table USING node_table item_table.

* 业扩工程下面添加一个节点分城镇和居民

PERFORM frm_node_item_create USING 'COMP1' c_nodekey-root '城镇居民' ''. PERFORM frm_node_item_create USING 'PRCTR1' 'COMP1' 'AAAA' ''.

PERFORM frm_node_item_create USING 'COMP2' c_nodekey-root '农村居民' ''. PERFORM frm_node_item_create USING 'PRCTR2' 'COMP2' 'BBBB' ''.

CALL METHOD g_tree->add_nodes_and_items

EXPORTING

node_table = node_table item_table = item_table item_table_structure_name = 'MTREEITM' EXCEPTIONS

failed = 1

cntl_system_error = 3

error_in_tables = 4

dp_error = 5

table_structure_name_not_found = 6.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

* expand the node with key 'Root'

CALL METHOD g_tree->expand_node

EXPORTING

node_key = c_nodekey-root

EXCEPTIONS

failed = 1

illegal_level_count = 2

cntl_system_error = 3

node_not_found = 4

cannot_expand_leaf = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

CALL METHOD g_tree->expand_node

EXPORTING

node_key = c_nodekey-root2

EXCEPTIONS

failed = 1

illegal_level_count = 2

cntl_system_error = 3

node_not_found = 4

cannot_expand_leaf = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

CALL METHOD g_tree->expand_node

EXPORTING

node_key = c_nodekey-root3

EXCEPTIONS

failed = 1

illegal_level_count = 2

cntl_system_error = 3

node_not_found = 4

cannot_expand_leaf = 5.

IF sy-subrc <> 0.

* MESSAGE a000.

ENDIF.

IF p_kunnr IS NOT INITIAL.

CALL METHOD g_tree->expand_root_nodes

EXPORTING

level_count = 4.

ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_0900 INPUT

*&---------------------------------------------------------------------* *& Form FRM_NODE_ITEM_CREATE

*&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* * -->P_1221 text

* -->P_C_NODEKEY_ROOT text

* -->P_1223 text

* -->P_1224 text

*----------------------------------------------------------------------* FORM frm_node_item_create USING p_p_nodekey

p_p_relatkey

p_p_item_text

p_p_last_child.

node-node_key = p_p_nodekey.

" Key of the node

* CLEAR node.

CLEAR node-relatkey. " Special case: A root node has no parent CLEAR node-relatship. " node.

CLEAR node-n_image. " Folder-/ Leaf-Symbol in state "closed": " use default.

CLEAR node-exp_image. " Folder-/ Leaf-Symbol in state "open":

" use default

CLEAR node-expander. " see below.

IF p_p_last_child = 'X'.

node-relatship = cl_gui_column_tree=>relat_last_child.

node-isfolder = ''.

node-expander = ''.

node-last_hitem = p_p_nodekey.

ELSE.

node-isfolder = 'X'. " a folder.

node-expander = 'X'.

ENDIF.

node-relatkey = p_p_relatkey.

node-hidden = ' '. " The node is visible,

node-disabled = ' '. " selectable,

APPEND node TO node_table.

CLEAR item.

item-node_key = p_p_nodekey .

item-item_name = c_column-column1. " Item of Column 'Column1' item-class = cl_gui_column_tree=>item_class_text. " Text Item

item-text = p_p_item_text.

APPEND item TO item_table.

ENDFORM. " FRM_NODE_ITEM_CREATE

程序三种基本结构教案

程序三种基本结构教案 设计者:李明昊执教者:李明昊学号:0610220007 时间:2007年12月27日 一、教材内容 选自河北教育出版社、河北教育音像出版社出版的《信息技术2》(初中二年级)第三单元第十二课第2小节,具体内容如下: 1、顺序结构就是各运算步骤按照顺序依次执行,分支中重复的程序结构。 2、选择结构又叫分支结构,当程序执行到某一步时,会到一个条件判断,这个条件有几个结论就会有几个分支,程序会根据不同结论执行相应的分支。 3、活动:设计判断闰年的程序。 4、循环结构:程序执行到某一步后,会遇到一个条件,满足了条件,循环体就被执行;反之,程序会跳过这个循环体而继续向下执行,并且控制条件决定着循环的次数。 5、活动:编写画同心圆程序。 二、学生特征分析 1、该课程的对象为初中二年级的学生。(由本班大二同学模拟) 2、同学在以前的学习中已掌握了用流程图描述算法,同时也对VB有了一定的感性 认识。 3、学生对那些照本宣科的理论在学习上并不会有太大的兴趣,所以要以一种大家喜 欢的、活泼的形式进行教学。 三、教学内容与学习水平的分析与确定 3、分析教学的重点与难点 1)、教学重点 程序设计中的三种基本结构及应用它们通过流程图来画出一些简单问题的解决方法。 2)、教学难点: 如何让学生能更好的认识、理解三种结构,同时应用到实际问题中,使同学们习

惯用计算机的逻辑方式解决问题 注:1、媒体在教学中的作用分为:A、展示事实;B、创设情景;C、提供示范;D、呈现过程,解释原理; E、设疑思辨,解决问题; F、其他。 2、媒体使用方式包括:A、设疑——播放——讲评;B、讲解——播放——概括;C、讲解——播放——举例;D、边播放,边讲解;E、复习巩固;F、其他。 PPT设计:见PPT

程序的三种基本逻辑结构

程序的三种基本逻辑结 构 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

学习目标 在具体问题的解决过程中,理解程序框图的三种基本逻辑结构:顺序结构、条件结构、循环结构. 学习过程 提出问题 (1)请大家再次观察上节课中所画的一些程序框图例子. (2)回答什么是顺序结构什么是条件分支结构什么是循环结构、循环体 (3)试用程序框图表示循环结构. (4)指出三种基本逻辑结构结构的相同点和不同点. 讨论结果: 很明显,顺序结构是由若干个依次执行的步骤组成的,这是任何一个算法都离不开的基本结构. 三种逻辑结构可以用如下程序框图表示: 顺序结构 条件结构 循环结构 应用示例 例1 阅读以下程序框图,分析其所实现的算法功能. 算法分析:第1步,0+1=1. 第2步,1+2=3. 第3步,3+3=6. 第4步,6+4=10. …… 第100步,4 950+100=5 050. 步都可以表示为第(i-1)步的结果+i=第i 步的结果. 为了方便、有效地表示上述过程,我们用一个累加 变量S 来表示第一步的计算结果,即把S+i 的结果 仍记为S ,从而把第i 步表示为S=S+i , 其中S 的初始值为0,i 依次取1,2,…,100,由 于i 同时记录了循环的次数,所以也称为计数变量. 解决这一问题的算法是: 第一步,令i=1,S=0. 第二步,若i≤100成立,则执行第三步;否则,输 出S ,结束算法. 第三步,S=S+i. 第四步,i=i+1,返回第二步. 程序框图如右: (1)(2) 点评:在数学计算中,i=i+1不成立,S=S+i 只有在i=0时才能成立.在计算机程序中,它们被赋予了其他的功能,不再是数学中的“相等”关系,而是赋值关系.变量i 用来作计数器,i=i+1的含义是:将变量i 的值加1,然后把计算结果再存贮到变量i 中,即计数器i 在原值的基础上又增加了1.变量S 作为累加器,来计算所求数据之和.如累加器的初值为0,当第一个数据送到变量i 中时,累加的动作为S=S+i ,即把S 的值与变量i 的值相加,结果再送到累加器S 中,如此循环,则可实现数的累加求和. 变式训练 已知有一列数 1 ,,43,32,21 n n ,设计框图实现求该列数前20项的和.

程序的三种基本结构

上课时间第星期第课时年级初中三年级课题第十课顺序结构课型新授课教材新疆教育出版课时安排1课时 教学目标 知识与 技能 1.了解程序的循序结构特征,并能画出它们的流程图。 2.熟悉利用val()函数的使用。 过程与 方法 通过教学实例的分析,让学生体验利用程序的循序本结构编写计 算机程序,解决实际问题。 情感态度 价值观 培养学生的逻辑思维能力 教学理念和方法 通过教学实例的讲练,以教师为主导,学生主动,体验思考,讲练结合,以任务驱动等方式来完成教学内容。 教学资源多媒体教学网络,教师制作的课件等。 教学过程 教学内容的组织与呈现方式:以实例分析深入展开,小结归纳,将程序的三种基本结构的执行过程和特点一一呈现,通过不同的练习,让学生从中慢慢理解并掌握程序的三种基本结构的执行过程,最后完成课堂自评。 教学环节教师教学 学生活 动 设计意图 复习引入我们学习了“求圆面积”的程序,请看程序段 (演示),程序中语句的执行是如何的? 教师解释,程序的执行是按顺序从第一条语句 开始执行到最后一条语句,这种程序结构称为 顺序结构,是程序三种基本结构的一种。 学生思考, 回答。 引起学生的 思考。 新课讲授 顺序结构的基本概念顺序结构是最简单的程序结构,它是由若干个 依次执行的处理步骤组成的。如图,A语句和 B语句是依次执行的,只有在执行完A语句后, 才能接着执行B语句。学生听讲 解,观看流 程图,并思 考问题。 了解顺序结 构的执行过 程。 顺序结构程序的实例分析应用举例:交换两个数的值。 题目:输入两个数,然后交换这两个数,再输 出它们交换后的结果。 (1)分析问题。 教师提示要交换两个数,要利用几个变量来保 存数据? 学生思考。 通过实例分 析,让学生明 确顺序结构 的执行过程。

程序的三种基本结构

程序的三种基本结构 荷兰学者Dijkstra提出了"结构化程序设计"的思想,它规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性.这种方法要求程序设计者不能随心所欲地编写程序,而要按照一定的结构形式来设计和编写程序.它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率. 结构化程序规定了以下三种基本结构作为程序的基本单元: (1) 顺序结构. 见图1-1 在这个结构中的各块是只能顺序执行的. (2) 判断选择结构.见图1-2 根据给定的条件是否满足执行A块或B块. 图1-1 图1-2 (3) 循环结构.见图1-3和图1-4. 图1-3表示的结构称为"当型"循环.当给定的条件满足时执行A块,否则不执行A块而直接跳到下面部分执行.图1-4表示的结构称为"直到型"循环,它的含义是:执行A块直到满足给定的条件为止(满足了条件就不再执行A块).这两种循环的区别是:当型循环是先判断(条件)再执行,而直到型循环是先执行后判断. 图1-3 图1-4 以上三种基本结构可以派生出其它形式的结构.由这三种基本结构所构成的算法可以处理任何复杂的问题.所谓结构化程序就是由这三种基本结构所组成的程序.

可以看到,三种基本结构都具有以下特点: ① 有一个入口. ② 有一个出口. ③ 结构中每一部分都应当有被执行到的机会,也就是说,每一部分都应当有一条从入口到出口的路径通过它(至少通过一次). ④ 没有死循环(无终止的循环). 结构化程序要求每一基本结构具有单入口和单出口的性质是十分重要的,这是为了便于保证和验证程序的正确性.设计程序时一个结构一个结构地顺序写下来,整个程序结构如同一串珠子一样顺序清楚,层次分明.在需要修改程序时,可以将某一基本结构单独孤立出来进行修改,由于单入口单出口的性质,不致影响到其它的基本结构.

程序的三种基本结构是(

第三章练习题 3.1-1 程序的三种基本结构是( )结构,( )结构和( )结构,它们的共同特点是()。 3.2-1 如果执行if(x>3)cout<<'A';else cout<<'B';后屏幕上显示的是B,说明x>3的值是()。 3.2-2 如果x的值为234,y的值为-54,则执行 if(x>0)cout<<'A'; if(y<-8)cout<<'B'; 后屏幕上显示的是( )。 3.2-3 如果x的值为4,y的值为-55,则执行 if(x>0) if(x>10)cout<<'A'; else cout<<'B'; else if(y<-8) if(y>-20)cout<<'C'; else cout<<'D'; 后屏幕显示的是( )。 3.2-4 借助于临时变量t交换x和y两个变量的值,应顺序执行的三个赋值语句是(),()和()。 3.2-5 把if(OK)if(READY)y=-1;else y=0;else y=1;中嵌套的if语句改为嵌套在外层if语句else 之后,更改后的语句是()。 3.2-6 从2个数中挑选出最大的至少需要进行( )次比较,从3个数中挑选出最大的至少需要进行( )次比较,从4个数中挑选出最大的至少需要进行( )次比较,从n个数中挑选出最大的至少需要进行( )次比较。 3.2-7 执行if(x>100&&x==0)cout<<"ABC";else cout<<"XYZ";屏幕上显示的是( )。 3.2-8 与 switch(k){ case 1: case 2: case 3:cout<<'A';break; case 4: case 5:cout<<'B';break; default:cout<<'C';break; } 等效的if语句是( )。 3.2-9 与 if(x>=0&&x<=2)cout<<'X'; else if(x>=20&&x<=22)cout<<'Y'; else cout<<'Z'; (其中x是int型变量)等效的switch语句是()。 3.2-10 (多选)执行 cin>>k; if(k>100)cout<<'G'; if(k<100)cout<<'L';

相关文档