Filtrado de modalidades de envío a nivel de artículo de pedido

En algunas ocasiones, es posible que una modalidad de envío no sea aplicable a todos los productos. Si elige no asociar una modalidad de envío con un producto, e no se aplica ningún cargo de envío a dicho producto. Puede utilizar OrderItemShippingModeListDataBean para filtrar las modalidades de envío aplicables de un artículo de pedido o una matriz de artículos de pedido. Al utilizar el bean de datos, puede proporcionar cargos de envío estimados y ajustes de envío opcionales para cada modalidad de envío.

Por qué y cuándo se efectúa esta tarea

El filtrado de modalidades de envío aplicables se basa en los costos de envío estimados. Cuando una modalidad de envío específica produce un cargo de envío nulo para un artículo de pedido, esa modalidad de envío se ignora. El cargo de envío estimado para la modalidad de envío de cada artículo de pedido presupone que el cargo de envío puede determinarse por sí mismo. El cargo estimado también presupone que la modalidad de envío para cada artículo de pedido no se ve afectado por los demás artículos de pedido en el mismo pedido. Por ejemplo, si hay una configuración de cargo de envío de nivel de pedido, por ejemplo 10,00 $ para un pedido, el cargo de envío para cada artículo de pedido en ShippingMethod es 10,00 $. El cargo de envío para el pedido entero en la página Resumen del pedido es de 10,00 €. El bean de datos considera que cada artículo de pedido es un pedido autónomo y calcula los cargos de envío para los artículos del pedido.

Las instrucciones siguientes describen cómo personalizar el flujo de compra del escaparate. No describen cómo personalizar la creación de pedidos en HCL Commerce Accelerator.

Procedimiento

  1. Consulte el bean de datos com.ibm.commerce.fulfillment.beans.OrderShippingModeListDataBean. La tabla siguiente muestra los parámetros de entrada para este bean de datos.
    Nombre: Descripción:
    orderItemId

    Utilice este parámetro para establecer 1 artículo de pedido en el bean de datos.

    orderItemIds

    Utilice este parámetro para establecer una lista de artículos de pedido en el bean de datos.

    allowableShippingModeIds

    Si este parámetro se establece en true, el bean de datos filtra una lista de las modalidades de envío aplicables. Si este parámetro se establece en false, el bean de datos devuelve la intersección de las modalidades de envío que están permitidas para cada artículo de pedido. Si el parámetro allowableShippingModeIds no se ha establecido, OrderItemShippingModeListDataBean recupera las modalidades que admiten los contratos.

    calculateShippingCharge Si este parámetro se establece en true, el bean de datos filtra las modalidades de envío que no son aplicables y calcula el cargo para cada modalidad de envío. Si este parámetro se establece en false, el bean de datos devuelve la intersección de las modalidades de envío que están permitidas para cada artículo de pedido.
    CalculateShippingAdjustment Este parámetro entra en vigor cuando el parámetro calculateShippingCharge se establece en true. Si este parámetro se establece en true, el bean de datos añade el ajuste de envío del resultado de promoción de envío mientras se calcula el cargo de envío.
    resolveFulfillmentCenter Este parámetro entra en vigor cuando el parámetro calculateShippingCharge se establece en true. Cuando este parámetro se establece en true, el bean de datos resuelve los centros de despacho de pedidos de los artículos del pedido antes de calcular el cargo de envío. Este comportamiento se produce porque algunas configuraciones de cargo de envío están relacionadas con el centro de despacho de pedidos. Normalmente, puede establecer el valor de este distintivo en true puesto que la configuración de envío casi siempre se relaciona con el centro de despacho de pedidos.
    checkAppliedItems

    De forma predeterminada, este parámetro se establece en true. En releases anteriores, STENCALUSG.USAGEFLAGS debía establecerse en 3 para filtrar modalidades de envío.

  2. Cambie la función o el flujo de tienda para soportar varios métodos de envío:
    • Cambie la función de tienda con la herramienta de Gestión de tiendas del Management Center:
      1. Open the Store Management tool.
      2. En el filtro de la vista de explorador, pulse Tiendas.
      3. En la lista de tiendas disponibles, pulse el botón derecho del ratón en la tienda que incluye los métodos de envío que desea cambiar. Pulse Abrir.
      4. Pulse la pestaña Pasar por caja.
      5. Seleccione el recuadro de selección Varios envíos.
      6. Pulse Guardar.
  3. Personalice el archivo JSP para utilizar OrderItemShippingModeListDataBean para seleccionar la modalidad de envío.
    <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>
    Para la tienda Aurora, cambie el archivo ShippingMethodDetails.jsp. Personalice el archivo JSP para seleccionar la modalidad de envío tal como se muestra en el siguiente fragmento de código:
    <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>