Filtering order item level shipping modes
Sometimes a shipping mode might not be applicable to all products. If you choose not to associate a shipping mode with a product, then no shipping charge is applied to that product. You can use the OrderItemShippingModeListDataBean to filter the applicable shipping modes of an order item or an array of order items. By using the data bean, you can provide estimated shipping charges and optional shipping adjustments for each shipping mode.
About this task
The following instructions describe how to customize the storefront shopping flow. They do not describe how to customize order creation in the HCL Commerce Accelerator.
Procedure
-
Refer to the com.ibm.commerce.fulfillment.beans.OrderShippingModeListDataBean data bean. The following
table shows the input parameters for this data bean.
Name Description orderItemId Use this parameter to set 1 order item to the data bean.
orderItemIds Use this parameter to set a list of order items to the data bean.
allowableShippingModeIds If this parameter is set to true, the data bean filters a list of the applicable shipping modes. If this parameter is set to false, the data bean returns the intersection of the shipping modes that are allowed for each order item. If the allowableShippingModeIds parameter is not set, the OrderItemShippingModeListDataBean retrieves the shipping modes that are supported by the contracts.
calculateShippingCharge If this parameter is set to true, the data bean filters the shipping modes that are not applicable and estimate the charge for each shipping mode. If this parameter is set to false, the data bean returns the intersection of the shipping modes that are allowed for each order item. CalculateShippingAdjustment This parameter takes effect when the calculateShippingCharge parameter is set to true. If this parameter is set to true, the data bean adds the shipping adjustment of the shipping promotion result while it calculates the shipping charge. resolveFulfillmentCenter This parameter takes effect when the calculateShippingCharge parameter is set to true. When this parameter is set to true, the data bean resolves the fulfillment centers of the items in the order before it calculates the shipping charge. This behavior occurs because some shipping charge configurations are related to the fulfillment center. Typically, you can set the value for this flag to true since shipping configuration almost always relates to the fulfillment center. checkAppliedItems By default, this parameter is set to true. In previous releases, STENCALUSG.USAGEFLAGS must be set to 3 to filter shipping modes.
-
Change the store flow or function to support multiple shipping methods:
- Change the store function with the Store Management tool in Management Center:
- Open the Store Management tool.
- In the explorer view filter, click Stores.
- From the list of available stores, right-click the store that includes the shipping methods that you want to change. Click Open.
- Click the Checkout tab.
- Select the Multiple shipments check box.
- Click Save.
- Change the store function with the Store Management tool in Management Center:
-
Customize the JSP file to use the OrderItemShippingModeListDataBean to select the shipping
mode.
<c:remove var="orderItemShippingModeList"/> <wcbase:useBean id="orderItemShippingModeList" classname="com.ibm.commerce.fulfillment.beans.OrderItemShippingModeListDataBean"> <c:set target="${orderItemShippingModeList}" property="orderItemId" value="${orderItem}"/> <c:set target="${orderItemShippingModeList}" property="resolveFulfillmentCenter" value="true"/> <c:set target="${orderItemShippingModeList}" property="calculateShippingCharge" value="true"/> <c:set target="${orderItemShippingModeList}" property="calculateShippingAdjustment" value="true"/> </wcbase:useBean> </pre> <table> <tr> <th><pre>Shipping Mode ID:</pre></th> <th><pre>Shipping Mode Description:</pre></th> <th><pre>Shipping Charge:</th> </tr> <c:forEach items="${orderItemShippingModeList.shippingModes}" var="shippingMode" varStatus="status"> <tr> <td><c:out value="${shippingMode.shippingModeId}"/></td> <td><c:out value="${shippingMode.description.description}"/></td> <td><c:out value="${orderItemShippingModeList.shippingCharges[status.index]}"/></td> </tr> </c:forEach> </table>
For the Aurora store, change the ShippingMethodDetails.jsp file. Customize the JSP file for selecting shipping mode as shown in the following code snippet:<select class="drop_down_shipping" name="MS_ShippingMode_<c:out value='${orderItemId}'/>" id="MS_ShippingMode_<c:out value='${orderItemId}'/>" onchange="JavaScript:setCurrentId(this.id); CheckoutHelperJS.updateShipModeForThisItem(this,'<c:out value="${orderItemId}"/>'); TealeafWCJS.rebind(this.id);"> <c:remove var="orderItemShippingModeList"/> <wcbase:useBean id="orderItemShippingModeList" classname="com.ibm.commerce.fulfillment.beans.OrderItemShippingModeListDataBean"> <c:set target="${orderItemShippingModeList}" property="orderItemId" value="${orderItemId}"/> <c:set target="${orderItemShippingModeList}" property="resolveFulfillmentCenter" value="true"/> <c:set target="${orderItemShippingModeList}" property="calculateShippingCharge" value="true"/> <c:set target="${orderItemShippingModeList}" property="calculateShippingAdjustment" value="true"/> </wcbase:useBean> <c:forEach var="shippingMode" items="${orderItemShippingModeList.shippingModes}"> <c:if test="${shippingMode.code != 'PickupInStore'}"> <%-- Show all the shipping options available except for pickUp in Store --%> <%-- This block is to select the shipMode Id in the drop down box. If this shipMode is selected then set selected = true --%> <option shipModeCode="${shippingMode.code}" <c:if test="${(shippingMode.shippingModeId eq selectedShipModeId)}"> <c:set var="selectedShippingMode" value="${shippingMode.code}"/>selected="selected"</c:if> value="<c:out value='${shippingMode.shippingModeId}'/>"> <c:choose> <c:when test="${!empty shippingMode.description.description}"> <c:out value="${shippingMode.description.description}"/> </c:when> <c:otherwise> <c:out value="${shippingMode.code}"/> </c:otherwise> </c:choose> </option> </c:if> </c:forEach> </select>