樹視圖可以用于表示資料的層次。
例如:SAP CRM中的組織結構資料可以表示為樹視圖。
在SAP CRM Web UI的術語當中,沒有像表視圖(table view)或者表單視圖(form view)那種專門的樹視圖類型。我們可以認為樹視圖是表視圖的一種特例。是以,沒有可以用于建立樹視圖的向導,需要按以下特定的步驟手動改造已存在的視圖。
首先,這個看起來挺難的,但是随着實踐次數的增多,你會很容易了解它。在本文,我将建立一個如下模樣的樹視圖。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yM1QDM4IjM0AjMtUjNwcjM2AjMxYDMxEjNxAjMtkDNwQTO58CXxEjNxAjMvwVO0ADN5kzLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
如你所見,它有兩級結構。第一級展示線索ID,下一級展示客戶。我使用了這樣一個簡化過的例子。
為了學習這個教程,我們需要建立一個表視圖。這裡不描述建立表視圖的步驟,因為在先前的文章中已經講過了。
在本文中,我建立了一個使用了基本實體“BTQLeadDoc”的表視圖。
在元件控制器中建立了一個具有相同類型的上下文節點,并在其方法DO_INIT_CONTEXT中寫入代碼以擷取資料。
接着綁定表視圖上下文節點群組件控制器上下文節點,是以表視圖可以擷取到資料。DO_INIT_CONTEXT中寫入的代碼如下。
這段代碼做了什麼?
我簡單地擷取了前10條線索記錄,把它們交給上下文節點LEAD。在表視圖群組件控制器上下文節點間進行了資料綁定,資料就會同樣地流到表視圖。
我們做好了準備,開始主要環節吧。
首先,前往表視圖上下文節點實作類并且把它的父類從“CL_BSP_WD_CONTEXT_NODE_TV”改為 “CL_BSP_WD_CONTEXT_NODE_TREE”。如果有詢問特定方法重定義的對話框,選擇“是”。
該類提供了兩個重要方法。
GET_TABLE_LINE_SAMPLE 和 REFRESH.
第一個方法将傳回基于視圖列的結構。
REFRESH方法通常用于生成節點第一級或者根節點。
我現在僅僅使用了兩列來展示資訊。是以前往GET_TABLE_LINE_SAMPLE按需要增加兩列。
方法激活後,使用事務BSP_WD_CMPWB代碼重新打開整個元件。現在你可以在“配置”标簽看到視圖配置中的兩列。将這兩列從可用區域移動到展示區域,修改相應的标題,儲存配置。
我們将在後面使用REFRESH方法。
現在有一個重要的步驟要做,就是修改htm檔案中的标簽。使用chtmlb标簽:configTreeto 來顯示樹視圖。前往htm頁面,移除已存在的CONFIGCELLERATOR或者CONFIGTABLE标簽,填入如下的标簽,并激活。
标簽中的“LEAD”是一個上下文節點。
nodeTextColumn屬性用于選擇樹的根節點或者第一列的屬性。這裡我按照需求選擇ID列。
在使用了需要的節點填充節點表屬性後,我們将它傳遞給LEAD->NODE_TAB。指定用于折疊樹的事件處理器“collapse”和用于展開樹的事件處理器“expand”:OnCollapseNode 和OnExpandNode.
下一步,我們需要在SE24中建立一個有父類的類。
CL_BSP_WD_TREE_NODE_PROXY,這個類會提供一個叫作GET_CHILDREN的方法,用于建立子節點。
在激活類之前,重定義GET_CHILDREN 方法并激活。讓我們回到REFRESH方法,寫下如下代碼并激活。
隻不過是循環上下文節點中的每條記錄——換言之,LEAD記錄——并且使用NODE_FACTORY的方法GET_PROXY為每條記錄建立節點。接着我們使用方法ADD_ROOT_NODE為樹添加根節點。在該場景中,因為我擷取了10條記錄,因而會建立10個根節點。
傳入剛剛在SE24中建立的類的名字給proxy type參數。我們已經建立好了根節點,但是還沒顯示它,需要手動地添加GETTER方法給代理類,以顯示樹中的屬性。
前往代理類“ZCL_TREE_PROXY_MAIN”複制方法IF_BSP_MODEL_SETTER_GETTER~_GET_XYZ點選過濾複選框,并且将其複制到空行。這樣做将會複制方法所需要的所有導入導出參數。接着修改名字為GET_ID。我們隻複制GETTER方法模闆,并且根據屬性名對它重命名。
寫下如下代碼,以擷取線索的ID。
第一級節點的建立和顯示已經完成,下一步要關注子節點(客戶節點)。為建立第二級節點,需要在代理類的get_children方法中寫代碼。我們将為子節點建立一個代理類。前往SE24并且按上面的方法建立一個新的類。
我們也需要展示客戶。按照相同的程式添加一個GETTER方法GET_PROSPECT,寫下如下代碼。
需要記住的關鍵點是,我們在代理類中建立GETTER方法,他們不是上下文節點類的一部分。
子節點的顯示完成了,但我們沒有建立它。現在前往建立的第一個類“ZCL_TREE_PROXY_MAIN”,在GET CHILDREN方法中寫入代碼。
這些代碼做了什麼?
這裡我們使用了一些BOL程式設計,來擷取線索對應的客戶,是以需要通過某些關系來到達目标實體BTPARTNER。我讀取了線索的所有合作夥伴。
擷取所有合作夥伴之後,循環每個合作夥伴,使用NODE FACTORY方法和上面建立的“ZCL_TREE_PROXY_CUSTOME”來建立子節點。
建立子節點後,設定IS_LEAF屬性為TRUE,因為在該場景中,CUSTOMER是最後一級,在這之後不顯示任何客戶下的子節點。是以,子節點的檔案夾圖示的相鄰處不會有任何箭頭顯示。
接下來在視圖實作類中建立兩個事件處理器,名為collapse和expand,并寫下如下代碼。
如名所示,在你折疊或展開節點時會觸發它們。
我們需要做的最後一件事是在DO PREPARE OUTPUT方法中添加一點代碼,來調用REFRESH方法。
現在,你可以運作應用,觀察輸出。
當你第一次看這篇教程時,看起來會有很多步驟,但實際上,它不是那麼難。
如果想要将“位址”顯示為“客戶”的子節點,需要建立一個新的代理類,在CUSTOMER代理類的GET CHILDREN方法中通過客戶和位址間的BOL關系寫入代碼,并且需要一個在那個代理類添加GETTER方法以顯示位址。别忘記在GET_TABLE_LINE_SAMPLE中添加一個新的“位址”列。
你可以自己試試。希望本文能幫助你,也希望你能把這個站點推薦給你的同僚,如果你覺得它值得的話。
本文連結:http://www.cnblogs.com/hhelibeb/p/6035059.html
原文連結:TREE VIEW
更多資訊請參考:Tree view change and save