[DXP] 在 spotfire 中創建自定義視覺化工具

簡介 Spotifre 的視覺化工具(visualization)是可以被擴展的。已在 Spotfire 環境中部署的自定義視覺化工具將會出現在相同的位置並以相同的方式運作,就像 Spotfire 原生的視覺化工具一樣:它們可以從視覺化選單(visualization menu)、繪圖文本選單(plot context menus)、工具列中被訪問,並且可以與其它繪圖(plots)共享數據集(data sets)、標記(marking)和篩選(filtering)。 需要擴充的點 可視化框架的擴充點包括: CustomVisual, CustomVisualization - custom visuals 的基礎類別,custom visualization 是 custom visual 的子類別,具有一此額外的功能。 CustomVisualFactory - custom visualizations 的工廠基類(Factory base),用於創建自定義可視化工具的實例。 CustomVisualView - CustomVisual 視圖的基類。 實作 建立模型 模型部分繼承自 CustomVisual 或 CustomVisualization。 CustomVisualization 是 CustomVisual 的子類別,並添加了指定 data table 和 marking 的功能。能夠指定當前 data table 和當前 marking 使視覺化能夠參與主細節情境。它還使框架能夠在 marking 記錄上實現命令並在狀態欄中顯示有關 filtering 和 marking 的行數的訊息。 CustomVisualization 的 model資料可以來源自一個或一個以上的 data tables;而 CustomVisual 則是可以在 Page 中實作原生的 Text Area 和其它各種控制面板。 ...

<span title='2023-08-14 22:54:55 +0800 +0800'>August 14, 2023</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Rain Hu

[DXP] Spotfire Extension 擴充程式

Spotfire Extension Spotfire Extension 是添加到平台的最小功能單元。它是在 Visual Studio® 中開發的,並包含在 Spotfire 外掛中,使版本控制、授權、部署和加載成為可能。本主題描述了開發 Extension 時需要的關鍵概念,以添加自定義功能到 Spotfire 平台。 Add-in Extensions 以 add-in 的方式載入 Spotifre 中。Spotfire 處理版本控制、部署及為擴充功能註冊。Spotfire extension 的設計燈南規定每個 add-in 都必須包含一個繼承 AddIn Class 的類別。Add-in 基本上是由在從 SDK 模板創建專案時提供的資訊所定義的。Add-in project 可以包含一或多個 extensions,故專案也可以輕鬆的透過添加其它擴充來建立新的版本。 每個擴充功能都是由一組類別實現的,通常是透過 override base class 來定義擴充類別,並透過覆寫特定擴充類別的方法 Register[ExtensionType](),宣告式地進行 add-in 的註冊。每個這樣的方法都會傳遞一個 registrar,允許 add-in 在適當的 registry 進行註冊。例如在註冊新的工具(tool)時,必須要 override 方法 RegisterTools(ToolRegister)。在授權擴充功能時也會使用類似的方法。 如果一個模組有有效的模組定義檔案,則被定義為適合在 Spotfire 中載入。它通過定義 AddIn 類別的完全限定類型名稱和組件名稱來向應用程式聲明這個外掛程式。它還聲明了一個唯一的專案GUID和 assembly 的強名稱(string name)。這些組合唯一地識別了專案和外掛程式。因此,Extension assembly 必須使用強名稱金鑰(string name key)文件(.snk)簽名。擴展專案模板包含一個默認金鑰。可以用自己的金鑰文件替換此金鑰文件,但如果這樣做,請務必相應地修改模組定義檔案。 Extesnion Type IronPython 提供一種輕量的方式,便可在分析本身中添加複雜的行為,無需透過開發工具與部署機制,便可快速的創建小型的應用程序。而當需要創建自定義的功能時,就需要用到 C# 的擴充機制。 Custom Tool Custom Tool 用於擴充在 Spotfire 中特定文本(context) 上的操作。文本可以是 Spotfire 應用程式(application)本身、檔案庫(document)、或是每個特定的可視化類型(visualization)。 包含 Custom Tool、Custom Export Tool、Custom Share Tool Custom Panel Custom Panel 是通用 UI 組件,用於視覺化文本資訊、添加控制項或其它特定的功能。 Custom Visualization Custom Visualization 可用來擴充 Spotfire 的 Visualization Set,使之可以從 Visualization 選單中、繪圖文本(plot context)清單上、工具列中被選擇,並與其它繪圖工具一樣享有數據集、標記(marking)、與篩選(filtering )功能。 Custom Value Renderer Custom Value Renderer 用來呈現表格視覺化列中的值。最常見的情況是將數據值轉成圖像,在表格中呈現。 Custom Data Source Custom Data Source 用來匯入任何自訂的外部資料來源。 Custom Data Function Custom Data Function 用自定義的公式將文件中的資料進行計算後輸出到文件的其它位置。 Custom Data Tranformation Custom Data Transformation 在資料讀取和建立表格之間添加了一層,提供在匯入資料前修改資料的方法。資料轉換將一個規則或函數應用於檢索到的資料,以準備進行分析。 Custom Data Writer Custom Data Writer 用於匯出自定義格式的檔案。 Custom Expression Functions Custom Expression Functions 可以擴展在自定義表達式和計算列中使用的表達式語言。可以是基於行、列或聚合方法。 Custom Fitting Model Custom Fitting Model 由 Visualization 的座標和參數計算出值,以繪值對應的參考點或曲線。 Custom Virtual Column Custom Virtual Column 根據一個或多個現有的列和文件屬性創建新的欄。 Custom Preference Custom Preference 偏好設定,也稱作 Configuration Sets。 Custom License Custom License 可用於自訂授權。 Custom Node Custom Node 可以添加項目到 spotfire document model 中,並序列化到 dxp 文件中。 Custom Application Event Handler Custom Application Event Handler 可用來監控並回應應用程式事件。

<span title='2023-06-23 03:03:52 +0800 +0800'>June 23, 2023</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Rain Hu

[DXP] Spotfire Developer SDK

Spotfire SDK SDK,全名 Software Development Kit,中譯軟體開發套件,可以想成 Spotfire 提供給開發者一個以 Spotfire 工具分析為基底的開發框架,提供了各式套件以供各種開發需求。包含了 Extension Template, Development assemblies, example projects, package builder application… Binaries 包含了在 Windows 或 Linux 上使用 Spotifre 平台建立 Solution 時所參考的 .NET 套件。由於兩個平台具有不同的 .NET 需求,因此 Binaries 中包含了兩種 OS 各一組檔案,其中還包含了相關的 IntelliSense 檔案。 Examples 提供一系列廣泛的 Solutions,用於解決常見的開發場景。可根據不同的技術特性分為: COM Automation 描述使用 COM 進行應用程式間通訊的方法。 微軟的基於 COM 組件的軟體架構,讓應用程式將其內部功能公開為 COM 物件,使開發者可以編寫一些腳本,進行一些自動化任務,稱為 Automation 或 OLE Automation。 Extensions 擴充套件:提供了一組完整的 .NET 專案,為解決 Spotifre 客戶端的特定任務。這些擴充套件足夠簡單,可以作為一些開發者的靈感或程式碼的來源。 所有範例擴充功能都包含在 Visual Studio Solution 的 Spotfire.Developer.Extensions.sln 中,所有包含 c# 程式碼的自定義工具(Custom Tool)範例都包含在 Solutions CustomerToolExample.sln 和 CustomToolExampleVS.sln 中。這些 Solutions 中的範例提供了一種簡單的方式來開始進行開發,並且都可以直接在 Relase Mode 下進行編譯。Window 與 Linux 兩個系統都會自動進行建置。 所有 C# 擴充範例都包含一個 .pkdesc 檔,可使用 Package Builder 來進行包裝不同的 Packages。 C# 擴充範例中包含兩個發行描述檔 DistributionDescription-windows.xml 和 DistributionDescription-linux.xml 用來描述兩個平台各自包含了哪些範例。 兩個 .bat 檔和 BuildPackages-window.bat 和 BuildPackge-linux.bat 包含了 Package Builder 用來建置 Windows 與 Linux Packages 的邏輯。它們會呼叫適用的範例的 .pkdesc 檔,並用提供的 description.xml 檔案來建立包含範例工具套件的發行檔案。 在官方的 SDK 中包含了四個完整的 .NET 範例專案可建構於 Linux 與 Window 上: SpotfireDeveloper.CalculationMothodExample SpotifreDeveloper.CustomToolExample SpotfireDeveloper.CustomToolExampleForms SpotfireDeveloper.CustomToolExampleWeb 以上所有的專案,都包含了兩個 csproj 文件,且都已經被轉換成 SDK-style。一個是用來進行 .NET 的編譯,另一個用來與 PackageBuilder-Console 進行整合,以自動整合 Package。 除了專案以外,另外還包含了 SpotfireDeveloper.ApiExamples,提拱了源始碼,說明如何進行日常任務的自動化,例如配置可視化(Visualizations),處理篩選(Filter)和定期更新數據(Refresh data)。 Integration 提供了如何在 Spotfire Server 呼叫 REST/SOAP 方法的範例。(REST與SOAP的差異) JavaScript 為 Web 端的使用者端供了混合 JavaScript Api 的 Solution。 Package Builder 提供一個框架,用於開發、除錯、打包及部署擴充到 Spotfire 上。它是一個用於添加自定義功能到 Spotfire 平台上的重要工具。同時具備 UI-based 與 Console 兩種版本供使用。(Linux 只有 Console 版) 點擊 [Manage] 點擊 [Add],並在 Add Configuration 對話視窗中,輸入 Configuration name。 點擊 [File] > [Add TIBCO Spotfire Distribution] 以新增 Spotfire 執行檔,以進行擴充功能的除錯。 前往安裝 TIBCO Spotfire® Analyst 的 [Modules] 資料夾,點擊選擇資料夾,可自行指定何者作為 Spotfire Distribution。 Starter 包含了一個特殊的 Spotfire.Dxp.exe,與擴充的 Package Builder 應用程式整合,它被用於擴充專案的開發與除錯。 還包含一個特殊的 Spotfire.Dxp.exe.config,由 Package Builder 在設計時進行配置,以反映開發擴充時使用的配置,以涵蓋所有支持的 Spotfire 版本的開發。 Template Spotfire 擴充專案範本是在 Visual Studio® 中用來建立新的 Spotfire 擴充專案的工具。它處理實作細節,讓開發者專注於新增功能。有多個版本的範本可用,取決於您打算為哪個平台開發您的擴充(Windows 或 Linux),以及在開發期間如何工作(使用 Package Builder 或僅使用 Visual Studio)。 在 Linux 上運行的專案檔案必須是所謂的「SDK-style 專案」,請參閱 https://docs.microsoft.com/zh-tw/dotnet/core/project-sdk/overview。 也可以使用 SDK-style 來建立 Windows 專案。因此,模板專案設置為使用 csproj 檔案中的屬性 <TargetFrameworks>net48;net6.0</TargetFrameworks> 自動建立兩種 .NET 版本。 為了實現自動參照正確版本的 Spotfire 二進位檔,在 csproj 檔中定義 MSBuild property 中的 TargetFramework 以定義參照位址。例如: <Reference Include="Spotfire.Dxp.Application"> <HintPath>../../../Binaries/$(TargetFramework)/Spotfire.Dxp.Application.dll</HintPath> <Private>false</Private> </Reference> VisualStudioMacros 該 SDK 包含一個 Visual Studio macro,簡化 document nodes 的開發。它基於定義 Custom Spotfire Document Nodes 的私有域(private fields)

<span title='2023-06-22 21:43:13 +0800 +0800'>June 22, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Rain Hu

[DXP] 在 spotfire 中創建自定義工具

簡介 Custom Tool 是一種通用 Spotfire 擴充類型,用於在特定文本中(spotfire app, docuemnt, visual, …)執行某些動作,且可顯示或隱藏於菜單中。 概要 開發者需新建一個類別,並繼承並實作 CustomTool 類別。然後這個類別會在 AddIn 類別的 RegisterTools 方法中註冊。此時,也可以使用CustomMenuGroup 類別指定將工具放置在自訂菜單組中。 在創建 CustomTool 類別時,工具文本被指定為類型參數,例如對於 Document 需使用使用 CustomTool<Document>,對於 Page 需使用CustomTool<Page>。 可以將提示添加到工具中。提示對話框可以添加到 Windows 客戶端和 Web 客戶端。 在實作 custom tool 時,需注意到以下的特性: Tools 是靜態的(static):工具只有一個實例,該實例從調用 Execute() 方法的文本引數中接收其文本的處理。 Tools 是無狀態的(stateless):一個狀態只能從一個繼承自 DocumentNode 類別並附加到文件模型的實例中保存在文件中。使用 CustomNode 類別和 Document.CustomNodes 屬性。 Tools 只執行一個動作。:通常,該動作需要在一個 undo stack 上產生一個 undo state。因此,所有更改文檔狀態的工具都應該被包裝在其 Transaction 中。 Tools 文本 1. Application public sealed class MyApplicationTool : CustomTool<AnalysisApplication> AnalysisApplication tools 可從「Tools」選單中取得,在啟動 Spotfire 後即可啟用。 2. Document public sealed class MyDocumentTool : CustomTool<Document> Document tools 可從「工具」選單中取得,在文件開啟時啟用。 3. Page public sealed class MyPageTool : CustomTool<Page> Page tools 可從頁面文本選單中使用,但 web client 無法使用。 4. Visual public sealed class MyVisualTool : CustomTool<VisualContent> VisualContent 文本為頁面上的所有視覺工具提供了一個工具。還有針對特定可視化類型應用的視覺工具的子文本: Visualization: 所有可視區,不包括繪圖區(plot area)。 BarChart: 僅限長條圖。 BoxPlot: 僅限箱形圖。 CombinationChart: 僅限組合圖表。 CrossTablePlot: 僅限交叉圖表。 GraphicalTable: 僅限圖形表格繪圖。 KPIChart: 僅限KPI圖表。 LineChart: 僅限折線圖。 MapChart: 僅限地圖圖表。 ParallelCoordinatePlot PieChart: 僅限圓餅圖。 ScatterPlot: 僅限散佈圖。 ScatterPlot3D: 僅限3D散佈圖。 SummaryTable: 僅限摘要表格。 TablePlot: 僅限表格繪圖。 TextArea: 僅限文字區域。 WaterfallChart: 僅限瀑布圖表。 通過覆寫 IsVisibleCore 方法,可以將多個子文本結合起來,從而隱藏除了有明確定的子文本以外的工具。例如,擁有一個僅對散點圖和條形圖可用的工具,並在有標記(marking)時啟用。 5. TablePlot TablePlotColumn ...

<span title='2023-06-06 22:38:08 +0800 +0800'>June 6, 2023</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Rain Hu

[DXP] 在 spotfire 中創建自定義任務

簡介 Spotfire Automation Services 提供一個平台和工具,用於在無使用者操作與 UI 的情況下自動地執行 TIBCO Spotfire。 適用情境如「定期發送報告」、「在某些事件發生時保存嵌入在 Spotfire 文件中的截圖」,以及在許多其他需要基於Spotfire文件進行自動化操作的情況下使用。 自動化服務 API 使自訂任務變得可能,且可與內建任務一起使用,執行自動化工作。 Spotfire 用語 名詞 解釋 Task Task 是用於創建複雜工作的基礎模塊。自動化服務附帶了許多預定義的 Tasks,例如應用書籤或發送電子郵件或乃至其它可擴充的 Tasks。 Job 排程好待執行的 Tasks 組合成一個 Job,Job 又被儲存於 Job File 中。 Job File Job File 是一個可讀的 XML,用於定義 Job。 Job Builder Job Builder 是一個在 Spotfire 專業版中運行的應用程式,提供了一個易於使用的界面,用於創建和編輯工作。 Job Sender ClientJobSender 是一個工具,可將作業發送到 Spotfire Server 以進行執行。使用 ClientJobSender 設置定期或事件驅動的作業執行。 架構 Job 通常是在 Job Builder 或 ClientJobSender 中創建並保存為 XML 的 Job File,然後被送至 Spotfire 伺服器以執行,或是使用 ClientJobSender 工具發送到 Spotfire 伺服器以進行執行。 對於每個以 XML 格式發送到 Spotfire Server 以執行的工作,Automation Services 會啟動一個 node。接著內部工作執行程序會逐一執行任務,直到任務失敗或所有任務成功完成時退出。 Job File 格式 工作檔案的 XML 格式設計為易於理解和修改。雖沒有正式的格式規範,但可讀性仍是挺高的。 以下是一個「從 Analytics Server Library 開啟分析文件並將圖像匯出到預定位置」的 Job 範例: <as:Job xmlns:as="urn:tibco:spotfire.dxp.automation"> <as:Tasks> <OpenAnalysisFromLibrary xmlns="urn:tibco:spotfire.dxp.automation.tasks"> <as:Title>Open Analysis from Library</as:Title> <AnalysisPath>/Users/Username/Baseball stats</AnalysisPath> </OpenAnalysisFromLibrary> <ExportImage xmlns="urn:tibco:spotfire.dxp.automation.tasks"> <as:Title>Export Image</as:Title> <VisualizationId>292a90c6-0e03-47fe-961e-a528a14e9735</VisualizationId> <DestinationPath>C:inetpubwwwrootMyWebServerImage.png</DestinationPath> <Width>640</Width> <Height>480</Height> </ExportImage> </as:Tasks> </as:Job> 自動化 Task 範例 一個 Task 需繼承 Task 母類別。 一個 Task 類別必須擁有一個無參建構式,並呼叫 base 建構式,並傳入標題和描述。如果相同的任務名稱已經在使用中,可以選擇性地使用 XmlRoot 命名空間來避免命名衝突。為自訂任務使用自訂命名空間。 // 自定義任務的命名空間 [XmlRoot("urn:spotfiredeveloper.automationservicesexample")] public sealed class ApplyBookmark : Task { // 建立一個無參建構式,並呼叫 base 建構式,同時傳入標題與描述 public ApplyBookmark() : base(Properties.Resources.ApplyBookmarkTitle, Properties.Resources.ApplyBookmarkDescription) { } // 一些 public 的 properties 可供 UI 存取 [Description("The GUID of the bookmark to apply")] public Guid BookmarkId { get; set; } } 當任務被執行時,會執行 ExecuteCore 方法。 protected override TaskExecutionStatus ExecuteCore(TaskExecutionContext context) { // 沒有文件被讀取 if (context.Application.Document == null) { return new TaskExecutionStatus(false, Properties.Resources.NoAnalysisLoaded); } // 檢查書籤是否存在於新書籤中 var manager = context.Application.GetService<BookmarkManager>(); if (manager != null) { Bookmark bookmark; if (manager.TryGetBookmark(this.BookmarkId, out bookmark)) { // 套用書籤 manager.Apply(bookmark); return new TaskExecutionStatus(true); } } // 檢查書籤是否存在於舊書籤中 foreach (var bookmark in context.Application.Document.Bookmarks) { if (bookmark.Id == this.BookmarkId) { // 套用書籤 bookmark.Apply(); return new TaskExecutionStatus(true); } } // 找不到書籤,報錯 Console.WriteLine("Error in execution of job {0}. The bookmark {1} was not found.", context.Id, this.BookmarkId); return new TaskExecutionStatus(false, Common.Format(Properties.Resources.BookmarkNotAvaliable, this.BookmarkId)); } 註冊 最後,工作任務必須被註冊在單獨的 RegisterTasksAddin 類別中 public sealed class TasksAddIn : RegisterTasksAddIn { public override void RegisterTasks(TaskRegistrar registrar) { registrar.Register(new ApplyBookmark()); } }

<span title='2023-06-06 21:36:12 +0800 +0800'>June 6, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Rain Hu

[DXP] 使用 Visual Studio 對 Spotfire 開發進行環境設置

在 Visual Studio 中創建 Extension 在 Visual Studio 中,選擇 [Tools] > [Options],並在 [Projects and Solutions] > [Locations] 下,將 [User project templates location] 設定為 Spotfire SDK 中 [Templates] 資料夾的路徑。 在 Visual Studio 中,選擇 [File] > [New] > [Project],然後選擇 [TIBCO Spotfire Extension_VS] 或 [TIBCO Spotfire Extension Net6_VS] 範本。請注意,TIBCO Spotfire Extension Net6_VS 範本是一個 SDK-style 專案,它允許同時為多個平台進行構建。這是本範例中使用的範本。為了使預定義的後置構建步驟正常工作, 新專案的位置必須在 SDK 中的 MyExtensions 文件夾中 (或者在同一級別的其他文件夾中) 並選取 [Place solution and project in the same directory] 核取方塊。 透過選擇 [Build] > [Build Solution] 來編譯新建立的專案。這將會產生一個新的子資料夾 MyExtensions\Build,其中會存放所有建置產物。 編譯後的二進制文件與 SDK 二進制文件會儲存在 Build\bin\ 中。例如,Build\bin\net6.0 或 Build\bin\AnyCPU\Debug。 一個或多個 Spotfire 套件檔案 (.spk) 儲存在 Build 資料夾中。 套件檔案的未打包版本儲存在 Build\Modules\<Extension-name>_<Version number>中。例如,TIBCO Spotfire_Extension_Net6_VS-Windows_1.0.6320.3907。這樣與下載的 Spotfire 的擴充方式一致,更易於 debug。 為了能夠除錯擴充功能,需在 Visual Studio 中手動進行以下配置: 在 Solution Explorer 中選擇擴充功能專案。 選擇 [View] > [Property Pages]。 在 Debug 頁面上,點擊 [Open debug launch profiles UI],然後在 [Launch Profiles] 對話框中執行以下操作: 點擊 [Create a new profile],並選擇 [Executable]。 在 [Executable] 下,指向電腦中的 Spotfire.Dxp.exe。它可以是安裝的版本、某些中間測試版本或類似版本。例如,C:\Users\{username}\AppData\Local\TIBCO\Spotfire\12.0.0\Spotfire.Dxp.exe。 在 CLI 下,輸入 /loadallmodules /addmodulefolder:<SDK 中模組資料夾的路徑>,舉例: /loadallmodules /addmodulefolder:C:\SpotfireSDK\SDK\MyExtensions\Build\Modules`。 為了驗證擴展功能已經載入,請在 Visual Studio 中選擇新的 Debug 檔案,並運行它以確保 Spotfire 已啟動。 在 Spotfire 中,請前往 [Help] > [Support Diagnostics and Logging],向下捲動已載入檔案的清單,以確認擴充功能已載入。 使用標準管理使用者介面 [Deployments & Packages],將儲存在 Build 資料夾中的套件檔案部署到 Spotfire 伺服器。 自訂環境和進階資訊 可以透過編輯 post-build command 來配置 Visual Studio 環境。 ...

<span title='2023-06-06 20:58:59 +0800 +0800'>June 6, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Rain Hu