本節提供一些提示,協助您編寫更複雜的程式庫實作方式:
使用自己的 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格式將資料表傳回至圖表。