式樹到 Visitor 模式)
在經(jīng)典 SAP Gateway OData V2 服務(wù)開發(fā)里,GET_ENTITYSET往往是最容易變得復(fù)雜的方法之一。一個看起來很普通的列表查詢,請求一旦帶上$filter、$orderby、$top、$skip等 System Query Option,DPC 端就不再只是讀取數(shù)據(jù)庫并返回內(nèi)表,而是需要理解客戶端到底希望篩選什么數(shù)據(jù)。例如一個銷售訂單列表發(fā)出如下請求SalesOrders?$filter=EditState ne 2 or (EditState eq 2 and TwinEntity eq null)站在 HTTP 層面看,這只是一段$filter字符串。站在 SAP Gateway Runtime 內(nèi)部看,它已經(jīng)不是簡單字符串,而是一棵具有操作符、屬性、常量、函數(shù)以及成員訪問關(guān)系的 Filter Expression Tree。SAP 官方文檔明確提供了GET_FILTER_EXPRESSION_TREE,用于把$filterSystem Query Option 取得為 Object Tree,同時還提供/IWBEP/IF_MGW_EXPR_VISITOR,供應(yīng)用程序按照 Visitor Design Pattern 對這棵樹進(jìn)行處理。這個 API 的價值并不只是為了讀取一個過濾條件。它實(shí)際上給經(jīng)典 SAP Gateway 開發(fā)提供了一層語義接口。我們不必把$filter