
目的:在BSP(BUSINESS SERVER PAGES)程序中调用WebDynpro页面。
说明:在实现该实例前,需先熟悉WebDynpro程序的开发。
涉及内容:
1.1 SE80 BSP程序调用WebDynpro页面
1.1.1 BSP页面添加按钮元素
1、T-CODE:SE80进入“对象导航“界面,程序类型选择“业务服务器页面应用程序”(英文:BusinessServerPages Application),然后在程序名处输入程序名,找到业务功能对应的视图,如图1.1.1-1:
图1.1.1-1
说明:
a、本练习对采购订单进行更改。
2、找到要添加WebDynpro页面的BSP视图页面,然后双击进入页面代码中,并将代码更改为可编辑状态,如图1.1.1-2:
图1.1.1-2
3、在BSP页面需要添加按钮的位置处添加按钮代码,如图1.1.1-3:
图1.1.1-3
说明:
a、代码如下:
"float:left">
','送货标签和货物标签打印' ,'width=800,height= 400,resizable=yes,scrollbars=yes')">
b、代码说明:
其中,变量lv_url是新页面的URL(下一节将讲URL如何获取值);为了让新按钮与自带按钮显示在同一行,在标准按钮控件前要加html 标签:"float:left">
1.1.2 BSP页面生成按钮元素URL
1、在BSP页面中添加生成URL代码,添加位置如图1.1.2-1:
图1.1.2-1
2、添加代码如下:
DATA: lv_url TYPE string,
d_url(255) TYPE c,
lv_app_name TYPE string,
host TYPE string,
port TYPE string,
out_protocol TYPE string,
in_parameters TYPE tihttpnvp,
wa_params LIKE LINE OF in_parameters,
lv_iview TYPE string,
gf_value_old TYPE /sapsrm/char512,
gf_clength TYPE int2.
DATA: lo_window_manager TYPE REF TO if_wd_window_manager,
lo_api_component TYPE REF TO if_wd_component,
lo_window TYPE REF TO if_wd_window.
* Use the WD application created and pass a value to the parameter SC_GUID:
wa_params-name = 'Z_ORDER_GUID'."Z_ORDER_GUID是URL参数名
wa_params-value = ls_header_po-GUID.
APPEND wa_params TO in_parameters.
lv_app_name = 'Z_ORDER_BC_PRINT'."Z_ORDER_BC_PRINT是WebDynpro程序名称
CALL METHOD cl_http_server=>if_http_server~get_location
IMPORTING
host = host
port = port
out_protocol = out_protocol.
CALL METHOD cl_wd_utilities=>construct_wd_url
EXPORTING
application_name = lv_app_name
in_host = host
in_port = port
in_protocol = out_protocol
in_parameters = in_parameters
namespace = 'sap'
IMPORTING
out_absolute_url = lv_url."lv_url为URL值存放的位置,在上一届添加按钮元素中调用
说明:
a、URL参数名Z_ORDER_GUID:新页面的数据关联是根据该参数(ORDER的GUID全球唯一标识)关联的;
b、WebDynpro程序名Z_ORDER_BC_PRINT:WebDynpro中进行开发;
c、如上代码直接嵌入BSP页面的抬头部分的<%...%>中。
到这里BSP程序调用WebDynpro页面就完成了。
1.2 SE80 WebDynpro页面初始化数据
这一节简要介绍BSP调用的WebDynpro程序"Z_ORDER_BC_PRINT"中数据的处理。如需了解WebDynpro的开发,请参考“ABAP-WebDynpro实例.docx”文件。
1.2.1 组件COMPONENTCONTROLLER配置
1、Context-Node创建,如图1.2.1-1:
图1.2.1-1
2、Context-Attribute创建,如图1.2.1-2:
图1.2.1-2
3、Methods-WDDOINIT控制器初始化数据,如图1.2.1-3:
图1.2.1-3
说明:
a、代码如下:
method WDDOINIT .
DATA lo_nd_z_order_guid TYPE REF TO if_wd_context_node.
DATA lo_el_z_order_guid TYPE REF TO if_wd_context_element.
"Element_z_order_guid由Element_和Context的名称组成
DATA ls_z_order_guid TYPE wd_this->Element_z_order_guid.
DATA lv_order_guid TYPE wd_this->Element_z_order_guid-order_guid.
* navigate from "wdctx_z_order_guid由wdctx_和Context的名称组成 lo_nd_z_order_guid = wd_context->get_child_node( name = wd_this->wdctx_z_order_guid ). * @TODO handle non existant child * IF lo_nd_z_asn_guid IS INITIAL. * ENDIF. * get element via lead selection lo_el_z_order_guid = lo_nd_z_order_guid->get_element( ). * @TODO handle not set lead selection IF lo_el_z_order_guid IS INITIAL. ENDIF. * @TODO fill attribute * lv_asn_guid = 1. lv_order_guid = cl_wd_runtime_services=>get_url_parameter( name = 'Z_ORDER_GUID' ). * set single attribute lo_el_z_order_guid->set_attribute( name = `ORDER_GUID` "Context的Attribute名 value = lv_order_guid ). endmethod. b、a中的代码就是获取WebDynpro程序的URL,并将URL的值赋给Context的Attribute。 1.2.2 视图初始化数据处理 这里只介绍视图中初始化数据的处理,对于其他业务操作不做介绍。 1、视图初始化数据,如图1.2.2-1: 图1.2.2-1 说明: a、代码如下: method WDDOINIT . DATA: lo_component TYPE REF TO if_wd_component, lo_context TYPE REF TO if_wd_context, lo_controller type REF TO if_wd_controller, lo_node type REF TO if_wd_context_node, lo_child TYPE REF TO if_wd_context_node, lo_cmp_usage TYPE REF TO if_wd_component_usage, lv_guid TYPE bbp_guid, lr_header_order TYPE BBP_PDS_SUSPO_HEADER_D, lr_items_order TYPE STANDARD TABLE OF BBP_PDS_SUSPO_ITEM_D, ls_items_order TYPE BBP_PDS_SUSPO_ITEM_D, lr_partern TYPE TABLE OF BBP_PDS_PARTNER, node_order_h TYPE REF TO if_wd_context_node, node_order_i TYPE REF TO if_wd_context_node, node_order_p TYPE REF TO if_wd_context_node. lo_component = wd_comp_controller->wd_get_api( ). lo_controller ?= lo_component. CALL METHOD lo_controller->get_context RECEIVING context = lo_context. lo_node = lo_context->root_node. lo_child = lo_node->get_child_node( 'Z_ORDER_GUID' ). CALL METHOD lo_child->GET_ATTRIBUTE EXPORTING NAME = 'ORDER_GUID' IMPORTING VALUE = lv_guid."获取全局Attribute'ORDER_GUID'赋给lv_guid CALL FUNCTION 'BBP_PD_SUSPO_GETDETAIL' EXPORTING I_GUID = lv_guid IMPORTING E_HEADER = lr_header_order * ET_ATTACH = TABLES E_ITEM = lr_items_order E_PARTNER = lr_partern."根据URL值lv_guid查询采购订单抬头、行项目、合作伙伴的信息,供后续使用 loop at lr_items_order INTO ls_items_order. SHIFT ls_items_order-ordered_prod LEFT DELETING LEADING '0'. SHIFT ls_items_order-SRC_ITM_ID LEFT DELETING LEADING '0'. SHIFT ls_items_order-NUMBER_INT LEFT DELETING LEADING '0'. modify lr_items_order FROM ls_items_order. ENDLOOP. DELETE lr_partern WHERE PARTNER_FCT <> '00000019'. node_order_h = WD_CONTEXT->get_Child_Node( name = 'Z_ORDER_PRINT_H' ). node_order_i = WD_CONTEXT->get_Child_Node( name = 'Z_ORDER_PRINT_I' ). node_order_p = WD_CONTEXT->get_Child_Node( name = 'Z_ORDER_PARTNER' ). node_order_h->BIND_STRUCTURE( lr_header_order ). node_order_i->bind_table( lr_items_order ). node_order_p->bind_table( lr_partern ). endmethod. 到这里BSP调用WebDynpro程序就完成了。
