OrderCopy 指令
這個指令會建立、合併或修改狀態屬性為 "P" 或 "E" 的訂單。

參數值
- http://host_name/path/
- (必要)WebSphere Commerce Server 和架構路徑的完整名稱。
- langId
- 設定或重設在階段作業期間的屬意語言;
有關商店的支援語言可在 STORELANG 表格中找到。
- forUser
- 將代替其執行指令之使用者的登入 ID;只有具備處理訂單權限的人才可指定這個參數。
- forUserId
- 與 forUser 相同,但卻是 USERS 表格中之內部使用者 ID 所指的使用者。
- URL
- (必要)指令順利完成時要呼叫的重新導向 URL。
- fromOrderId_i
- 指定在處理列舉群組 i 時,將從中複製出訂單項目的零或多個來源訂單。
"." 、"*"、 ".t" 、 "*t" 和 "q" 等特殊縮寫利用 memberId_i 與 storeId 來解析。
- toOrderId
- 指定所要建立或修改的訂單。
它可以指定為訂單參考號碼,也可以指定為特殊縮寫 "."、"*"、".t"、"*t"、"**" 和 ".**." 之一。
如果沒有指定的話,會以 "**" 為預設值,這會建立一份新訂單。
如果指定了多個訂單,則視為只指定最近一次更新的一個訂單。
縮寫是利用現行客戶(執行這個指令的客戶)和 storeId 參數中所指定的商店來解析的。
- copyOrderItemId_i
- 指定應從 fromOrderId_i 指定的來源訂單中複製出哪些訂單項目,並將之加到 toOrderId 指定的目標訂單中。
- 如果沒有指定或指定了 "*",參數會參照屬於 fromOrderId_i 指定之訂單的所有訂單項目。
- 如果指定 ".",參數會參照屬於 fromOrderId_i 指定的訂單其中最近更新的訂單項目。
- 如果指定 "**",參數會參照新增到目標訂單內的單一新訂單項目,而這個訂單項目在新增到目標訂單時所使用的資訊來源只有 i 指定的列舉群組其中的其它參數,而不會有該列舉群組的來源訂單。
在此情況下,
必須指定 catEntryId_i 或 partNumber_i。
OrderCopy 指令會呼叫
OrderItemUpdate 指令,以新增訂單項目到目標訂單中。
- updateOrderItemId_i
- 指定目標訂單中將更新的訂單項目。
它更新時所用的資訊來源是 i 指定的列舉群組其中的其它參數,不是該列舉群組的來源訂單,也不是 catEntryId_i 和 partNumber_i。
請注意,訂單項目的型錄項目 ID 不能更新。OrderCopy 指令會呼叫 OrderItemUpdate 指令來更新目標訂單中的訂單項目。
- 如果指定 "*",它表示目標訂單中的所有訂單項目。
- 如果指定 ".",它表示最近更新的訂單項目。
- orderInfoFrom
- 指定將複製其中之訂單層次資訊的訂單參考號碼
(ORDERS 表格中 DESCRIPTION、ADDRESS_ID、SEQUENCE、FIELD1、
FIELD2 與 FIELD3 直欄的值)。
- 如指定了多個訂單,則視為只指定這些訂單中最近一次更新的部份。
- 如指定 "**",將不會複製任何訂單中的訂單層次資訊。
- 若未指定此參數,
且 fromOrderId_i 參數只指定一個來源訂單,則視為指定該訂單。
否則,將預設為 "**"。
會使用 storeId 參數指定的現行購物者
(執行此指令的購物者)與商店來解析縮寫。
- payInfoFrom
- 指定將從中複製付款資訊(藉由呼叫 GetOrderPaymentInfoCmd 作業指令取得)之訂單的參考號碼。
如指定了多個訂單,則視為只指定這些訂單中最近一次更新的部份。
如指定 "**",將不會複製任何訂單中的訂單層次資訊。
若未指定此參數,
且 fromOrderId_i 參數只指定一個來源訂單,則視為指定該訂單。
否則,將預設為 "**"。
縮寫是利用現行客戶和 storeId 參數指定的商店來解析的。
- catEntryId_i
- 設定列舉群組 i 中之訂單項目的型錄項目 ID。
- quantity_i
- 設定列舉群組 i 中之訂單項目的數量。
- UOM_i
- quantity_i 的度量單位。
- partNumber_i
- 要解析成型錄項目 ID 的產品編號。它會置換 catEntryId_i。
- addressId_i
- i 指定之列舉群組中之訂單項目的出貨地址參考號碼。
此地址必須隸屬於執行此指令的購物者。
- shipModeId_i
- 針對以 i 指定的列舉群組新增或更新目標訂單中的訂單項目時,指定要傳遞給 OrderItemUpdate 指令的出貨模式參考號碼。這個參考號碼與特定出貨服務相關。
- comment_i
- 當目的地新增或更新訂單項目時,要傳遞給 OrderItemUpdate 指令之項目所要併入的備註。
- field1_i
- 針對以 i 指定的列舉群組新增或更新目標訂單中的訂單項目時,指定要傳送給 OrderItemUpdate 指令的整數值。
- field2_i
- 針對以 i 指定的列舉群組新增或更新目標訂單中的訂單項目時,指定要傳遞給 OrderItemUpdate 指令的字串。
- contractId_i
- 當新增或更新目標中的訂單項目時,要傳遞給 OrderItemUpdate 指令的訂單合約參考號碼。
- offerId_i
- 當建立新訂單項目時,要從中選取的優惠 ID 清單。這份清單會傳遞給 OrderItemUpdate 指令。沒有預設值。
- outOrderName
- 指出將加到重新導向 URL 中的「名稱-值」配對名稱。
每個新增的「名稱-值」配對的值都是目標訂單的參考號碼。預設值是 "orderId"。
- outOrderItemName
- 指出將加到重新導向 URL 中的「名稱-值」配對名稱。
每個新增的「名稱-值」配對的值都是目標訂單項目的參考號碼。預設值是 "orderItemId"。
- 說明
- 設定目標訂單的說明。如果沒有指定,但有 "orderInforFrom" 訂單的說明,就會使用這個說明。
- billingAddressId
- 設定目標訂單的帳單地址 ID。如果沒有指定,但有 "orderInfoFrom" 訂單的帳單地址 ID,就會使用這個帳單地址 ID。
- displaySeq
- 設定目標訂單的顯示序列。如果沒有指定,但有顯示序列 "orderInforFrom" 次序,就會使用這個次序。
- field1 到 field3
- 分別設定目標訂單的 field1、field2 和 field3 值。如果沒有指定,但有 "orderInfoFrom" 訂單的對應欄位值,就會使用這個值。
- status
- 指定目標訂單的狀態。
有效值只有 I(已提交)和 P(擱置)。預設值是 P。
如果指定 I,在更新目標訂單之後,就已準備好要顯示和鎖定它,如同已經呼叫 OrderPrepare 一般,之後狀態會設為 I。
這會準備好訂單讓 OrderProcess 接受它,以及防止購物者進一步修改它。
- memberId_i
- 在特殊縮寫("."、"*"、".t", ".**." 和 "*t")出現於 fromOrderId_i 時,用來解析這些特殊縮寫的成員參考號碼。
比方說,下列指令會參照成員 1001 的所有擱置的訂單:
fromOrderId_1=*&memberId_1=1001
預設值是現行使用者的成員 ID。
若現行購物者擅自存取其它購物者的訂單,則會擲出異常狀況。
- storeId
- 設定目標訂單的商店 ID。
它也在特殊縮寫("."、"*"、".t", ".**." 和 "*t")出現於 fromOrderId_i、toOrderId、orderInfoFrom 和 payInfoFrom 時,用來解析這些特殊縮寫。
比方說,下列指令會參照商店 1 中之成員 1001 中的所有現行擱置訂單:
fromOrderId_1=*&memberId_1=1001&storeId=1
- attr_i_name
- 針對以 i 指定的列舉群組新增訂單項目到目標訂單中時,指定要傳遞給 OrderItemUpdate 指令的屬性名稱和值。
比方說,下列指令會參照含屬性 "length"=="10" 的零件 ABC123:
partNumber_1=ABC123&attr_1_length=10
- pay_payment_name
- 設定目標訂單的付款「名稱-值」配對。
比方說,下列指令會參照付款「名稱-值」配對 "creditCardNumber==2222222222":
pay_creditCardNumber=2222222222
這些付款「名稱-值」配對會透過 SetOrderPaymentInfoCmd 作業指令來新增到 ORDPAYINFO 表格中。
如果沒有指定,但有 payInfoFrom 的付款「名稱-值」配對,這會使用這個配對。
- partOwner_Id_i
- 零件擁有者的成員 ID,要搭配 partNumber_i 使用;預設值為商店擁有者。
- remerge
- 在同一訂單中要合併於其他 OrderItems 且具有相同的 correlationGroup 屬性 (如果可能) 的 OrderItems 清單。
- merge
- 在同一訂單中要合併於其他 OrderItems (如果可能),且不論其 correlationGroup 屬性是什麼的 OrderItems 清單。
- check
- CheckInventory 作業指令應該檢查的 OrderItems 清單。
- allocate
- 應該從現有庫存來配置的 OrderItems 清單。
- backorder
- 應該從預期庫存來配置的 OrderItems 清單。
- reverse
- 應該釋出其配置(也就是從現有或預期庫存中適當解除配置)之 OrderItems 的清單。
- configurationId_i
- 如果 OrderItem 代表已架構的動態套件,這就是架構 ID。
附註:只有在啟用 ATP 庫存時,才適合使用 remerge、merge、check、allocate、backorder 和 reverse 等參數(請參閱 STORE 表格中的 ALLOCATIONGOODFOR 直欄)。
它們代表要傳遞給 AllocateInventory 作業指令的 OrderItems 清單,由 AllocateInventory 作業指令依如下指定來呼叫
CheckInventoryAvailability、AllocateExistingInventory、AllocateExpectedInventory、DeallocateExistingInventory 和 DeallocateExpectedInventory 作業指令。
另外,這些參數也接受 OrderItem 縮寫,請參閱訂單子系統指令的說明,以取得詳細資料。
預設 ATP 參數值如下:
- remerge=*n
- merge=*n
- check=***
- allocate=*n
- backorder=*n
- reverse=*n
範例 1
下列範例會利用 fromOrderId_1 來複製訂單,因為預設 toOrder 是 **(新訂單),copyOrderItemId_1 的預設值是 *(所有訂單項目)。
http://myhostname/webapp/wcs/stores/servlet/OrderCopy?fromOrderId_1=388
&URL=OrderItemDisplay
範例 2
下列範例會建立兩份擱置訂單,再合併所有客戶擱置訂單中的所有訂單項目。
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?catEntryId=322200305
&quantity=11&URL=OrderItemDisplay&storeId=32&orderId=**
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?catEntryId=322200301
&quantity=11&URL=OrderItemDisplay&storeId=32&orderId=**
http://myhostname/webapp/wcs/stores/servlet/OrderCopy?URL=OrderItemDisplay
&fromOrderId_1=*©OrderItemId_1=*
範例 3
下列範例是新增一個新訂單項目到訂單 111 中。
http://myhostname/webapp/wcs/stores/servlet/OrderCopy?fromOrderId_1=111
&toOrderId=111&partNumber_1=PART-I312200303&quantity_1=21&memberId_1=0
&storeId=31&URL=OrderItemDisplay
範例 4
下列範例會利用 partNumber 來進行複製。
若有指定,則會忽略 catEntryId_i 參數。
您可以選取 CATENTRY 表格中的 PARTNUMBER 和 MEMBER_ID 直欄,利用 partNumber_i 參數和其它參數所指定或隱含的商店參考號碼用來判斷產品參考號碼。
此指令在執行時,會認為產品參考號碼是指定成 catEntryId_i 的值。
指令必須能夠從其它參數來判斷商店參考號碼。
結果是將新訂單項目加入訂單 111 中。
http://myhostname/webapp/wcs/stores/servlet/OrderCopy?fromOrderId_1=111
&toOrderId=111&partNumber_1=PART-I312200303&quantity_1=21
&memberId_1=1&storeId=31&URL=OrderItemDisplay
規則
- 呼叫 ResolveOrdersCmd and ResolveOrderItemsCmd 作業指令來解析 OrderId 和 OrderItemId 縮寫及確定哪些 Orders 和 OrderItems 是參數所指定的。
- 必要的話,在狀態為 P、未鎖定的 ORDERS 表格中建立目標訂單。
- 呼叫 CheckOrderCopyCmd 作業,
以驗證購物者是否有權複製 fromOrderId_i、orderInfoFrom 與 payInfoFrom 參數指定之訂單中的資訊,以及是否有權更新目標訂單中的資訊。
- 更新 ORDERS 表格中的訂單資訊。
- 呼叫 GetOrderPaymentInfoCmd 作業指令,
以讀取 payInfoFrom 參數所指定訂單中的付款資訊,並根據 pay_payment_name 參數中的指定進行更新,
再呼叫 SetOrderPaymentInfoCmd 處理作業,
將資訊寫到 toOrderId 參數指定的目標訂單中。
- 對於每個依 i 的升序順序來排列的 copyOrderItem_i 和 updateOderItem_i 參數,
藉由呼叫 OrderItemUpdate 指令,將指定的訂單項目資訊複製到目標訂單的 ORDERITEMS 表格中,或更新其中的訂單項目資訊。
- 如果狀態參數指出 I,則會備妥目標訂單以便顯示和進行處理,如同呼叫了 OrderPrepare 指令一般(計算數量並鎖定訂單),ORDERS 和 ORDERITEMS 表格會將目標訂單及其訂單項目改成 I。
- 呼叫 ExtOrderCopyCmd 作業指令。
- 依照 outOrderName 與 outShiptoName 參數的指定,將「名稱-值」配對新增到重新導向 URL 中。
異常狀況
- 如果拒絕 OrderCopy 指令存取訂單的話,CheckOrderCopyCmd 作業指令會以錯誤檢視畫面 OrderCopyErrorView 擲出 _ERR_ORDER_COPY 類型的 ECApplicationException。
這時會設定下列「名稱-值」配對:
- ERROR_CODE=601
- orderId=違規訂單 ID
- 如果目標訂單不在擱置狀態中,這時會以 OrderCopyErrorView 錯誤檢視來擲出 _ERR_ORDER_WRONG_STATUS 類型的 ECApplicationException。
另外,還會設定下列「名稱-值」配對:
- ERROR_CODE=603
- orderId=不當的訂單 ID
- 所有 OrderItemUpdate 異常狀況
