🐬Spotfire Automation Services 排程怎麼確認真的有跑?從 Scheduled Jobs 到 Script 流程一次看懂(新手也能懂)

前言:為什麼「排程顯示 Completed」不代表你想要的流程都成功?

很多人第一次使用 Spotfire Automation Services,會以為:

Scheduled jobs 顯示 COMPLETED
就代表「資料有更新、腳本有跑、PDF 有輸出」✅

但實務上常遇到的狀況是:

  • 排程顯示 COMPLETED,但匯出的檔案是舊資料
  • 手動跑 OK,自動排程卻失敗
  • 明明設定了 Script,卻不知道它到底有沒有被執行
  • 看得到 Job name,但找不到「到底跑了哪些步驟」

這篇文章會用「完全沒接觸過的人也能懂」的方式,帶你把整個執行流程拆開來看。


一句話先懂:Scheduled Jobs 只是「外殼」,真正流程在 Library

Spotfire Automation Services 的概念可以用一句話理解:

  • Scheduled Jobs:排程表(像 Windows 工作排程器的清單)
  • Library 裡的 Job 定義:真正的流程腳本(像 .bat / pipeline / workflow)

所以你在 Scheduled Jobs 看到的資訊,通常只有:

  • Job 名稱
  • Job path(例如 /DEV/FT Auto
  • 最後狀態(Completed / Failed)
  • 下次執行時間

但你想看的這些,不會出現在 Scheduled Jobs:

  • 用哪個 .dxp
  • 跑了哪些 Script
  • Script 做了哪些事(刷新資料、換頁、匯出、存檔)
  • 匯出 PDF / Excel 到哪裡

1)如何找到「真正的執行流程」:跟著 Job path 走

你會在 Scheduled Jobs 看到一個 Job path,例如:

  • /DEV/CP Auto
  • /DEV/FT Auto

這個 path 就像「資料夾路徑」,代表真正的 Job 定義放在哪。

正確操作

  1. 進到 Automation Services → Library
  2. 展開 /DEV
  3. 點進去找到 CP AutoFT Auto
  4. 打開 Job 定義(Workflow)

打開後你才會看到它真正在做什麼。


2)打開 Job 定義後,先看懂 5 個關鍵步驟(超重要)

Automation Job 通常由很多「任務(Tasks)」組成,你可以把它想像成:

一條流水線:開檔 → 刷新資料 → 跑腳本 → 匯出 → 存檔 → 關閉

新手只要先掌握這 5 類,就能快速定位問題。


(1)Open Analysis:它到底開哪個報表?

這一步會指定要打開哪個 Spotfire 分析檔(.dxp)。

你要確認:

  • 是不是正確的檔案
  • 路徑是否可被伺服器存取
  • 是否使用「儲存版本」或「特定版本」

(2)Data Refresh / Reload:它有沒有真的更新資料?

很多「排程看起來成功,但結果是舊的」就是因為:

  • 沒有做 Refresh / Reload
  • 或資料庫連線在伺服器環境下權限不足
  • 或刷新只刷新某些表

你要找的關鍵字通常是:

  • Refresh data tables
  • Reload data
  • Update from source

(3)Execute Script:你要找的 Script 都在這裡

如果你要確認「腳本是否有跑」,就看 Execute Script / Script Task

通常會顯示:

  • Script 名稱(或 Inline Script)
  • Script 類型(常見 IronPython)
  • 參數設定(有些會吃 Document Properties)

下面是一個「安全版」示意 Script:
用途:在排程環境中寫 log、更新 document property、並印出目前時間。

# Demo Script (Sanitized Example)
from datetime import datetime

def write_log(msg):
# 這裡只示意:實務上可寫到共享資料夾或伺服器 log
print("[AUTO] " + msg)

write_log("Job started")
write_log("Current time: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

# 假設要更新某個參數(示意用)
# Document.Properties["RUN_FLAG"] = "Y"

write_log("Job finished")

✅ 這種 Script 在排程環境通常能跑
⚠️ 但如果 Script 依賴「UI 操作」,排程就很容易失敗(下一節會講)


(4)Export:報表匯出(PDF/Excel)設定在哪?

很多人卡在「為什麼沒產生檔案」
原因通常就在 Export Task。

你要確認:

  • 匯出格式:PDF / Excel
  • 匯出路徑:是否是伺服器可寫入的路徑
  • 檔名是否覆蓋、是否有日期參數
  • 權限:服務帳號是否有寫入權限

可靠的匯出路徑建議

\\FileServer\Share\ReportOutput\...
D:\SpotfireOutput\...(在同一台 server 且權限正確)

C:\Users\你的帳號\Desktop\...(排程常常根本沒有這個桌面環境)


(5)Save / Close:為什麼有時候會「下次跑更亂」?

有些流程會在最後:

  • Save analysis(會覆蓋原 DXP)
  • Close analysis(結束)

如果你「只想匯出報表」,不想改動原報表狀態
就要特別注意 Save 的設定,避免把當次狀態寫回去。


3)為什麼「手動可以、排程不行」?最常見的原因是 UI 相依

排程環境沒有你在桌面版看到的 UI。
所以以下這類操作常常會炸:

  • 依賴「目前在哪一頁」
  • 依賴「使用者點選某個篩選器」
  • 依賴「標記(Marking)」或某個視覺元件的互動

典型危險示意

# ⚠️ 示意:排程環境可能沒有你以為的 ActivePage
active_page_title = Application.Document.ActivePageReference.Title
print("Active page:", active_page_title)

✅ 改法:在 Script 裡不要假設 UI 狀態
應改成用「固定名稱」或「Document Properties」驅動流程。


4)要去哪裡看「排程到底做了什麼」?這兩個地方最關鍵

(A)Automation Services → Monitor → Job Activity

你可以看到:

  • 每次執行的時間
  • 失敗的錯誤訊息(通常最有用)
  • 執行耗時

(B)在 Script 裡加上「可追蹤 log」

最簡單的方法:在 Script 內印出時間與關鍵節點訊息
並讓 log 被保存(例如輸出到共享資料夾或系統 log)。


結語:快速檢查 Spotfire 排程流程的「新手 SOP」

如果你只想快速掌握,照這套做就對了:

  1. 在 Scheduled Jobs 先看 Job path
  2. 去 Library 用 path 找到 Job 定義
  3. 在 Job 定義裡按順序確認:
    • Open Analysis
    • Refresh/Reload
    • Execute Script
    • Export
    • Save/Close
  4. 出問題就去 Monitor → Job Activity 看 log
  5. Script 內加入可追蹤 log,避免「跑了但不知道跑到哪」

常見 FAQ

Q1:為什麼 Completed 但沒看到輸出檔?

通常是 Export path 權限、路徑不存在、或寫到本機使用者桌面造成的。

Q2:我能看到 Script 名稱,但看不到 Script 內容?

有可能 Script 是存在 .dxp 裡的 Script Manager,Automation 只引用名稱。
要回到 Spotfire Analyst(桌面版)看 Script Manager。

Q3:怎麼確認 Script 一定有被執行?

最保險:在 Script 裡寫 log(印時間/寫檔/寫資料庫一筆 log),就能精準確認。

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🖥️遠端桌面連線完整新手指南:Windows RDP、Chrome Remote Desktop、AnyDesk、TeamViewer 一次搞懂

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)