2025年12月12日 星期五

【AppSheet 教學】如何將 Virtual Column (虛擬欄位) 寫回 Google 試算表?以庫存管理為例

在使用 AppSheet 進行開發時,我們經常使用 Virtual Column (虛擬欄位) 來進行即時運算。例如在進銷存系統中,商品的「當前庫存」通常是由 SUM(進貨) 減去 SUM(銷貨) 動態計算出來的。

然而,Virtual Column 的值只存在於 AppSheet 的運算中,並不會實際寫入後端的 Google Sheets (或其他資料庫)。許多網友詢問:「如果要讓這個計算出來的庫存數字,實際寫回試算表該怎麼做?」

這篇文章將透過「事件驅動 (Event Action)」的方式,教你如何在進貨或銷貨時,自動將虛擬欄位的計算結果寫回實體欄位。


為什麼需要這樣做?

  1. 資料同步:希望 Google Sheet 上能直接看到最新的庫存數字,而不是只能在 App 裡看。

  2. 後續應用:試算表中的實體數據可以用於其他報表分析或與其他系統串接。

實作邏輯概覽

由於庫存的變化是發生在「進貨」或「銷貨」表單,而非直接修改「商品」資料表。因此流程如下:

  1. 在 商品表 建立一個將虛擬欄位數值複製到實體欄位的 Action

  2. 在 進貨/銷貨紀錄表 建立一個觸發器 Action,去驅動商品表的更新。

  3. 在 表單視圖 (Form View) 設定 Form Saved 事件,當資料儲存時自動執行上述動作。


步驟一:準備資料表欄位

首先,確保你的 Google Sheet 商品表中,有一個實體欄位用來存放庫存(例如命名為 實際庫存 或 Number)。

  • Virtual Column (庫存):AppSheet 內自動計算的欄位(藍色)。

  • 實體欄位 (實際庫存):Google Sheet 內真實存在的欄位,目前可能是空的或舊資料。


步驟二:建立「計算庫存」動作 (針對商品表)

我們要先告訴 AppSheet 如何把虛擬欄位的值「搬」到實體欄位。

  1. 進入 Behavior > Actions

  2. 點選 New Action

  3. Action Name:命名為「計算庫存」 (或 Update Inventory)。

  4. For a record of this table:選擇 商品表 (例如:一整天代賣商品)。

  5. Do this:選擇 Data: set the values of some columns in this row

  6. Set these columns

    • 左邊選擇實體欄位:實際庫存

    • 右邊填入虛擬欄位值:[庫存] (你的 Virtual Column 名稱)

  7. Appearance (外觀設定)

    • 建議將 Prominence 設為 Do not display

    • 原因:我們希望這是系統自動執行的,不需要使用者手動去按按鈕。


步驟三:建立「觸發」動作 (針對進貨/銷貨紀錄表)

接著,我們需要在進貨或銷貨發生時,去「呼叫」步驟二的動作。這裡以進貨為例 (銷貨的設定邏輯相同)。

  1. 進入 Behavior > Actions

  2. 點選 New Action

  3. Action Name:命名為「進貨事件」 (或 Trigger Inventory Update)。

  4. For a record of this table:選擇 進貨紀錄表 (例如:進貨紀錄)。

  5. Do this:選擇 Data: execute an action on a set of rows (對另一張表的一組資料執行動作)。

  6. Referenced Table:選擇 商品表 (因為我們要更新的是商品庫存)。

  7. Referenced Rows (最關鍵的一步):

    • 我們需要用公式找出「這一筆進貨是對應哪一個商品」。

    • 輸入公式:

      Appsheet
      SELECT(一整天代賣商品[編號], [編號] = [_THISROW].[編號])

      (語意:從商品表中,選出那個「商品編號」等於「這筆進貨紀錄商品編號」的那一列)

  8. Referenced Action:選擇步驟二建立的 「計算庫存」


步驟四:設定表單儲存後自動執行

最後,我們要將這個動作綁定在使用者填寫表單的行為上。

  1. 進入 UX > Views

  2. 找到進貨紀錄的 Form View (通常是 進貨紀錄_Form)。

    • 注意:如果你是透過關聯表單 (Inline View) 新增,請找到對應的 Inline Form View。

  3. 往下捲動找到 Behavior 設定區塊。

  4. 在 Event Actions > Form Saved (表單儲存時) 的選項中。

  5. 選擇步驟三建立的 「進貨事件」

  6. 按下 Save 儲存設定。


測試與驗證

  1. 在 App 中新增一筆進貨資料(例如:進貨數量 +1)。

  2. 儲存表單。

  3. 等待 App 同步完成。

  4. 驗證 App:查看商品列表,庫存數量應已更新。

  5. 驗證 Google Sheet:打開後台試算表,你會發現對應商品的「實際庫存」欄位,已經被寫入最新的計算結果了。

注意事項

  • 銷貨紀錄 也需要重複「步驟三」與「步驟四」,建立一個「銷貨事件」並綁定在銷貨表單上,這樣賣出商品時才會扣庫存。

  • 這種寫法是利用 AppSheet 前端的 Action 觸發,如果資料量非常大,可能會有些微的效能影響,但在一般庫存管理場景中非常實用。


希望這篇教學能幫助大家解決 Virtual Column 無法存回試算表的困擾! 



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

【AppSheet 教學】如何將 Virtual Column (虛擬欄位) 寫回 Google 試算表?以庫存管理為例

在使用 AppSheet 進行開發時,我們經常使用  Virtual Column (虛擬欄位)  來進行即時運算。例如在進銷存系統中,商品的「當前庫存」通常是由  SUM(進貨)  減去  SUM(銷貨)  動態計算出來的。 然而,Virtual Column 的值 只存在於 ...