OrderItemAdd 指令
這個指令會在要出貨的項目清單中新增項目或產品。

參數值
- http://host_name/path/
- (必要)WebSphere Commerce Server 和架構路徑的完整名稱。
- forUser
- 將代替其執行指令之使用者的登入 ID;只有具備處理訂單權限的人才可指定這個參數。
- forUserId
- 與 forUser 相同,但卻是 USERS 表格中之內部使用者 ID 所指的使用者。
- langId
- 設定或重設在階段作業期間的屬意語言;
有關商店的支援語言可在 STORELANG 表格中找到。
- URL
- (必要)當指令順利完成時所要呼叫的 URL。
- storeId
- (必要)商店的參考號碼;您無法從商場購買,因此,這是一個必要的項目。
- catEntryId_i
- (必要)要放在訂單中之項目的參考號碼。
- partNumber_i
- 若有指定,則會忽略 catEntryId 參數。 partNumber 與 memberId 用以決定 catentry_id
(藉由選取 CATENTRY 表格中的 PARTNUMBER 與 MEMBER_ID 直欄),
而此指令會將參考號碼視如 catEntryId 的值。
- memberId_i
- 擁有下單型錄之成員的識別碼。
- attrName_i
- 定義給項目的任何明確屬性。
- attrValue_i
- attrName 中的屬性值。
- quantity_i
- (必要)要新增到訂單中的項目數量。
- UOM_i
- quantity_i 的度量單位。這個值應該符合 QTYUNIT 表格中的主要鍵。
如果沒有指定的話,會使用 CATENTSHIP 表格中 CATENTRY_ID 與 OrderItem 相同的那一列的 QUANTITYMEASURE 直欄值,
且 quantity_i 參數值會乘以 CATENTSHIP 表格中相同列的 NOMINALQUANTITY 直欄。
- addressId_i
- 產品和項目之出貨地址的參考號碼。
- shipModeId_i
- 產品或項目要用的出貨模式的參考號碼。
- comment_i
- 建立或更新的訂購項目所要併入的備註。
- contractId_i
- 用來管理要新增項目之訂單的合約識別碼;每家商店都有預設合約,不過,您可以另行設定。
- field1_i
- 保留給商店使用的整數值。
- field2_i
- 保留給商店使用的一個文字值。這個參數最多可有 254 個字元。
- offerId_i
- 用來管理要新增項目之訂單的優惠識別碼。
- orderId
- 要新增項目之訂單的識別碼。
- outOrderName
- 指定要新增到重新導向 URL 中之已建或已更新訂單的參考號碼名稱。
當您串連指令時,請使用此參數與 outOrderItemName。
- outOrderItemName
- 要新增到重新導向 URL 中的已建立或已更新之訂單項目的參考號碼名稱。
- listId
- 喜好項目清單 ID。當您指定此參數時,OrderItemAdd 指令會建立一份內含清單中所有項目的新訂單。
- orderDesc
- 指定這個指令所建立之新訂單的訂單說明。
- remerge
- 在同一訂單中要合併於其他 OrderItems 且具有相同的 correlationGroup 屬性 (如果可能) 的 OrderItems 清單。
除非其 InventoryStatus 是 "NALC",或 allocate、backorder 或 reverse 參數指定了 OrderItems,否則,不會合併 OrderItems。
- merge
- 在同一訂單中要合併於其他 OrderItems (如果可能),且不論其 correlationGroup 屬性是什麼的 OrderItems 清單。
除非其 InventoryStatus 是 "NALC",或 allocate、backorder 或 reverse 參數指定了 OrderItems,否則,不會合併 OrderItems。
- check
- CheckInventory 作業指令應該檢查的 OrderItems 清單。
- allocate
- 應該由 AllocateExistingInventory 作業指令從現有庫存來配置的 OrderItems 清單。
- backorder
- AllocateExpectedInventory 作業指令應該補貨的 OrderItems 清單。
如果 allocate 和 backorder 參數指定了相同的 OrderItem,且能夠配置它,它就不會補貨。
- reverse
- 應該適當地呼叫 DeallocateExistingInventory 或 DeallocateExpectedInventory 作業指令來釋出其配置(也就是適當地從現有或預期庫存中解除配置)的 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
下列範例是新增 3 份參考號碼為 24 的產品到每份客戶現行擱置訂單中
(只限於有型錄項目 24 的商店下所建立的現行擱置訂單),
並指出它們要出貨到地址參考號碼 2 所對應的地址,之後,再呼叫 OrderItemDisplay 指令。
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?addressId=2
&URL=/webapp/wcs/stores/servlet/OrderItemDisplay&catEntryId=24&quantity=3
範例 2
下列範例會新增 10 份參考號碼為 2 的型錄項目到現行客戶的新訂單中。
orderId 參數會新增到重新導向 URL 中;
其值為所建訂單的參考號碼,且會呼叫 OrderItemDisplay 指令。
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?catEntryId=2&quantity=10
&orderId=**&outOrderName=orderId&URL=/webapp/wcs/stores/servlet/OrderItemDisplay
範例 3
下列範例會新增一個下列內容所構成的組合銷售:
312200001 項目
312200301 項目
含 312200201 屬性的 312200200 產品
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?catEntryId_1=312200001
&quantity_1=1&shipModeId_1=1&catEntryId_2=312200301&quantity_2=1
&shipModeId_2=1&catEntryId_3=312200200&attrName_3=312200201
&attrValue_3=Value+2200200+1&quantity_3=1&shipModeId_3=1&URL=OrderItemDisplay
範例 4
下列範例是新增兩項具有多個屬性的產品到購物車中,
其中第一個型錄項目有兩個屬性,第二個型錄項目有三個屬性:
http://myhostname/webapp/wcs/stores/servlet/OrderItemAdd?catEntryId_1=111&attrName_1=1
&attrValue_1=a&attrName_1=2&attrValue_1=b&quantity_1=1&catEntryId_2=222&attrName_2=21
&attrValue_2=aa&attrName_2=22&attrValue_2=bb&attrName_2=33&attrValue_2=cc&quantity_2=1
&URL=OrderItemDisplay
規則
- 指令呼叫設有輸入參數 orderId 的 ResolveOrdersCmd,以取得訂單清單。如果沒有指定 orderId 的話,預設值為現行擱置訂單。
- 指令就參數的每個列舉群組 'i' 來執行下列動作:
- 如果指定了 orderItemId_i 參數,就會忽略 partNumber_i 和 catEntryId_i 參數。指令會嘗試更新訂單項目。
- 如果指定了 partNumber_i 參數,就會忽略 catEntryId_i 參數。指令會搭配選用參數 memberId_i 使用 partNumber_i 來找出型錄項目。如果沒有指定 memberId_i,預設成員 ID 就是商店擁有者的成員 ID。
- 如果沒有指定 orderItemId_i 參數,但指定了 partNumber_i 或 catEntryId_i 參數,指令就會嘗試建立新的訂單項目,並將它插入所有已解析的訂單中。
如果已解析的訂單是空的,就會建立一份新的擱置訂單。
- 當建立新訂單時,成員 ID 就是指令環境定義中的現行使用者,貨幣也會取自指令環境定義中。
- 當建立新訂單項目時,必須用到 quantity_i 參數,且其值必須是正數。
訂單項目的成員 ID 取自訂單中的成員 ID。
storeId 也是必要的。
- 如果多次指定了相同的列舉群組 'i',則只有一個有效,其它的都會被忽略。
- 在指定 orderItemId_i 時更新現有的訂單項目,或在指定 partNumber_i 或 catEntryId_i 時建立新訂單項目,指令都會利用其餘參數來更新訂單項目。
- 如果沒有指定 addressId_i 參數,
對登錄使用者而言,
預設值為 ADDRESS 表格中的 addressId(其中 STATUS 直欄值為 P,
NICKNAME 直欄值為取自 USERREG 表格之 LOGONID 直欄中的使用者登入 ID)。如果 ADDRESS 表格中找不到地址,
則 ORDERITEMS 表格中之訂單項目的 address_id 為 NULL。
- 如果 quantity_i 是零,則會從訂單中移除訂單項目。
- 如果沒有指定 shipModeId_i 參數,預設值會取自 STOREDEF 表格。
- 它會呼叫 GetContractUnitPriceCmd 作業指令,利用指定的交易協定或合法的交易協定來取得產品或項目的合約價格,但產生的訂單項目或手動輸入價格的訂單項目(管理者予以置換)除外。
如果套用相容的付款方法,就會驗證所有要用的輸入交易協定。貨幣永遠和訂單的貨幣相同。
- 對於更新或插入了一或多個訂單項目的任何訂單而言,都會將訂單解除鎖定,且會以現行時間戳記來更新 lastUpdate 欄位。
- 在處理好所有列舉群組之後,指令會就所有修改或建立的訂單項目,來更新供貨和檢查庫存。
如果啟用 ATP 的話,它會呼叫 AllocateInventoryCmd。
否則,它會呼叫具有與舊版相容性的 ResolveFulfillmentCenterCmd。
- 呼叫 ExtendOrderItemProcessCmd 作業指令來執行額外的處理,以滿足任何獨特的需求。
- 設定 RedirectView 來重新導向至所指定的 URL。
異常狀況
- 視錯誤而定,而呼叫不同的異常作業。
- 如果有任何參數無效,指令會使用 _ERR_INVALID_INPUT 訊息和 RLInvalidInputErrorView 錯誤檢視來擲出 ECApplicationException。
- 如果指定了 partNumber,但無法在型錄中找到它,指令會使用 _ERR_PROD_NOT_EXISTING 訊息和 badPartNumberErrorView 錯誤檢視來擲出 ECApplicationException。
- 如果發現下列錯誤,也會擲出 ECApplicationException:
- 輸入交易協定無效,或沒有使用資格。
- 訂單中所用的交易協定套用不相容的付款方法。
- 無法擷取價格清單
- 如果沒有啟用 ATP 的話,ResolveFulfillmentCenterCmd 作業指令可能會擲出 ECApplicationException,且附帶有 _API_BAD_INV 訊息和 ResolveFulfillmentCenterErrorView 錯誤檢視。
