zoukankan      html  css  js  c++  java
  • WDA学习(3):Navigation

    1.3 Navigation

              本实例演示在不同View视图组件间跳转导航。之间在BAPI Usage这个实例基础上做修改。

    1.创建一个新的View视图组件NOFLIGHTVIEW。

    选择Web Dynpro Comp. 下Z_TEST_WDA2->右键->Create->View。

     

    2.设置Context页签,设置NOFLIGHTVIEW使用到上下文。

    将主组件控制器的DESTINATION_FROM,DESTIMATION_TO上下文Context映射到NOFLIGHTVIEW的上下文。

    在Context下再创建MSG子Attribute值

     

    3.设置Layout页签,视图组件控件布局。

    选择ROOTUIELEMENTCONTAINER->右键->Insert Element。

    创建TEXT1文本控件;

    创建BUTTON1按钮控件;

    设置TEXT1文本控件text属性绑定Context上下文;

    点击text属性后按钮,Binding exists。

     

     

    设置按钮控件text属性;

    设置按钮控件onAction属性;

     

    4.设置视图组件的Inbound Plugs和Outbound Plugs页签

    Plugs控制视图之间的跳转。

    设置FLIGHTLISTVIEW视图组件。

     

     

    设置NOFLIGHTVIEW视图组件。

     

     

    5.修改FLIGHTLISTVIEW的方法ONACTIONGET_FLIGHTS

    点击魔法棒,读取FLIGHT_LIST内容,不要过度使用魔法棒,否则自动生成太多代码。

     

     点击魔术棒,插入导航代码,了解导航代码写法。

     

     实例代码:

    method ONACTIONGET_FLIGHTS .
      "变量保存COMPONENTCONTROLLER类对象
      DATA lo_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER .
      "wd_this参数代表当前视图组件控制器,获取全局的组件控制器
      lo_COMPONENTCONTROLLER =   wd_this->get_componentcontroller_ctr( ).
      "调用对象方法
      lo_componentcontroller->execute_bapi_flight_getlist( ).
    
      "方式2:直接使用attributes中WD_COMP_CONTROLLER参数,执行方法
      "wd_comp_controller->execute_bapi_flight_getlist( ).
    
      "当flight_list中没有查询到记录,跳转到NOFLIGHTVIEW视图
      "上下文Context节点
      DATA lo_nd_flight_list TYPE REF TO if_wd_context_node.
      "上下文Element
      DATA lo_el_flight_list TYPE REF TO if_wd_context_element.
      "Context节点对应数据类型(workarea),通过wd_this->element_节点名
      "Context节点对应数据类型(table),通过wd_this->elements_节点名
      "在Context创建时已经默认定义types类型
    *   types:
    *    Element_flight_list type BAPISFLDAT,
    *    Elements_flight_list type standard table of Element_flight_list.
      DATA ls_flight_list TYPE wd_this->Element_flight_list.
      DATA lt_flight_list TYPE wd_this->Elements_flight_list.
    
      "通过当前Attributes,wd_context表示当前View的上下文对象,代表CONTEXT根节点
      "通过get_child_node()方法获取子节点
      " constants: wdctx_flight_list type string value `FLIGHT_LIST`.
      lo_nd_flight_list = wd_context->get_child_node( name = wd_this->wdctx_flight_list ).
      "获取Element
      lo_el_flight_list = lo_nd_flight_list->get_element( ).
    
      "如果Element不存在,能够判断flight_list没有记录
      IF lo_el_flight_list IS INITIAL.
         "如果没有记录,跳转到noflightview
          wd_this->fire_no_flights_found_plg( ).
      ENDIF.
    endmethod.

    6.实现HANDLENO_FLIGHT_FOUND方法

    这个方法是设置Inbound Plugs自动生成的,当FLIGHTLISTVIEW视图跳转到NOFLIGHTVIEW视图时,会调用这个方法。

     

    使用魔法棒,获取DESTINATION_FROM.CITY值,还需要获取DESTINATION_TO.CITY的值,多次使用魔法棒可能会出现代码重复问题,所以还是需要手动修改(通过魔法棒了解Context获取方式,然后自己写吧)。

     

    实例代码:

    method HANDLENO_FLIGHT_FOUND .
        "Context节点
        DATA lo_node TYPE REF TO if_wd_context_node.
        "对应element
        DATA lo_element TYPE REF TO if_wd_context_element.
        "destination_from(workarea)
        DATA ls_destination_from TYPE wd_this->Element_destination_from.
        "destination_from-city
        DATA lv_from_city TYPE wd_this->Element_destination_from-city.
        DATA lv_to_city TYPE wd_this->Element_destination_to-city.
        "显示信息
        DATA lv_string TYPE string.
    
        "获取Context节点值步骤:
        "1.通过wd_context(本组件context)获取其下子节点;
        "2.通过获取到的节点,获取其Element;
        "3.通过Element获取值;
    
        "在创建Context时,自动生成静态变量wd_this->wdctx_节点名
        " constants:wdctx_destination_from type string value `DESTINATION_FROM`.
        "根据节点名,获取节点
        lo_node = wd_context->get_child_node( name = wd_this->wdctx_destination_from ).
        "通过Node,调用get_element获取Element
        lo_element = lo_node->get_element( ).
        "通过Element,调用get_attribute获取值
        lo_element->get_attribute(
          EXPORTING
            name =  `CITY`
          IMPORTING
            value = lv_from_city
        ).
    
        "获取destination_to的city值
        lo_node = wd_context->get_child_node( name = wd_this->wdctx_destination_to ).
        lo_element = lo_node->get_element( ).
        lo_element->get_attribute(
          EXPORTING
            name =  `CITY`
          IMPORTING
            value = lv_to_city
        ).
    
        lv_string = 'No flight avalible from' && lv_from_city && 'to' && lv_to_city.
        "获取上下文msg
        lo_element = wd_context->get_element( ).
        "设置值
        lo_element->set_attribute(
            name =  'MSG'
            value = lv_string
        ).
    endmethod.

    7.设置NOFLIGHTVIEW的back按钮动作

     

    创建onAction,BACK返回到FLIGHTLISTVIEW视图

     

     自动生成ONACTIONBACK方法,并且实现跳转代码

     

     8.(Embed View into Window)嵌入视图到窗口

    选择Window:Z_TEST_WDA2->右键->Embed View

     

     选择帮助,可以看到可以Embed的View

     

     选择FLIGHTLISTVIEW视图->NO_FLIGHTS_FOUND(Outbound)->Create Navigation Link

     

     同理,选择NOFLIGHTVIEW视图->BACK_TO_SEARCH (Outbound)->Create Navigation Link

     

     方式2:直接将NOFLIGHTVIEW的Inbound拖动到FLIGHTLISTVIEW的Outbound下,将FLIGHTLISTVIW下的Inbound拖动到NOFLIGHTVIEW的Outbound下。

    9.激活Web Dynpro Component,然后运行Web Dynpro Application。

     

     

  • 相关阅读:
    SQLServer和Access数据传输简单总结
    Session 详解
    SQL日志文件过大问题的解决方法
    如何删除表中的重复记录?
    HDOJ 3711 Binary Number
    HDOJ 2022
    活动选择问题
    浮点数的比较
    HDOJ 2037
    找最长递增子数列
  • 原文地址:https://www.cnblogs.com/tangToms/p/12796549.html
Copyright © 2011-2022 走看看