關於資料動作 Plug-in 與資料動作架構

資料動作 Plug-in 利用資料動作架構來提供已緊密整合至 Oracle Analytics 使用者介面的自訂資料導向動作。

當使用者呼叫資料動作時,資料動作管理員會將要求相關資訊環境 (例如,限定資料參照、計量值、篩選和中繼資料) 傳遞給負責處理要求的資料動作 Plug-in。Oracle 提供四種類型的資料動作 Plug-in:CanvasDataActionURLNavigationDataActionHTTPAPIDataActionEventDataAction。您可以延伸這些資料動作 Plug-in 類型及其抽象基礎類別,以提供自己的資料動作。

資料動作類別

資料動作類別包括「瀏覽至 URL」、「HTTP API」、「瀏覽至工作區」和「事件」動作:

  • 瀏覽至 URL:以新的瀏覽器頁籤開啟指定的 URL。
  • HTTP API:使用 GET/POST/PUT/DELETE/TRACE 命令以 HTTP API 為目標,且不會產生新頁籤。相反地,會檢查 HTTP 狀態代碼,並顯示暫時成功或失敗訊息。
  • 瀏覽至工作區:可讓使用者從來源工作區瀏覽至位於相同或不同視覺化中的目標工作區。來源工作區中的任何有效篩選會傳送至目標工作區作為外部篩選。當目標工作區開啟時,它會嘗試將外部篩選套用至視覺化。此處不描述套用外部篩選的機制。
  • 事件動作:使用 Oracle Analytics 事件路由器來發布事件。任何 Javascript 程式碼 (例如第三方 Plug-in) 都可以訂閱這些事件,然後據此處理其自訂回應。這能提供最大的彈性,因為 Plug-in 開發人員可以選擇資料動作回應的方式。例如,他們可以選擇顯示使用者介面,或一次傳送資料至多個服務。

瀏覽至 URLHTTP API 資料動作類別類型都會使用記號語法,將視覺化的資料或中繼資料引入 URLPOST 參數中。

URL 記號取代

HTTP 資料動作可以使用傳送至資料動作的相關資訊環境值取代 URL 中的記號。例如,限定資料參照值、篩選值、使用者名稱、工作簿路徑以及工作區名稱。

記號 附註 取代為 範例 結果
${valuesForColumn:COLUMN} NA 限定資料參照的資料欄顯示值 ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separator:"/"} 任何可能取代為多個值的記號皆支援選擇性區隔符號選項。separator 預設為逗號 (,),但您可以將其設為任何字串。您可以使用反斜線 (\) 在此字串內遁離雙引號。 限定資料參照的資料欄顯示值 ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separationStyle:individual} 任何 separationStyle 皆預設為 delimited,但如果使用者需要對每個值產生個別 URL 參數,您可以將它設為 individual 限定資料參照的資料欄顯示值 &myParam=${valuesForColumn: "Sales"."Products"."Brand"} &myParam=BizTech&myParam=FunPod
${keyValuesForColumn:COLUMN} NA 限定資料參照的資料欄索引鍵值。 ${keyValuesForColumn:COLUMN} 10001,10002
${env:ENV_VAR} 支援的環境變數包括:sProjectPathsProjectNamesCanvasNamesUserIDsUserName 環境變數。 ${env:'sUserID'} myUserName

資料動作相關資訊環境

您可以定義當使用者呼叫資料動作時傳送的相關資訊環境。

您可以定義當您建立資料動作時要傳送多少相關資訊環境至資料動作。

限定資料參照

呼叫資料動作時,系統會使用 LogicalFilterTree 物件陣列為每個標示的資料點產生限定資料參照。LogicalFilterTree 包含多個在樹狀結構中排列的 LogicalFilterNode 物件。此物件包括:

  • 資料版面配置的資料列或資料欄邊緣上的屬性。
  • 處理每個標示的儲存格其計量邊緣上的特定計量。
  • 每個標示的儲存格其特定計量值。
  • 索引鍵值與顯示值。

環境變數

除了描述每個標示資料點的資料和中繼資料之外,某些資料動作可能還需要描述呼叫資料動作的環境其進一步的相關資訊環境。此類環境變數包括:

  • 專案路徑
  • 專案名稱
  • 工作區名稱
  • 使用者 ID
  • 使用者名稱

資料動作程式碼設計

您可以使用 API 類別建立資料動作。

  • 資料動作有四個繼承自 AbstractDataAction 的具體類別:
    • CanvasDataAction
    • URLNavigationDataAction
    • HTTPAPIDataAction
    • EventDataAction
  • 您可以使用資料動作 Plug-in API 建立新類型的資料動作。
  • 資料動作類型的登錄是由 DataActionPluginHandler 所管理。
  • 程式碼透過發布事件來建立、讀取、編輯、刪除或呼叫資料動作執行處理。
  • 事件由 DataActionManager 進行處理。

資料動作模型類別

資料動作模型類別有數種不同的類型。

AbstractDataAction

此類別負責下列作業:

  • 儲存「剔除模型」(子類別可以使用自己的特性自由延伸此模型)。
  • 定義子類別必須實行的抽象方法:
    • + invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext) <<abstract>>

      透過傳送的相關資訊環境呼叫資料動作 - 應該僅限由 DataActionManager 呼叫。

    • + getGadgetInfos(oReport): AbstractGadgetInfo[] <<abstract>>

      建構並傳回負責呈現使用者介面欄位以編輯此類型之資料動作的 GadgetInfos

    • + validate() : DataActionError

      驗證資料動作,如果有效則傳回空值,如果無效則傳回 DataActionError

  • 提供下列方法的預設實行,用來呈現資料動作使用者介面欄位的一般部分:
    • + getSettings():JSON

      將資料動作的「剔除模型」序列化至已準備好包含在報表中的 JSON (使用 komapping.toJS(_koModel))。

    • + createNameGadgetInfo(oReport) : AbstractGadgetInfo

      建構並傳回可呈現資料動作的名稱欄位的 GadgetInfo

    • + createAnchorToGadgetInfo(oReport) : AbstractGadgetInfo

      建構並傳回可呈現資料動作的定錨至欄位的 GadgetInfo

    • + createPassValuesGadgetInfo(oReport) : AbstractGadgetInfo

      建構並傳回可呈現資料動作的傳送值欄位的 GadgetInfo

子類別可能不需要基礎類別提供的所有 GadgetInfo,因此它們可能不需要呼叫所有這些方法。透過此方式將每個欄位的呈現方式分離出來,子類別可以自由挑選其所需的小工具。某些子類別甚至可以選擇提供這些一般資料動作小工具的其他實行。

CanvasDataAction、URLNavigationDataAction、HTTPAPIDataAction、EventDataAction

這些是基本類型的資料動作其具體類別。這些類別可自行運作以提供給這些類型的資料動作一般使用者介面。它們也可以作為便利的基礎類別,讓自訂資料動作 Plug-in 延伸。

  • CanvasDataAction:用於瀏覽至工作區。
  • URLNavigationDataAction:用於以新的瀏覽器視窗開啟新的網頁。
  • HTTPAPIDataAction:用於對 HTTP API 提出 GET/POST/PUT/DELETE/TRACE 要求,並以程式設計的方式處理 HTTP Response
  • EventDataAction:用於透過事件路由器發布 JavaScript 事件。

每個類別負責的作業如下:

  • 從基礎類別實行抽象方法。
    • invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext)

      此方法應藉由將在 KOModel 中定義的特性與指定的 DataActionContext 物件結合來呼叫資料動作。

    • getGadgetInfos(oReport): AbstractGadgetInfo[]

      此方法應:

      • 建立包含 AbstractGadgetInfos 的陣列。
      • 呼叫將每個 AbstractGadgetInfo 推送至陣列的個別 createXXXGadgetInfo() 方法。
      • 傳回陣列。
  • 提供其他方法,供用於建立專屬於特定子類別之資料動作的個別小工具。

這些具體類別的子類別可能不需要使用其自訂使用者介面之超級類別所提供的所有小工具。透過此方式將每個小工具的建構分離出來,子類別可以自由挑選其所需的小工具。

DataActionKOModel、ValuePassingMode

DataActionKOModel 類別提供不同子類別之 AbstractDataAction 所共用的基礎 KOModel。請參閱 DataActionKOModel 類別

資料動作服務類別

資料動作有數種不同的服務類別。

DataActionManager

所有與 DataActionManager 的通訊都使用實行事件處理程式的 ClientEvents.DataActionManager,以進行下列作業:

  • 管理目前工作簿中定義的資料動作集。
  • 呼叫資料動作。
  • 擷取目前工作簿中定義的所有資料動作。
  • 擷取適用於目前已標記資料點的所有資料動作。

DataActionContext、EnvironmentContext

呼叫資料動作時,DataActionContext 類別會包含已傳送至目標的相關資訊環境。

  • getColumnValueMap()

    傳回以屬性資料欄名稱作為索引鍵的屬性資料欄值對應。這些項目定義呼叫資料動作的資料點其限定資料參照。

  • getLogicalFilterTrees()

    傳回 LogicalFilterTrees 物件,此物件描述呼叫資料動作的特定資料點其限定資料參照 (請參閱 InteractionService 以瞭解詳細資訊)。

  • getEnvironmentContext()

    EnvironmentContext 類別的執行處理,描述來源環境,例如:

    • getProjectPath()
    • getCanvasName()
    • getUserID()
    • getUserName()
  • getReport()

    傳回呼叫資料動作的報表。

DataActionHandler

DataActionHandler 類別會註冊各種資料動作 Plug-in。其 API 與其他 Plug-in 處理程式 (例如,VisualizationHandler) 大致一致。

DataActionHandler 類別提供下列公用方法:

  • getClassName(sPluginType:String) : String

    傳回指定資料動作類型的完整類別名稱。

  • getDisplayName(sPluginType:String) : String

    傳回指定資料動作類型的翻譯顯示名稱。

  • getOrder(sPluginType:String) : Number

    傳回用於將資料動作類型清單依偏好順序排序的數字。

DataActionHandler 類別提供下列靜態方法:

  • getDependencies(oPluginRegistry:Object) : Object.<String, Array>

    傳回涵蓋所有已註冊資料動作類型的相依性對應。

  • getHandler(oPluginRegistry:Object, sExtensionPointName:String, oConfig:Object) : DataActionPluginHandler

    建構並傳回 DataActionHandler 類別的新執行處理。

DataActionUpgradeHandler

當報表開啟時,UpgradeService 會呼叫 DataActionUpgradeHandler 類別。

DataActionHandler 類別提供兩個主要方法:

  • deferredNeedsUpgrade(sCurrentVersion, sUpgradeTopic, oDataActionJS, oActionContext) : Promise

    傳回解析為布林值的 Promise,指出指定的資料動作是否必須升級 (true) 或 (false)。此方法是藉由比較資料動作執行處理與從資料動作的建構子,來決定是否必須升級資料動作。

  • performUpgrade(sCurrentVersion, sUpgradeTopic, oDataActionJS, oActionContext, oUpgradeContext) : Promise

    在指定的資料動作上執行升級,並解析 Promise。升級本身是透過呼叫資料動作的 upgrade() 方法執行 (只有正在升級的資料動作其特定的子類別本身可以升級)。

  • getOrder(sPluginType:String) : Number

    傳回用於將資料動作類型清單依偏好順序排序的數字。

資料動作程式碼互動

資料動作在建立使用者介面欄位時,以及在使用者呼叫資料動作時,會與 Oracle Analytics 程式碼互動。

建立新資料動作執行處理的欄位

此互動會在 Oracle Analytics 想要呈現資料動作使用者介面欄位時啟動。方法為:

  1. 建立 PanelGadgetInfo,作為資料動作傳回的 GadgetInfos 其父項 GadgetInfo
  2. 在資料動作上呼叫 getGadgetInfos()
  3. 新增資料動作的 GadgetInfos,作為第一個步驟中所建立的 PanelGadgetInfo 其子項。
  4. 建立呈現 PanelGadgetInfoPanelGadgetView
  5. 設定 PanelGadgetView,此為 HTMLElement 的容器。
  6. PanelGadgetView 註冊為已經連附至 HostedComponent 樹狀結構的 HostedComponent 其子項 HostedComponent

    這會在「面板」小工具內,依照 getGadgetInfos() 所傳回陣列中的顯示順序,呈現資料動作的小工具。

呼叫資料動作

此互動會在使用者透過 Oracle Analytics 使用者介面 (例如,從視覺化中資料點上的彈出式功能表) 呼叫資料動作時啟動。

程式碼會執行下列作業以回應使用者互動:

  1. 發布 INVOKE_DATA_ACTION 事件,其中包含資料動作的 ID、呼叫資料動作的 DataVisualization,以及 TransientVizContext 物件。
  2. DataActionManager 透過下列方法處理此事件:
    1. 從該 ID 取得資料動作執行處理。
    2. 在指定的 DataVisualization 中取得已標記資料點的 LogicalFilterTrees
    3. 建構 DataActionContext,其中包含所有要傳送至資料動作其目標的資訊。
    4. 在資料動作上呼叫 invoke(oDataActionContext)

資料動作 plugin.xml 檔案範例

本主題顯示 CanvasDataAction 資料動作的 plugin.xml 檔案範例。

plugin.xml 範例

<?xml version="1.0" encoding="UTF-8"?>
<tns:obiplugin xmlns:tns="http://plugin.frameworks.tech.bi.oracle"
               xmlns:viz="http://plugin.frameworks.tech.bi.oracle/extension-points/visualization"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               id="obitech-currencyconversion"
               name="Oracle BI Currency Conversion"
               version="0.1.0.@qualifier@"
               optimizable="true"
               optimized="false">
 
 
   <tns:resources>
      <tns:resource id="currencyconversion" path="scripts/currencyconversion.js" type="script" optimizedGroup="base"/>
      <tns:resource-folder id="nls" path="resources/nls" optimizable="true">
         <tns:extensions>
            <tns:extension name="js" resource-type="script"/>
         </tns:extensions>
      </tns:resource-folder>
   </tns:resources>
 
 
   <tns:extensions>
      <tns:extension id="oracle.bi.tech.currencyconversiondataaction" point-id="oracle.bi.tech.plugin.dataaction" version="1.0.0">
         <tns:configuration>
         {
            "resourceBundle": "obitech-currencyconversion/nls/messages",
            "properties":
            {
               "className": "obitech-currencyconversion/currencyconversion.CurrencyConversionDataAction",
               "displayName": { "key" : "CURRENCY_CONVERSION", "default" : "Currency Conversion" },
               "order": 100
            }
         }
         </tns:configuration>
      </tns:extension>
   </tns:extensions>
 
 
</tns:obiplugin>

資料動作 Plug-in 檔案和資料夾

資料動作 Plug-in 使用下列檔案和資料夾實行。

bitech/client/plugins/src/
  • report
    • obitech-report
      • scripts
        • dataaction
          • dataaction.js
          • dataactiongadgets.js
          • dataactionpanel.js
          • dataactionupgradehandler.js
  • obitech-reportservice
    • scripts
      • dataaction
        • dataactionmanager.js
        • dataactionhandler.js