2025年8月7日 星期四

提升效率!用 AppSheet 一鍵複製整張訂單 (含所有訂單明細)

AppSheet 內建的「複製」動作 (Copy) 只會複製主表的當前那一筆紀錄,並不會自動複製其關聯的子表紀錄。要實現主子表一起複製(通常稱為「深度複製 Deep Copy」),我們需要自己組合一系列的動作 (Actions) 來完成。

請跟著以下步驟操作,我會用一個「訂單」和「訂單明細」的例子來說明。

  • 主表 (Parent Table): 訂單 (Orders)

  • 子表 (Child Table): 訂單明細 (Order Details)

  • 主表的主鍵 (Key): 訂單ID (OrderID)

  • 子表的關聯欄位 (Ref Column): 所屬訂單ID (Related OrderID)


整體思路

我們會建立一個「群組動作 (Grouped Action)」,它會依序執行以下三件事:

  1. 複製主表紀錄:建立一張新的訂單。

  2. 觸發子表複製:找到舊訂單的所有明細。

  3. 逐一複製子表紀錄:根據舊的明細,建立新的明細,並把它們關聯到「新的」訂單上。


步驟一:建立「複製單筆子表紀錄」的動作

這個動作是整個流程的核心,它的任務是「複製一筆訂單明細,並將其關聯到最新的那張訂單上」。

  1. 前往 Actions 頁面,點擊 New Action

  2. For a record of this table: 選擇你的子表 (例如:訂單明細)。

  3. Action name: 給它一個內部使用的名稱,例如 (內部)複製單筆明細

  4. Do this: 選擇 Data: Add a new row to another table using values from this row

  5. Table to add to: 選擇子表本身 (例如:訂單明細)。

  6. Set these columns: 這是最關鍵的部分!

    • [子表的主鍵] (例如 明細ID): 設為 UNIQUEID(),確保新紀錄有唯一的 ID。

    • [關聯主表的欄位] (例如 所屬訂單ID): 這裡要填入新建立的那筆主表紀錄的 ID。最簡單可靠的方法是使用 MAXROW() 函數找到「剛剛」被新增的那筆主表紀錄。

      Code
      MAXROW("訂單", "_ROWNUMBER")

      公式解說:

      • "訂單": 你的主表名稱。

      • "_ROWNUMBER": AppSheet 內部紀錄的行號,數字越大代表越新。

      • MAXROW(...): 找到 _ROWNUMBER 最大的那一筆主表紀錄。


    • 其他子表欄位 (例如 產品名稱數量單價): 直接從來源複製即可。

      • [產品名稱] = [產品名稱]

      • [數量] = [數量]

      • ... 以此類推。

  7. Appearance: 將 Prominence 設為 Do not display,因為這個動作不需要單獨顯示給使用者。

步驟二:建立「複製主表」的動作

這個動作很簡單,就是複製主表本身。

  1. 前往 Actions 頁面,點擊 New Action

  2. For a record of this table: 選擇你的主表 (例如:訂單)。

  3. Action name: (內部)複製主訂單

  4. Do this: 選擇 Data: Add a new row to another table using values from this row

  5. Table to add to: 選擇主表本身 (例如:訂單)。

  6. Set these columns:

    • [主表的主鍵] (例如 訂單ID): 設為 UNIQUEID()

    • 其他你希望複製的欄位 (例如 客戶名稱地址):

      • [客戶名稱] = [客戶名稱]

    • 你可能希望更新的欄位 (例如 訂單日期):

      • [訂單日期] = TODAY()

  7. Appearance: 同樣設為 Do not display

步驟三:建立「觸發複製所有子表」的動作

這個動作的目的是告訴 AppSheet:「去找出這筆主紀錄的所有子紀錄,然後對每一筆子紀錄都執行步驟一的那個動作」。

  1. 前往 Actions 頁面,點擊 New Action

  2. For a record of this table: 選擇你的主表 (例如:訂單)。

  3. Action name: (內部)觸發複製所有明細

  4. Do this: 選擇 Data: Execute an action on a set of rows

  5. Referenced Table: 選擇你的子表 (例如:訂單明細)。

  6. Referenced Rows: 這裡要填入一個表達式,來選取當前主紀錄關聯的所有子紀錄。通常 AppSheet 已經幫你建好了,欄位名稱會是 Related [子表名稱]s

    [Related 訂單明細s]
  7. Referenced Action: 從下拉選單中,選擇我們在步驟一建立的動作 (內部)複製單筆明細

  8. Appearance: 同樣設為 Do not display

步驟四:建立最終給使用者點擊的「群組動作」

現在,我們將上面兩個「內部」動作打包成一個使用者看得到的按鈕。

  1. 前往 Actions 頁面,點擊 New Action

  2. For a record of this table: 選擇你的主表 (例如:訂單)。

  3. Action name: 給它一個使用者看得懂的名稱,例如 複製整張訂單 或 複製主表與子表

  4. Do this: 選擇 Grouped: execute a sequence of actions

  5. Actions: 依序加入以下兩個動作:

    • (內部)複製主訂單 (步驟二建立的)

    • (內部)觸發複製所有明細 (步驟三建立的)
      順序非常重要! 必須先複製主表,再觸發複製子表。

  6. Appearance:

    • Prominence: 選擇你希望它顯示的位置,例如 Display overlay (會出現在右下角)。

    • Display name: 可以再次確認顯示的名稱。

    • Action icon: 選擇一個合適的圖示,例如 Copy


最後檢查與同步

  1. 保存所有變更:點擊右上角的 "Save" 按鈕。

  2. 確認顯示設定:確保只有最後那個「群組動作」是顯示的,其他三個內部動作都是 Do not display

  3. 同步 App:在手機或瀏覽器上同步你的 App,然後找到一筆有子表紀錄的主表資料,點擊你新建立的「複製整張訂單」按鈕。

如果一切順利,App 會在背景執行,然後你會在主表列表中看到一筆新的紀錄,點進去看,它的子表內容應該會和來源訂單一模一樣!

注意: MAXROW() 的方法在絕大多數情況下都運作良好。但如果在一個使用者非常多、且可能在完全相同的秒數內有多人同時點擊複製按鈕的高併發環境下,理論上存在極小的機率會出錯。對於一般的企業內部應用,這個風險可以忽略不計。

沒有留言:

張貼留言

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

AppSheet 教學:如何在 App 中動態產生並顯示 QR Code 條碼?

在現代的商業應用中,QR Code(二維條碼)扮演著舉足輕重的角色,無論是產品追蹤、活動報到,還是設備管理,QR Code 都能提供快速、便利的資訊存取方式。今天,我們要分享一個非常實用的 AppSheet 技巧:如何在您的 App 中,根據每筆資料的內容,動態產生對應的 QR ...