OrderItemUpdate 指令
這個指令能執行 OrderItemAdd 指令所能執行的所有功能(也就是新增產品和項目到一或多份訂單及訂單清單中)。
它也可以更新現有訂單中的 OrderItems。

參數值
- http://host_name/path/
- (必要)WebSphere Commerce Server 和架構路徑的完整名稱。
- forUser
- 將代替其執行指令之使用者的登入 ID;只有具備處理訂單權限的人才可指定這個參數。
- forUserId
- 與 forUser 相同,但卻是 USERS 表格中之內部使用者 ID 所指的使用者。
- langId
- 設定或重設在階段作業期間的屬意語言;
有關商店的支援語言可在 STORELANG 表格中找到。
- URL
- (必要)當指令順利完成時所要呼叫的 URL。
- orderItemId_i
- 要更新的 OrderItem 的識別碼。如果有指定,則會忽略 catEntryId_i
和 partNumber_i 參數(相同的 i 值)。
- storeId
- 商店識別碼,當您要在訂單中新增產品或項目時,這才是必要的。
必須要有 storeId,以便檢查該商店中是否具有該項目。
當您指定 storeId 一次之後,該 ID 就會快取供未來使用。
- catEntryId_i
- 要用來建立新 OrderItem 的型錄項目識別碼。
- partNumber_i
- 如果有指定,則會忽略 catEntryId_i 參數。有指定 partNumber_i
和 memberId_i 兩個參數時,這兩個參數會用來決定型錄項目,方法是選取
CATENTRY 表格中的 PARTNUMBER 和 MEMBER_ID 直欄。
這個指令的規則會如同指定該型錄項目的識別碼作為 catEntryId_i 的值。
- memberId_i
- 擁有下單型錄之成員的識別碼
- attrName_i
- 定義給項目的任何明確屬性。
- attrValue_i
- attrName 中的屬性值。
- quantity_i
- 要新增到訂單中的項目數量。當有指定 catEntryId_i 或 partNumber_id
時,也要指定這個參數。有指定 OrderItemId_i 時,這是選用的。
- UOM_i
- quantity_i 的度量單位。這個值應該符合 QTYUNIT 表格中的主要鍵。
如果沒有指定的話,會使用 CATENTSHIP 表格中 CATENTRY_ID 與 OrderItem 相同的那一列的 QUANTITYMEASURE 直欄值,
且 quantity_i 參數值會乘以 CATENTSHIP 表格中相同列的 NOMINALQUANTITY 直欄。
- addressId_i
- 產品和項目的出貨地址識別碼。
- shipModeId_i
- 產品或項目要用的出貨模式的參考號碼。
- comment_i
- 建立或更新的訂單項目所要併入的備註。
- contractId_i
- 與訂單有關之合約的 ID。
- field1_i
- 保留給商店使用的整數值。
- field2_i
- 保留給商店使用的一個文字值。這個參數最多可有 254 個字元。
- offerId_i
- 與訂單有關之報價的 ID。
- orderId
- 這是一個由內部產生用以指出零或多個所要更新之訂單的識別碼;可使用訂單參考號碼或下列特殊縮寫之一:
"**"、"."、"*"、".t"、"*t"。
請參閱訂單縮寫,以取得這些縮寫的說明。
如果沒有特定商店的擱置訂單,就會建立一份新的擱置訂單。
如果指定了多份擱置的訂單,就會建立或更新每份指定訂單的訂單項目登錄。
- outOrderName
- 指出將加到重新導向 URL 中的「名稱-值」配對名稱。
所新增之「名稱-值」配對的值為所建立或更新之訂單的參考號碼。
- outOrderItemName
- 指出將加到重新導向 URL 中的「名稱-值」配對名稱。
所新增之「名稱-值」配對的值為所建立或更新之訂單項目的參考號碼。
- listId
- 喜好項目清單 ID。當您指定這個參數時,OrderItemUpdate
指令會建立一張新訂單,其中包含清單中的所有項目。
您可以使用下列其中一個特殊縮寫:"." 和 "*"。
請參閱型錄縮寫,以取得說明。
- orderDesc
- 指定此指令所建新訂單的相關說明
- remerge
- 在同一訂單中要合併於其他 OrderItems 且具有相同的 correlationGroup 屬性 (如果可能) 的 OrderItems 清單。
除非其 InventoryStatus 是 "NALC",或 allocate、backorder 或 reverse 參數指定了 OrderItems,否則,不會合併 OrderItems。
- merge
- 在同一訂單中要合併於其他 OrderItems (如果可能),且不論其 correlationGroup 屬性是什麼的 OrderItems 清單。
- check
- CheckInventoryAvailability 作業指令應該檢查的 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
下列範例會建立一份參考號碼為 18 且有 monogram CJK 屬性之型錄項目的出貨記錄。
這個出貨記錄會新增至客戶的目前擱置的訂單中。
指令完成時,會呼叫 OrderItemDisplay 指令。
http://myhostname/webapp/wcs/stores/servlet/OrderItemUpdate?addressId=2
&catEntryId=18&attrName=monogram&attrValue=CJK&quantity=1&shipModeId=4
&URL=OrderItemDisplay
範例 2
下列範例會新增 10 個型錄項目號碼 2 到購物者的所有現行擱置訂單內。
指令完成時,會呼叫 OrderItemDisplay 指令。
http://myhostname/webapp/wcs/stores/servlet/OrderItemUpdate?catEntryId=2
&quantity=10&orderId=*&outOrderName=orderId&URL=/webapp/wcs/stores/servlet/OrderItemDisplay
範例 3
下列範例會更新三個 OrderItem ID。
http://myhostname/webapp/wcs/stores/servlet/OrderItemUpdate?URL=OrderItemDisplay
&quantity_1=2&quantity_2=7&orderItemId_1=117&orderItemId_2=118
&orderItemId_3=113&quantity_3=2
規則
- 指令呼叫設有輸入參數 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 作業指令,依據指定的交易協定(合約)
或訂單成員適用的所有交易協定(合約),來取得產品或項目的合約價格。
但所產生的訂單項目或其價格是手動輸入者除外(由管理者改寫;請參考
ODERITEMS 表格的 PREPAREFLAGS 直欄,取得明細)。
檢查要使用的所有輸入交易協定(合約),以驗證他們是否都套用相容的付款方法。
貨幣永遠和訂單的貨幣相同。
- 對於更新或插入了一或多個訂單項目的任何訂單而言,都會將訂單解除鎖定,且會以現行時間戳記來更新 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 錯誤檢視。