WDA入门教程Ⅱ:在WDA程序中使用选择选项

本文提供了在 WDA 程序中使用选择选项(Select Option)的分步操作指南,前提是您已学习了《WDA入门教程Ⅰ:Web Dynpro for ABAP 入门》一文,并非常了解WDA的基础知识。

目录

  1. 创建 WDA 对象
  2. 定义使用的组件
  3. 编辑视图
  4. 定义属性
  5. 方法实施
  6. 将视图嵌入窗口
  7. 创建应用并测试

1. 创建 WDA 对象

打开事务码 SE80,在左侧对象清单中选择“Web Dynpro 组件/接口”,在下方输入“Z_TUTORIAL2”并回车,系统将询问你是否创建,单击“是”。

创建 WDA 对象

在弹出的对话框中输入描述如下,回车。在弹出的包选择本地对象。

创建 WDA 对象

结果如下,保存并激活所有对象。

创建成功

2. 定义使用的组件

双击左侧的组件接口,在右边的窗口新建如下组件。

使用组件

3. 编辑视图

在已创建的 MAIN 视图属性(Properties)选项卡,点击新建按钮,添加两个 SELECT_OPTIONS 组件。

Properties

来到 Context(上下文)选项卡,为 CONTEXT 添加一个节点 FLIGHTS , Cardinality 选择“0...N”,回车。

Create Node

在创建好的 FLIGHTS 节点右键选择“Create Using the Wizard”->“Attributes from Commonents of Structure”。输入 Structure Name 为“SFLIGHT”,回车,选择除 MANDT 之外的所有字段,回车。

Add Attributes

结果如下图。

Reslut

单击 Layout 选项卡,添加一个名称为“View_Container” 的元素,类型为“VIEW_CONTAINER_UIELEMENT”。

View_Container

再添加一个名为“BUTTON1”的按钮,并为其添加一个 Action 事件“CONTINUE”。

BUTTON1
Result

最后,创建一个名为“FLIGHTTABLE”的表元素。

创建 FLIGHTTABLE

右键 FLIGHTTABLE,选择“Create Binding”,将表绑定到视图上文。

Create Binding
Create Context Binding

结果如图。

Result

4. 定义属性

单击 Attributes 选项卡,添加两个属性,分别为:

  • M_HANDLER,类型:IF_WD_SELECT_OPTIONS
  • M_WD_SELECT_OPTIONS,类型: IWCI_WDR_SELECT_OPTIONS。
image.png

保存并激活所有对象。

5. 方法实施

单击 Method 选项卡,找到 WDDOINI T双击进入,编写以下代码。

METHOD WDDOINIT .

  DATA:
    LT_RANGE_TABLE TYPE REF TO DATA,
    RT_RANGE_TABLE TYPE REF TO DATA,
    READ_ONLY      TYPE ABAP_BOOL,
    TYPENAME       TYPE STRING.

  DATA:
    LR_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER,
    L_REF_CMP_USAGE        TYPE REF TO IF_WD_COMPONENT_USAGE.

* create the used component
  L_REF_CMP_USAGE = WD_THIS->WD_CPUSE_SELECT_OPTIONS( ).
  IF L_REF_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
    L_REF_CMP_USAGE->CREATE_COMPONENT( ).
  ENDIF.

* get a pointer to the interface controller of the select options
*component
  WD_THIS->M_WD_SELECT_OPTIONS =
       WD_THIS->WD_CPIFC_SELECT_OPTIONS( ).

* init the select screen
  WD_THIS->M_HANDLER =
       WD_THIS->M_WD_SELECT_OPTIONS->INIT_SELECTION_SCREEN( ).

* create a range table that consists of this new data element
  LT_RANGE_TABLE =
    WD_THIS->M_HANDLER->CREATE_RANGE_TABLE(
         I_TYPENAME = 'S_CARR_ID' ).

* add a new field to the selection
  WD_THIS->M_HANDLER->ADD_SELECTION_FIELD(
                 I_ID = 'S_CARR_ID'
                 IT_RESULT = LT_RANGE_TABLE
                 I_READ_ONLY = READ_ONLY ).

* create a range table that consists of this new data element
  LT_RANGE_TABLE =
    WD_THIS->M_HANDLER->CREATE_RANGE_TABLE(
         I_TYPENAME = 'S_CONN_ID' ).

* add a new field to the selection
  WD_THIS->M_HANDLER->ADD_SELECTION_FIELD(
                 I_ID = 'S_CONN_ID'
                 IT_RESULT = LT_RANGE_TABLE
                 I_READ_ONLY = READ_ONLY ).

ENDMETHOD.

在来到 ONACTIONCONTINUE 方法,双击进入编辑,插入如下代码。

METHOD ONACTIONCONTINUE .

  DATA: NODE_FLIGHTS   TYPE REF TO IF_WD_CONTEXT_NODE.
  DATA: RT_CARRID TYPE REF TO DATA.
  DATA: RT_CONNID TYPE REF TO DATA.
  DATA: ISFLIGHT TYPE TABLE OF SFLIGHT.
  DATA: WSFLIGHT TYPE SFLIGHT.
  FIELD-SYMBOLS: <FS_CARRID> TYPE TABLE,
                 <FS_CONNID> TYPE TABLE.

* Retrieve the data from the select option
  RT_CARRID = WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD(
                           I_ID = 'S_CARR_ID' ).
* Assign it to a field symbol
  ASSIGN RT_CARRID->* TO <FS_CARRID>.

* Retrieve the data from the select option
  RT_CONNID = WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD(
                           I_ID = 'S_CONN_ID' ).
* Assign it to a field symbol
  ASSIGN RT_CONNID->* TO <FS_CONNID>.

* Retrieve that data from the database.  Normally it is suggested to
* encapsulate the data retrieval in a separate class.
* For simplicity, the SELECT statement has been implemented here.
  CLEAR ISFLIGHT. REFRESH ISFLIGHT.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE ISFLIGHT FROM SFLIGHT
          WHERE CARRID IN <FS_CARRID>
            AND CONNID IN <FS_CONNID>.

* Bind the data to the context
  NODE_FLIGHTS = WD_CONTEXT->GET_CHILD_NODE( NAME = `FLIGHTS` ).
  NODE_FLIGHTS->BIND_ELEMENTS( ISFLIGHT ).

ENDMETHOD.

保存并激活所有对象。

6. 将视图嵌入窗口

来到窗口 Z_TUTORIAL2 下,展开清单,找到 VIEW_CONTAINER,右键单击嵌套视图,填入以下信息,回车。

嵌套视图

结果如下。

Result

保存并激活所有对象。

7. 创建应用并测试

创建 Web Dynpro 程序,并保存为本地对象。执行测试,在弹出的浏览器中进行检验。

Test

如果您的系统中没有数据,请运行程序 SAPBC_DATA_GENERATOR 生成.

错漏之处,欢迎指正。


参考文献:
[1] Getting Started with Web Dynpro for ABAP, Rich Heilman,2005
[2] Using Select Options in a WDA Application, Rich Heilman , 2006
[3] SAP Documentation

查看上一篇WDA入门教程Ⅰ:Web Dynpro for ABAP 入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270