分開儲存原始與最新資料:貨幣及金額準備好後,只寫入一次 Rate at transaction、來源和生效時間。定時自動化則更新 Current rate 及其相關資料,避免市場變動改寫交易的歷史記錄。
建立 Transactions 表
建立 Transactions 表,加入以下欄位:From、To(single line text);Amount、Rate at transaction、Transaction converted(number);Transaction source、Transaction market session、Transaction effective at;Archived(checkbox);Current rate、Current converted(number);以及 Source、Market session、Effective at、Checked at、Sync status、Sync error。將 Transaction effective at、Effective at、Checked at 設為日期時間欄位,其餘相關資料及狀態欄位使用單行文字。建立 Needs FX refresh 檢視,篩選未勾選 Archived 的記錄,按 Checked at 由舊至新排列,空值放在最前,讓後續執行依次處理其他記錄。
兩組匯率的意思不同。Transaction * 欄位儲存供會計或審計使用的交易快照。沒有該前綴的目前欄位儲存供儀表板或估值使用的新參考觀測值。不要用目前值改寫原始記錄。
儲存原始交易匯率
建立 Airtable 自動化,選擇 When record matches conditions 觸發條件:From、To、Amount 已填寫,而 Rate at transaction 留空。加入 Run a script,將 mode 設為 snapshot,傳入觸發記錄的 recordId,然後貼上下載的指令碼。新增名為 exchangerateApiKey 的 Automation secret;指令碼透過 input.secret 讀取它,沒有密鑰存取權限的編輯者仍可執行自動化,但看不到密鑰值。只有原始匯率留空時,指令碼才寫入 Rate at transaction、Transaction converted、Transaction source、Transaction market session 及 Transaction effective at。重試時若已有數值,所有原始欄位均保持不變。
exchangerateApiKey,保持名稱不變。不要將數值放進資料表欄位、URL、共用描述或程式碼字面值。Airtable 只容許擁有相應密鑰權限的使用者編輯使用這些密鑰的指令碼。定時更新目前估值
建立第二個自動化,選擇 At scheduled time。將 mode 設為 refresh,留空 recordId,以處理 Needs FX refresh 的首 25 筆記錄,並貼上完整的 Airtable 指令碼。每次執行最多發出 25 個 HTTP 請求,低於 Airtable 的 50 次 fetch 限制;每批最多寫入 50 筆記錄。此範例適合小型報表資料庫;較大的表需要規劃佇列及合併請求。若每天查詢 25 個不同貨幣對,30 天最多約需 750 個 API 請求,另加初始快照及重試。
重新整理只更新 Current rate、Current converted、Source、Market session、Effective at 及 Checked at,不會更新任何 Transaction * 欄位。HTTP 失敗或回應格式錯誤時,指令碼將 Sync status 設為 Error,並保留上次成功取得的目前值。
清楚顯示失敗狀態
401 表示需要檢查 Automation secret;429 表示需要檢查執行頻率或帳戶限制;缺少貨幣代碼表示貨幣對無效或不可用。保留上次成功值及原有 Checked at,並透過 Sync error 向操作人員提供診斷。不要將失敗變成匯率為零的記錄。
檢查 Airtable 方案限制
Airtable 的 Run a script 文件說明了內置 Automation secrets 及編輯權限保護。自動化限制指出 Free 方案不支援 Run a script,失敗的執行亦計入用量。報表通常每天更新便足夠;提高頻率並不能把每日參考匯率變成即日報價。
