1. 程式人生 > 實用技巧 >WDA SEARCH step by step

WDA SEARCH step by step

之前寫了不少的東西,其實大多數都是給自己看的,我的習慣是把資料放到網上,用的時候直接看部落格。

之前硬碟輕輕摔了一下,幾年的資料沒了,然後就再也不用硬碟了。

昨天有人突然問我關於WDA的問題,畢竟奇怪,這年頭竟然還有來學WDA的。。。閒著也是閒著,那就做幾個小例子,服務大眾吧。

一,本篇分兩小部分,先說用NODE節點做查詢條件的,再說用SELECT-OPTION做查詢條件的。

1.新建WDA元件:ZLYWDA01.

選擇Web Dynpro Comp./Intf.

輸入WDA元件名稱ZLYWDA01,回車。

這時會彈出提示框:選擇YES

填寫完整元件的描述和初始元件建立的檢視和視窗。(這裡我修改了視窗名稱W_MAIN,檢視名稱V_MAIN。。這是我自己的命名規範,可隨意)

回車建立,這時候元件還是未啟用狀態,右鍵,啟用。

2.新建NODE節點

前面說了,先做node節點的查詢,所以我們這裡要建NODE節點了,再建之前,先說一下怎麼建。

正常來說,這三個地方都可能會建NODE,但是NODE作用的範圍不同。

COMPONENTCONTROLLER可以理解為全域性,這裡定義的NODE,在整個程式中的任何位置都可以用,也如果建立的時候勾選了介面節點,別的程式引用到這個程式的時候,也是可以用介面節點的。

VIEW 裡建的節點智慧當前檢視使用,一般也不會做其他引用。

WINDOW裡建的節點只能當前視窗使用,這裡一般不建議用,一般視窗只做展示可資料預處理,不做NODE節點控制。

所以呢,這裡就先在檢視中建一個查詢用的欄位節點:

雙擊檢視V_MAIN,選擇檢視的Context節點頁籤,右鍵新建節點:

輸入節點(NODE)名稱 ,下面的資訊預設,

右鍵節點,新增屬性,這裡就建單的新增兩個做測試。

新增第一個搜尋欄位,object

新增第二個搜尋欄位:process_type

2.新建佈局。

查詢節點建立完之後,點到layout佈局頁籤

在做頁面設計之前,先在腦海裡有個整體的概念,要設計成什麼樣的。

我們這裡只是做建單的查詢和結果顯示,所以就設計兩塊:查詢和結果。

新建tray做查詢塊和結果塊。並新增摺疊塊說明描述。

3.將node欄位新增到SEARCH塊中。(一種是單獨建label和input欄位,另一種就是直接全部引入進來)這裡用後者

帶回來佈局裡的效果如下:

如上圖,SEARCH這個TRAY的layout屬性是預設的佈局,FlowLayout,橫列的。

這個樣式不夠好看,我們給改成MatrixLayout

為了好看,我們將第二個查詢欄位設定到第二列:

這裡的佈局MatrixLayout,是以MatrixHeadData為行開頭,MatrixData跟在後面排成一行,直到下一個headdata重啟一行。

欄位是以從上到下順序分佈的,如果要調節欄位位置,需要上下移動欄位和label的位置。再結合行列開始標記就差不多了。

效果如下:

到這裡,查詢節點和佈局已經完成了,下面做結果節點。

如果是直接參考某個資料庫字典 結構或者表,可以直接再建立節點中的字典結構中新增對應的表或者結構。

同SEARCH一樣,新增查詢結果欄位。

這裡就只新增幾個做測試例子。

回到layout中,在查詢結果塊中新增table控制元件。

繫結NODE到表控制元件:

右鍵,建立繫結:

選擇ITAB節點。

儲存,效果如下:

現在查詢和結果都有了,下面就開始做查詢操作。

在SEARCH塊中新增查詢按鈕。

建立查詢事件:

到查詢方法中新增程式碼:

METHOD onactionsearch .
  DATA lo_nd_search TYPE REF TO if_wd_context_node.
  DATA lo_el_search TYPE REF TO if_wd_context_element.
  DATA ls_search TYPE wd_this->element_search.

  DATA lo_nd_itab TYPE REF TO if_wd_context_node.
  DATA lt_itab TYPE wd_this->elements_itab.
  "取查詢節點
*   navigate from <CONTEXT> to <SEARCH> via lead selection
  lo_nd_search = wd_context->get_child_node( name = wd_this->wdctx_search ).
*   get element via lead selection
  lo_el_search = lo_nd_search->get_element( ).
*   @TODO handle not set lead selection
  IF lo_el_search IS INITIAL.
*   get all declared attributes
    lo_el_search->get_static_attributes(
      IMPORTING
        static_attributes = ls_search ).
  ENDIF.

  "查詢邏輯處理

  SELECT object_id process_type posting_date sales_org stat_user INTO TABLE lt_itab FROM zhsb_order_index UP TO 10 ROWS.


  "賦值結果節點

* navigate from <CONTEXT> to <ITAB> via lead selection
  lo_nd_itab = wd_context->get_child_node( name = wd_this->wdctx_itab ).
  lo_nd_itab->bind_table( new_items = lt_itab set_initial_elements = abap_true ).

ENDMETHOD.

如果用這種方式,需要定義range表,然後挨個判斷介面是否有輸入,然後再把值填到range表中,最後用range表查詢。這裡就不做處理了。

好了,右鍵元件,新建應用程式來測試看看。

屬性名稱

點選儲存,複製URL測試或者右鍵應用程式測試;

效果如下: