WebDynpro开发01
=>标准示例包:SWDP_TEST
- WD UML
- Runtime Interface/Class
运行时 Class/Interface 描述 IF_WD_ACTION 此接口用于获取视图控制器中的Action IF_WD_APPLICATION 此接口功能用于获取设备的配置信息当前正在执行的WDA应用程序及其周围环境客户端环境
我们可以用这个界面来调整应用程序主窗口的标题,确定用户代理等等IF_WD_COMPONENT 此接口为我们提供了访问WDA所有对象的可能
运行时的视角
可通过 WD_GET_API() 获取对象引用IF_WD_CONTROLLER 此接口提供了一个控制器,可以访问各种element包含在其中的元素(Action Context)
还可以用于访问外部资源,消息管理器 控制器和组件(通过接口I F_WD_COMPONENT)IF_WD_MESSAGE_MANAGER 此接口提供了各种允许我们编写的方法,发送消息显示到UI中消息区域 IF_WD_VIEW 此接口提供了所有与视图交互的功能 IF_WD_WINDOW 此接口提供了所有与窗口交互的功能,OPEN() CLOSE() IF_WD_WINDOW_MANAGER 此接口用于窗口的管理 - Service Interface/Class
服务 Class/Interface 描述 CL_WD_CONTEXT_SERVICES 此类用于监视上下文节点的变化 CL_WD_DYNAMIC_TOOL 此类提供了各种帮助方法来简化Web Dynpro 中的动态编程任务,比如:检查UI 元素输入值 CL_WD_COMPONENT_ASSISTANCE 此抽象类定义了辅助类的核心功能 CL_WD_RUNTIME_SERVICES 此类提供了一些实用方法,可与 Web Dynpro 运行时环境交互 CL_WD_UTILITIES 此类提供了一些通用的 Web Dynpro实用的方法 CL_WD_TRACE_TOOL
IF_WD_TRACE_TOOLCL_WD_TRACE_TOOL 类用于将数据添加到Web Dynpro Trace Tool生成的跟踪文件
访问此功能,我们必须引用该类的静态实例属性,类型为IF_WD_TRACE_TOOLCL_WEB_DYNPRO 使用此类的静态 IS_ACTIVE 属性可以确定我们正在运行的代码是否在启动Web Dynpro 运行时环境中
第一步:创建一个Webdynpro组件
- 运行Tcode:SE80,新建Web Dynpro组件(接口)
第二步:新建一个视图用于显示数据
- 新建一个视图VIEW_INFORMATION
第三步:Component Controller上创建全局Context
- 创建Node:Context页签右键单击 Create->Node
- 节点MATNR_SELECTION创建选择屏幕字段:右键单击节点 Create->Attribute
- 节点MATNR_INFORMATION创建显示屏幕结构:使用向导添加结构Attribute到Node
第四步:Mapping Controller Context到View Context
- 视图:VIEW_SELECTION
- 视图:VIEW_INFORMATION
第五步:配置视图VIEW_SELECTION的Layout
- 设置UI Container属性
- UI Container中插入Element
-
ID: MATNR_TEXT TYPE: Label
-
ID: MATNR TYPE: INPUT FIELD
-
ID: BTN_SEARCH TYPE: Button
-
- MATNR_TEXT设置Labelfor
第六步:配置视图VIEW_INFORMATION的Layout
-
设置UI Container属性
-
UI Container中插入Element、
- ID: BTN_BACK TYPE: Button
- ID: BTN_BACK TYPE: Button
-
使用向导UI Container中插入Element
-
Mapping to View Context
-
Banding Property
-
第七步:配置视图Inbound Plugs Outbound Plugs
- 创建视图的Inbound Plugs Outbound Plugs
- VIEW_SELECTION->Inbound Plugs
- VIEW_SELECTION->Outbound Plugs
- VIEW_INFORMATION->Inbound Plugs
- VIEW_INFORMATION->Outbound Plugs
- VIEW_SELECTION->Inbound Plugs
- Mapping Plugs
- 嵌入视图
- Mapping Plugs
- 嵌入视图
第八步:在Component Controller上创建实现全局取数方法
- 新建Method:GET_MATNR_INFO
- 实现方法(注意SAP禁止在Controller上使用Select语法;虽然这不是强制性的,但是十分影响性能;所以应该专门写一个Class或者FM来进行取数)
DATA: lo_node TYPE REF TO if_wd_context_node, lo_element TYPE REF TO if_wd_context_element, lv_matnr TYPE matnr. DATA: ls_mara TYPE mara. "read matnr_selection Context lo_node = wd_context->get_child_node( name = wd_this->wdctx_matnr_selection ). "read attribute lo_element = lo_node->get_element( ). lo_element->get_attribute( EXPORTING name = `MATNR` IMPORTING value = lv_matnr ). "query data SELECT * FROM mara INTO ls_mara WHERE matnr = lv_matnr. ENDSELECT. "read matnr_information Context lo_node = wd_context->get_child_node( name = wd_this->wdctx_matnr_information ). "read attribute lo_element = lo_node->get_element( ). lo_element->set_static_attributes( ls_mara ).
第九步:设置Button Action
-
BTN_SEARCH
- BTN_SEARCH中实现检查UI元素元数据检查
DATA lo_api_controller TYPE REF TO if_wd_view_controller. DATA lo_action TYPE REF TO if_wd_action. lo_api_controller = wd_this->wd_get_api( ). lo_action = lo_api_controller->get_current_action( ). IF lo_action IS BOUND. CASE lo_action->name. WHEN 'SEARCH'. "动态值检查 PAI cl_wd_dynamic_tool=>check_mandatory_attr_on_view( EXPORTING view_controller = lo_api_controller ). ENDCASE. ENDIF.
- BTN_SEARCH中实现检查UI元素元数据检查
-
BTN_BACK
-
VIEW_INFORMATION中Inbound Plugs Handle实现取数逻辑
wd_comp_controller->get_matnr_info( ).
-
第十步:测试
- 创建WebDynpro application Program
- 查询
- 返回再次查询
- WD Context属性