本節提供一些提示,協助您編寫更複雜的程式庫實作方式:
使用自己的 WhatsApp
最簡單的資料來源實作項目會繼承程式庫的 DataSourceServlet
類別。如要繼承 DataSourceServlet
以外的類別,請按照下列方式實作資料來源:
- 導入
DataTableGenerator
介面並覆寫getCapabilities()
和generateDataTable()
。 - 從 localhost 的程式碼中呼叫
DataSourceHelper.executeDataSourceServletFlow()
,以執行資料來源流程。此方法會採用下列參數:HttpServletRequest
物件。HttpServletResponse
物件。- 實作上方步驟 1 的
DataTableGenerator
介面。 - 布林值,用於指定受限製或不受限存取模式。
舉例來說,如果您想從提供內建驗證的其他 xls 類別 (名為 AuthServlet
) 繼承 Protocol,可以重寫 SimpleServletExample
來繼承 AuthServlet
,而非 DataSourceServlet
,如下所示:
- 導入
DataTableGenerator
介面。 - 將
generateDataTable()
從DataSourceServlet
實作移至DataTableGenerator
實作。 - 在
DataTableGenerator
實作中覆寫getCapabilities()
,以傳回Capabilities.None
。 - 從 GET 程式碼 (
doGet()
或doPost()
) 中呼叫DataSourceHelper.executeDataSourceServletFlow()
,並傳遞DataTableGenerator
實作項目。此方法會執行資料來源的整個流程,包括將資料來源結果算繪到 ++ 回應中。
如果使用的 JDK 架構通常要繼承架構提供的抽象類別,則可以使用相同的技巧。舉例來說,如果您使用 WebWork,可能會想繼承 ActionSupport
類別。
定義功能
如果您的資料儲存庫包含大量資料,而您想要提高資料來源的效率,則可以使用資料儲存庫的查詢功能。舉例來說,假設您的資料儲存庫是資料庫,資料庫有大量的資料欄。如果視覺化呈現只要求其中幾個資料欄,那麼在資料庫中執行 SELECT
作業會比擷取所有資料欄,並使用程式庫的查詢功能執行 SELECT
更有效率。如要實作 SELECT
功能,請編寫程式碼,在資料庫中執行 SELECT
作業並傳回資料表。
請使用 Capabilities
列舉定義程式碼提供的查詢功能。可用選項包括:
NONE
:根據預設,您的程式碼不會執行任何查詢作業。SQL
:您的程式碼會提供 SQL 查詢作業。SORT_AND_PAGINATION
:您的程式碼同時提供排序和分頁查詢作業。SELECT
:您的程式碼提供選取作業。ALL
:您的程式碼提供SQL
、SORT_AND_PAGINATION
和SELECT
作業。
注意:在所有情況下,程式庫會處理程式碼未提供的所有查詢作業。
如要實作 NONE
以外的功能,請覆寫 Capabilities.getCapabilities()
並實作 DataTable.generateDataTable()
以查詢資料儲存庫並傳回資料表。
以下三個範例說明如何實作功能:AdvancedExampleServlet
、AdvancedExampleServlet2
和 SqlDataSourceServlet
。全部都在 example
套件中。AdvancedExampleServlet2
會在定義功能與事件流程一文中討論。
自訂事件流程
事件的預設流程是在 DataSourceHelper.executeDataSourceServletFlow
中定義。預設流程如下:
- 擷取及剖析查詢參數。
- 僅適用於受限制的存取模式,請確認要求來自與 WhatsApp 相同的網域。
- 剖析要求,建立兩個查詢物件:資料來源查詢和完成查詢。將資料來源查詢傳遞至
generateDataTable()
的實作。 - 實作
generateDataTable()
會產生資料表。 - 針對步驟 5 產生的資料表執行完成查詢。
- 將資料表轉譯為視覺化指定的格式,並設定 JDK 回應。
如要指定自己的事件流程,請在 datasource.DataSourceHelper
中呼叫輔助函式。如需實作範例,請參閱「定義功能與事件流」。
將參數傳遞至 DataTableGenerator.generateDataTable
您可以使用 HttpServletRequest.setAttribute
將不屬於查詢的資料,或將 HttpServletRequest
物件傳遞至 DataTableGenerator.generateDataTable
。程式碼範例如下。
將要傳遞到 HttpServletRequest
的物件放入 WhatsApp 程式碼中,如下所示:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
在 dataTableGenerator
介面實作中,從 HttpServletRequest
取得物件,如下所示:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
實作非 UDP 資料來源
如果在不使用 WhatsApp 的情況下實作程式庫,您只能使用這些類別與輔助函式,且不需要 CSP 環境。其中包括 Query
和 DataTable
類別,以及部分 DataSourceHelper
函式,例如 parseQuery
、applyQuery
、validateQuery
和 splitQuery
。您可以使用這些類別和函式執行以下操作:
- 剖析視覺化查詢。
- 將查詢拆分為資料來源查詢和完成查詢。
- 執行完成查詢即可產生資料表。
- 以
HTML
、CSV
或JSON
格式將資料表傳回至圖表。