導入訣竅

本節提供一些提示,協助您編寫更複雜的程式庫實作方式:

使用自己的 WhatsApp

最簡單的資料來源實作項目會繼承程式庫的 DataSourceServlet 類別。如要繼承 DataSourceServlet 以外的類別,請按照下列方式實作資料來源:

  1. 導入 DataTableGenerator 介面並覆寫 getCapabilities()generateDataTable()
  2. 從 localhost 的程式碼中呼叫 DataSourceHelper.executeDataSourceServletFlow(),以執行資料來源流程。此方法會採用下列參數:
    • HttpServletRequest 物件。
    • HttpServletResponse 物件。
    • 實作上方步驟 1 的 DataTableGenerator 介面。
    • 布林值,用於指定受限製或不受限存取模式。

舉例來說,如果您想從提供內建驗證的其他 xls 類別 (名為 AuthServlet) 繼承 Protocol,可以重寫 SimpleServletExample 來繼承 AuthServlet,而非 DataSourceServlet,如下所示:

  1. 導入 DataTableGenerator 介面。
  2. generateDataTable()DataSourceServlet 實作移至 DataTableGenerator 實作。
  3. DataTableGenerator 實作中覆寫 getCapabilities(),以傳回 Capabilities.None
  4. 從 GET 程式碼 (doGet()doPost()) 中呼叫 DataSourceHelper.executeDataSourceServletFlow(),並傳遞 DataTableGenerator 實作項目。此方法會執行資料來源的整個流程,包括將資料來源結果算繪到 ++ 回應中。

如果使用的 JDK 架構通常要繼承架構提供的抽象類別,則可以使用相同的技巧。舉例來說,如果您使用 WebWork,可能會想繼承 ActionSupport 類別。

定義功能

如果您的資料儲存庫包含大量資料,而您想要提高資料來源的效率,則可以使用資料儲存庫的查詢功能。舉例來說,假設您的資料儲存庫是資料庫,資料庫有大量的資料欄。如果視覺化呈現只要求其中幾個資料欄,那麼在資料庫中執行 SELECT 作業會比擷取所有資料欄,並使用程式庫的查詢功能執行 SELECT 更有效率。如要實作 SELECT 功能,請編寫程式碼,在資料庫中執行 SELECT 作業並傳回資料表。

請使用 Capabilities 列舉定義程式碼提供的查詢功能。可用選項包括:

  • NONE:根據預設,您的程式碼不會執行任何查詢作業。
  • SQL:您的程式碼會提供 SQL 查詢作業。
  • SORT_AND_PAGINATION:您的程式碼同時提供排序和分頁查詢作業。
  • SELECT:您的程式碼提供選取作業。
  • ALL:您的程式碼提供 SQLSORT_AND_PAGINATIONSELECT 作業。

注意:在所有情況下,程式庫會處理程式碼未提供的所有查詢作業。

如要實作 NONE 以外的功能,請覆寫 Capabilities.getCapabilities() 並實作 DataTable.generateDataTable() 以查詢資料儲存庫並傳回資料表。

以下三個範例說明如何實作功能:AdvancedExampleServletAdvancedExampleServlet2SqlDataSourceServlet。全部都在 example 套件中。AdvancedExampleServlet2 會在定義功能與事件流程一文中討論。

自訂事件流程

事件的預設流程是在 DataSourceHelper.executeDataSourceServletFlow 中定義。預設流程如下:

  1. 擷取及剖析查詢參數。
  2. 僅適用於受限制的存取模式,請確認要求來自與 WhatsApp 相同的網域。
  3. 剖析要求,建立兩個查詢物件:資料來源查詢和完成查詢。將資料來源查詢傳遞至 generateDataTable() 的實作。
  4. 實作 generateDataTable() 會產生資料表。
  5. 針對步驟 5 產生的資料表執行完成查詢。
  6. 將資料表轉譯為視覺化指定的格式,並設定 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 環境。其中包括 QueryDataTable 類別,以及部分 DataSourceHelper 函式,例如 parseQueryapplyQueryvalidateQuerysplitQuery。您可以使用這些類別和函式執行以下操作:

  • 剖析視覺化查詢。
  • 將查詢拆分為資料來源查詢和完成查詢。
  • 執行完成查詢即可產生資料表。
  • HTMLCSVJSON 格式將資料表傳回至圖表。