Migrating the IBM Websphere Commerce Version 7 Feature Pack 7 Aurora store web project

Complete this task to migrate your IBM Websphere Commerce Version 7 Feature Pack 7 Aurora store to HCL Commerce Version 9.1. After migration, your store will remain a local store.

The store migration process involves exporting the following assets as archive files, and then importing the archive files:
  • Custom static store assets
  • Custom Java code
  • Custom JSP files
Stores that are migrated from IBM Websphere Commerce Version 7 or IBM Websphere Commerce Version 8 to HCL Commerce Version 9.1, are deployed to the Transaction server, where they serve live traffic. Stores that are created onHCL Commerce Version 9.1 follow the new programming model and are deployed to a separate Store server. For more information about migrating or creating a store on HCL Commerce Version 9.1, see:

Procedure

  1. Export the Stores dynamic web project from your Feature Pack 7 development environment workspace.
    1. Open your Feature Pack 7 development environment workspace, then open the J2EE perspective.
    2. From the Enterprise Explorer view, right-click the Stores project, then click Export > Export....
      The Export window appears.
    3. Expand the General folder, then click Archive File > Next.
    4. Under the Stores directory, clear the Stores check box, and select the following subdirectories.
      • WebContent
      • src
    5. Ensure the Create only selected directories option is selected.
    6. Click Browse and define a path where the archive file is to be exported.
      For example, c:\stores.zip.
    7. Under Options, ensure that the following export option is defined.
      • Create only selected directories
    8. Click Finish.
      A Stores.zip file is created and is ready to be imported into your HCL Commerce Version 9 development environment.
      Important: Create a backup of this archive, as you will need some of the configuration files in the Struts 2 migration later on.
    9. Copy the exported Stores.zip file to your HCL Commerce Version 9 development environment.
  2. Import your custom project.
    1. Open your HCL Commerce Version 9 development environment workspace, and then open the Java EE perspective.
    2. From the Enterprise Explorer view, right-click the Stores project, then click Import > Import....
      The Import window appears.
    3. Expand the General folder, then click Archive File > Next.
    4. Click Browse, then select the Stores.zip file that you exported from your Feature Pack 7 development environment.
    5. Click the Overwrite existing resources without warning check box.
    6. Click Finish.
  3. Manually copy all the directories and files in the following path from your Feature Pack 7 development environment to the same path on HCL Commerce Version 9.1 development environment:

    workspace_dir/WC/properties/tools/stores/store_dir/

    Where store_dir is the directory name for your store.

  4. Review the following files to ensure that your database configuration is correct. Edit each file if necessary.
    • WCDE_installdir/workspace/WC/META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/resources.xml
    • Liberty_installdir/usr/servers/searchServer/configDropins/overrides/datasources.xml
    • WCDE_installdir/workspace/WC/META-INF/ibmconfig/cells/defaultCell/security.xml
  5. Remove the nonexistent filter in your web.xml file.
    1. Open the following file for editing.
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/web.xml
    2. Remove the following block of code.
      <filter>
          </icon>
          <filter-name>LikeMindsFilter</filter-name>
          <filter-class>com.ibm.commerce.likeminds.filter.LikeMindsFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>LikeMindsFilter</filter-name>
          <servlet-name>Stores Request Servlet</servlet-name>
      </filter-mapping>
      
    3. Save and close the file.
  6. Remove the remote store configuration from your foundation wc-component.xml file.
    1. Open the following file for editing.
      • workspace_dir/WC/xml/config/com.ibm.commerce.foundation/wc-component.xml
    2. Locate and remove the configgrouping named RemoteStoreConfiguration.
      For example, remove the following code block:
      <_config:configgrouping name="RemoteStoreConfiguration">
                                  <!-- value to remote store web host name -->
                                  <_config:property name="wc.store.remote.webHostName" value="store"/>
                                  <!-- value to remote store web host HTTP port number -->
                                  <_config:property name="wc.store.remote.webNonSSLPort" value="8080"/>
                                  <!-- value to remote store web host HTTPS port number -->
                                  <_config:property name="wc.store.remote.webSSLPort" value="8443"/>
                                  <!-- value to remote store context root -->
                                  <_config:property name="wc.store.remote.webContextPath" value="/shop"/>
                                  <!-- value to remote store preview context root -->
                                  <_config:property name="wc.store.remote.previewContextPath" value="/webapp/remote/preview/servlet"/>
                                  <!-- value to kafka servers connection string -->
                                  <_config:property name="wc.store.remote.kafka" value=""/>
                                  <!-- value to kafka servers topic prefix -->
                                  <_config:property name="wc.store.remote.kafka.topicPrefix" value="sampleprefix"/>
                                  <!-- value to remote store web alias -->
                                  <_config:property name="wc.store.remote.webAlias" value="/wcsstore"/>
                                  <!-- value to remote store app host name (used for invoking email JSPs in remote store) -->
                                  <_config:property name="wc.store.remote.appHostName" value="localhost"/>
                                  <!-- value to remote store app host HTTPS port number (used for invoking email JSPs in remote store) -->
                                  <_config:property name="wc.store.remote.appSSLPort" value="8443"/>
                                  </_config:configgrouping>
    3. Save and close the file.
      Warning: This change will need to be done again after upgrading the development environment to a higher fix pack, because that procedure will overwrite the wc-component.xml file. The newly changed file will then need to be deployed to the upgraded production environment.
  7. Update your struts-config.xml file.

    In HCL Commerce Version 9.1, URLs based on the HTTP protocol are no longer supported, which might cause some users to encounter problems where category pages fail to load after they log in to your store.

    1. Open the /Stores/WebContent/WEB-INF/struts-config.xml file for editing.
    2. Locate the following property.
      <set-property property="https" value="0:0"/>
    3. Update the value from "0:0" to "0:1".
      Your updated code appears as follows.
      <set-property property="https" value="0:1"/>
    4. Save and close the file.
  8. In HCL Commerce Version 9.1, all services use HTTPS. The stores project that you imported into HCL Commerce Version 9.1 might still use HTTP values. Review the following files, and change any value="http: code to value="https:.
    Note: Skip any files in the list that do not exist in your environment.
    • /Stores/WebContent/SitemapIndex.jsp
    • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Common/EnvironmentSetup.jspf
    • /Stores/WebContent/AuroraB2BStorefrontAssetStore/EmailTemplates/Common/eMarketingSpotDisplay.jsp
    • /Stores/WebContent/AuroraStorefrontAssetStore/Common/EnvironmentSetup.jspf
    • /Stores/WebContent/AuroraStorefrontAssetStore/EmailTemplates/Common/eMarketingSpotDisplay.jsp
    • /Stores/WebContent/Widgets_701/Common/EnvironmentSetup.jspf
    • /Stores/WebContent/Widgets_801/Common/EnvironmentSetup.jspf
  9. Correct the migrated password reset e-mail template (PasswordResetNotify.jsp).
    1. Open the following files with a text editor.
      • /WebContent/AuroraStorefrontAssetStore/EmailTemplates/User/PasswordResetNotify.jsp
      • /WebContent/AuroraB2BStorefrontAssetStore/EmailTemplates/User/PasswordResetNotify.jsp
    2. Remove all instances of the following tag: <%out.flush()%>.
    3. Save and close the files.
    Note: Failure to correct this template results in no password reset email being generated and sent. Instead, the following error is observed in logs.
    javax.persistence.TransactionRequiredException: No active transaction for PuId=ts#Enablement-BaseComponentsData.jar#WC
  10. Convert number values to string values by using the fn:trim () function within your <c:if test> JSP tags.

    Base classes within the JSP tag library differ between Feature Pack 7 and HCL Commerce Version 9.1. If your Feature Pack 7 JSP files use the <c:if test> tag to evaluate expressions, you must update those JSP files in HCL Commerce Version 9.1 to use the fn:trim () function. In some of your JSP files, you might compare a string to a number. The underlying HCL Commerce Version 9.1 logic tries to convert the string to a number before comparing them. If there are non-numeric characters in the string, a conversion error is reported. The fn:trim () function forcibly converts strings to numbers before they are compared by HCL Commerce Version 9.1 logic.

    The following code example shows <c:if test> tag without the fn:trim () function within the /Stores/WebContent/AuroraStorefrontAssetStore/Container/SubCategoryPageContainerWithTabs.jsp file:
    <c:if test="${childWidget.slot.internalSlotId == slotNumber && !foundCurrentSlot}">
    The following code example shows <c:if test> tag with the fn:trim () function added within the /Stores/WebContent/AuroraStorefrontAssetStore/Container/SubCategoryPageContainerWithTabs.jsp file:
    <c:if test="${childWidget.slot.internalSlotId == fn:trim(slotNumber) && !foundCurrentSlot}">
    Notice how the fn:trim () function is applied to slotNumber value.
    1. From your HCL Commerce Version 9 development environment, open the following Search result page JSP files.
      • /Stores/WebContent/Aurora/Container/SubCategoryPageContainerWithTabs.jsp
      • /Stores/WebContent/AuroraStorefrontAssetStore/Container/SubCategoryPageContainerWithTabs.jsp
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Container/SubCategoryPageContainerWithTabs.jsp
    2. Locate the following line of code in each file.
      <c:if test="${childWidget.slot.internalSlotId == slotNumber && !foundCurrentSlot}">
    3. Update the lines of code by adding the fn:trim () function to the slotNumber values, as illustrated in the following code example.
      <c:if test="${childWidget.slot.internalSlotId == fn:trim(slotNumber) && !foundCurrentSlot}">
    4. Save and close the files.
    5. Open the following Product detail page JSP files.
      • /Stores/WebContent/Aurora/Container/ProductPageContainer.jsp
      • /Stores/WebContent/Aurora/Container/ProductPageContainerFullWidth.jsp
      • /Stores/WebContent/AuroraStorefrontAssetStore/Container/ProductPageContainer.jsp
      • /Stores/WebContent/AuroraStorefrontAssetStore/Container/ProductPageContainerFullWidth.jsp
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Container/ProductPageContainer.jsp
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Container/ProductPageContainerFullWidth.jsp
    6. Locate the following line of code in each file.
      <c:if test="${childWidget.slot.internalSlotId == slotNumber && !foundCurrentSlot}">
    7. Update the lines of code by adding the fn:trim () function to the slotNumber values, as illustrated in the following code example.
      <c:if test="${childWidget.slot.internalSlotId == fn:trim(slotNumber) && !foundCurrentSlot}">
    8. Save and close the files.
    9. Open the following Register page JSP file.
      • /Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.AddressForm/AddressForm_UI.jspf
      • /Stores/WebContent/Widgets_801/com.ibm.commerce.store.widgets.AddressForm/AddressForm_UI.jspf
      • /Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsForm_UI.jspf
      • /Stores/WebContent/Widgets_801/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsForm_UI.jspf
      • /Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsDisplay_Data.jspf
      • /Stores/WebContent/Widgets_801/com.ibm.commerce.store.widgets.OrganizationUserInfo/UserInfoUI/UserDetailsDisplay_Data.jspf
    10. Locate the following line of code.
      <c:if test="${language.localeName == preferredLanguage || language.languageId == preferredLanguage }">
    11. Update the line of code by adding the fn:trim () function to the slotNumber value, as illustrated in the following code example.
      <c:if test="${language.localeName == fn:trim(preferredLanguage) || language.languageId == preferredLanguage }">
    12. Save and close the file.
  11. Update the definitions that are associated with EJB in your GlobalLoginOrganizationAndContract_UI.jspf file.
    1. Open the following file for editing.
      • /Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.GlobalLogin/GlobalLoginOrganizationAndContract_UI.jspf
    2. Replace all instances of organizationIdInEJBType with organizationId.
    3. Save and close the file.
  12. Feature Pack 7 and HCL Commerce Version 9.1 differ in the way they generate and analyze SKU lists in JSON data. To account for this difference, you must update specific JavaServer Page (JSP) and JavaServer Page Fragment (JSPF) files.
    1. Open the following files for editing.
      • /Stores/WebContent/Aurora/ShoppingArea/CatalogSection/CatalogEntrySubsection/ProductDisplay.jsp
      • /Stores/WebContent/AuroraStorefrontAssetStore/ShoppingArea/CatalogSection/CatalogEntrySubsection/ProductDisplay.jsp
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/ShoppingArea/CatalogSection/CatalogEntrySubsection/ProductDisplay.jsp
      • /Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.PDP_DefiningAttributes/DefiningAttributes_Data.jspf
      • /Stores/WebContent/Aurora/Widgets/CompareProduct/CompareProduct_UI.jspf
      • /Stores/WebContent/AuroraStorefrontAssetStore/Widgets/CompareProduct/CompareProduct_UI.jspf
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Widgets/CompareProduct/CompareProduct_UI.jspf
    2. In each file, locate the following lines.
      <c:set var="replaceStr" value='\\\\"'/>
      <c:set var="replaceStr01" value="\\\\'"/>
    3. Update the value from value='\\\\"' to value='\\"'.
      The following example shows how the code looks after your update.
      <c:set var="replaceStr" value='\\"'/>
      <c:set var="replaceStr01" value="\\'"/>
    4. Save and close the files.
  13. Update your RegistrationUpdateCommonPage.jsp file to resolve a potential HCL Commerce Version 9.1 parsing error that occurs when the Personal information page loads.
    1. Open the following files for editing.
      • /Stores/WebContent/Aurora/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
      • /Stores/WebContent/AuroraStorefrontAssetStore/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/UserArea/AccountSection/RegistrationSubsection/RegistrationUpdateCommonPage.jsp
    2. Around line 40, add the following block of code to the variable section.
      <c:set var="personSession" value="${requestScope.personSession}"/>
      <c:if test="${empty personSession || personSession==null}">
          <wcf:rest var="personSession" url="store/{storeId}/person/{personId}" scope="request">
              <wcf:var name="storeId" value="${WCParam.storeId}" encode="true"/>
              <wcf:var name="personId" value="${userId}" encode="true"/>
          </wcf:rest>
      </c:if>  
      
    3. Around line 120, locate the following line of code.
      <fmt:param><fmt:formatDate type="both" dateStyle="long" value="${CommandContext.user.lastSessionInEJBType}"/></fmt:param
    4. Update the line of code with the following.
      <fmt:param><c:out value="${personSession.lastSession}"/></fmt:param>
    5. Save and close the files.
  14. Update specific JavaScript (JS) and Cascading Style Sheet (CSS) files to account for errors when a user cancels recurring and subscriptions orders.
    1. Open the following files for editing.
      • /Stores/WebContent/Aurora/javascript/UserArea/MyAccountDisplay.js
      • /Stores/WebContent/AuroraStorefrontAssetStore/javascript/UserArea/MyAccountDisplay.js
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/javascript/UserArea/MyAccountDisplay.js
    2. Around line 719, add the following line of code.
      params["orderId"] = "null";
      The following example shows how the code looks after your update.
      /*For Handling multiple clicks. */
      if(!submitRequest()){
          return;
      }
      cursor_wait();
      var params = [];
      params["orderId"] = "null";
      params["subscriptionId"] = subscriptionId;
      params["URL"] = "";
      params["storeId"] = MyAccountServicesDeclarationJS.storeId;
      params["catalogId"] = MyAccountServicesDeclarationJS.catalogId;
      params["langId"] = MyAccountServicesDeclarationJS.langId;
      wc.service.invoke("AjaxCancelSubscription", params);
    3. Save and close the files.
    4. Open the following files for editing.
      • /Stores/WebContent/Aurora/css/legacy1_1.css
      • /Stores/WebContent/Aurora/css/legacy1_1_rtl.css
      • /Stores/WebContent/AuroraStorefrontAssetStore/css/legacy1_1.css
      • /Stores/WebContent/AuroraStorefrontAssetStore/css/legacy1_1_rtl.css
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/css/legacy1_1.css
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/css/legacy1_1_rtl.css
    5. Around line 3750, locate the following line of code.
      background-image: url('../images/colors/color1/popup_center_tile_sm.png');
    6. Change the code to the following.
      background-image: url('../images/colors/color1/popup_center_tile_mini.png');
    7. Save and close the files.
  15. Update specific JavaScript (JS), Java Server Page (JSP), and JavaScript Page Fragment (JSPF) files to account for errors that can be encountered when using the Store Preview function, or on the storefront.
    1. Correct an issue where associated merchandising product descriptions are not displayed appropriately on the storefront.
      1. Open the following file for editing.
        • /Stores/WebContent/Widgets_701/Common/ProductDescription/ProductDescription_Data.jspf
      2. Locate the following section of code.
        <c:choose> <c:when test="${!empty param.hasAssociations}"> <c:set var="hasAssociations" value="${param.hasAssociations}"/> </c:when> </c:choose>
      3. Add the following lines before and after this section.
        <c:set var="hasAssociations" value="false"/>
        <c:choose>
        <c:when test="${!empty param.hasAssociations}">
        <c:set var="hasAssociations" value="${param.hasAssociations}"/>
        </c:when>
        </c:choose>
        <c:if test="${hasAssociations == 'true'}">
        <c:remove var="catalogEntryDetails" />
        </c:if>
      4. Save and close the file.
    2. Correct a site malfunction that is encountered after a promotion is applied when using the Store Preview function.
      1. Open the following file for editing.
        • /Stores/WebContent/AuroraStorefrontAssetStore/javascript/CommonControllersDeclaration.js
      2. Locate the following line of code.
        dojo.eval(dojo.byId('addToRequisitionListScript_' + orderItem.value).innerHTML);
      3. Wrap the line within the following condition statement.
        if(dojo.byId('addToRequisitionListScript_' + orderItem.value) != null)
        { dojo.eval(dojo.byId('addToRequisitionListScript_' + orderItem.value).innerHTML); }
      4. Locate the following line of code.
        dojo.eval('addReqListsJS' + orderItem.value + '.setCatEntryId("' + dojo.byId('catalogId_' + (orderItem.id.substring(orderItem.id.indexOf('_') + 1))).value + '");');
      5. Wrap the line within the following condition statement.
        if(dojo.byId('addReqListsJS_' + orderItem.value) != null)
        { dojo.eval('addReqListsJS' + orderItem.value + '.setCatEntryId("' + dojo.byId('catalogId_' + (orderItem.id.substring(orderItem.id.indexOf('_') + 1))).value + '");'); }
      6. Save and close the file.
    3. Correct a cart merge edge case that can result in a blank page after logging in and checking out a cart.
      1. Open the following files for editing.
        • /Stores/WebContent/AuroraStorefrontAssetStore/Snippets/Order/Cart/CheckoutLogon.jsp
        • /Stores/WebContent/AuroraStorefrontAssetStore/javascript/CheckoutArea/ShipmodeSelectionExt.js
        • In CheckoutLogon.jsp, locate the following line of code.
          <form method="post" name="AjaxLogon" id="AjaxLogon" action="Logon">
        • Add the following line below the line.
          <form method="post" name="AjaxLogon" id="AjaxLogon" action="Logon">
          <input type="hidden" name="mergeCart" value="true" id="WC_RememberMeLogonForm_FormInput_mergeCart_In_AjaxLogon_1"/>
        • In ShipmodeSelectionExt.js, locate the following line of code in the guestShopperLogon method.
          document.AjaxLogon.URL.value = completeOrderMoveURL;
        • Replace the line with the following.
          document.AjaxLogon.URL.value = "&URL="+afterOrderCalculateURL;
        • Save and close the files.
  16. Optional: Correct default error message properties files to ensure that improper error messages are not displayed on the storefront.
    This is only required if your site does not use custom error messages.
    1. Open the following files, and any additional languages that your store uses, for editing.
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/classes/AuroraStorefrontAssetStore/storeErrorMessages.properties
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/classes/AuroraStorefrontAssetStore/storeErrorMessages_en_US.properties
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/classes/AuroraB2BStorefrontAssetStore/storeErrorMessages.properties
      • WCDE_installdir/workspace/Stores/WebContent/WEB-INF/classes/AuroraB2BStorefrontAssetStore/storeErrorMessages_en_US.properties
    2. Remove the following message from the B2B error message property files.
      _ERR_CMD_INVALID_PARAM = An error occurred during registration. Please try again later or contact the store for assistance.
    3. Locate and replace incorrect messages.
      1. Locate the following two messages in all files.
        _ERR_CMD_INVALID_PARAM.5030 = Type a name in the Nickname field.
        _ERR_NICKNAME_ALREDY_EXIST.5040 = The nickname you entered already exists. Type another name in the Nickname field and try again.
      2. Replace the messages to swap out the references to nickname in the messages with recipient.
        _ERR_CMD_INVALID_PARAM.5030 = Type a name in the Recipient field.
        _ERR_NICKNAME_ALREDY_EXIST.5040 = The recipient you entered already exists. Type another name in the Recipient field and try again.
    4. Save and close all files.
  17. Update your JavaServer Page fragment (JSPF) files so users can click the subscribe link on your storefront.
    1. Open the following files for editing.
      • /Stores/WebContent/Aurora/Common/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/Common/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
      • /Stores/WebContent/AuroraStorefrontAssetStore/Common/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
      • /Stores/WebContent/Widgets_701/Common/JSTLEnvironmentSetupExtForRemoteWidgets.jspf
    2. In each of the files, locate and remove the following code.
      <c:when test="${!empty restNonSSLPort}">
          <c:set var="restURLPort" value="${restNonSSLPort}" scope="request"/>
          <c:set var="restURLScheme" value="http" scope="request"/>
      </c:when>
      
    3. Save and close the files.
  18. Update JavaScript (JS) files to resolve an email notification issue for wishlist creation.
    1. Open the following files for editing.
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/javascript/UserArea/MultipleWishLists.js
      • /Stores_v7/WebContent/AuroraStorefrontAssetStore/javascript/UserArea/MultipleWishLists.js
    2. In each file, locate the following lines.
      // maps email input to param required by AjaxGiftListAnnouncement
      form.recipientEmail.value = form.recipient.value;
      form.senderName.value = form.sender_name.value;
    1. Add the following line into this section of each file.
      // maps email input to param required by AjaxGiftListAnnouncement
      form.recipientEmail.value = form.recipient.value;
      form.recipient.value = "";
      form.senderName.value = form.sender_name.value;
    2. Save and close both files.
  19. Update your payments and billing JavaServer Page fragment (JSPF) files to handle the Apple Pay payment method.
    1. Open the following files for editing.
      • /Stores/WebContent/Aurora/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
      • /Stores/WebContent/AuroraStorefrontAssetStore/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
      • /Stores/WebContent/AuroraB2BStorefrontAssetStore/ShoppingArea/CheckoutSection/CheckoutPaymentsAndBillingAddress.jspf
    2. Around line 500, locate the following code.
      <c:if test="${currentPaymentMethodName != 'PayInStore' && currentPaymentMethodName 
      != 'CompatiblePayment' && (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName 
      eq 'SimplePunchout' and punchoutPaymentAllowed))}">
    3. Update the code by adding currentPaymentMethodName != 'ApplePay' method.
      The following example shows how the code looks after your update.
      <c:if test="${currentPaymentMethodName != 'ApplePay' && currentPaymentMethodName 
      != 'PayInStore' && currentPaymentMethodName != 'CompatiblePayment' && 
      (currentPaymentMethodName ne 'SimplePunchout' or (currentPaymentMethodName eq 'SimplePunchout' 
      and punchoutPaymentAllowed))}">
    4. Save and close the files.
  20. Update your STORECONF table with your extended sites store IDs. Repeat this process on your development and production environment databases.
    1. Open a command prompt to your HCL Commerce Version 9.1 database.
    2. Run the following SQL select query to retrieve the store IDs for your specific type of store.
      select store_id from store where directory in ('store_name');
      Where
      store_name
      The base name of your store, for example, AuroraESite.
    3. For each extended site store ID retrieved, insert a corresponding record into your STORECONF table by running the following insert query.
      Insert into storeconf values(STOREENT_ID, 'wc.store.isRemote','0',0);
      Where:
      STOREENT_ID
      The ID of the store that you retrieved from the previous SQL command.
  21. If you are migrating to HCL Commerce Version 9.1, you must upgrade your Struts configuration. See Migrating customized IBM Websphere Commerce Version 7 Feature Pack 6 web applications to Struts 2.
  22. Update your ListTable_UI.jspf file to work with the Requisition List Upload function.
    1. Open the following file for editing.
      • /Stores/WebContent/Widgets_701/Common/MyAccountList/ListTable_UI.jspf
    2. Locate the following code.
      <input type="file" id="UpLoadedFile" name="UpLoadedFile" class="button_text"
    3. Update the Update name="UpLoadedFile" to name="filename".
    4. Save and close the file.
  23. Remove the EJB from the store preview header.
    1. Open the \Stores\WebContent\tools\preview\StorePreviewerHeader.jsp file for editing.
    2. Locate the following snippet.
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceIdInEJBType().toString());
    3. Replace the snippet with the following.
      pageContext.setAttribute("workspaceId", abWorkspace.getWorkspaceId().toString());
    4. Save and close the file.
  24. Update address-related JSPs to correctly display the shipping and billing address on the checkout page.
    1. Open the following files for editing.
      • Stores\WebContent\AuroraB2BStorefrontAssetStore\ShoppingArea\CheckoutSection\SingleShipment\ShippingAddressSelect.jsp
      • Stores\WebContent\AuroraStorefrontAssetStore\ShoppingArea\CheckoutSection\SingleShipment\ShippingAddressSelect.jsp
    2. Locate the following code snippet.
      <c:set var="selectedAddressId" value="${param.addressId}"/>
    3. Replace it with the following code snippet.
      <c:set var="selectedAddressId" value="${orderShipInfo.usableShippingAddress[0].addressId}"/>
    4. Save and close the files.
    5. Open the following files for editing.
      • Stores\WebContent\AuroraStorefrontAssetStore\Snippets\Member\Address\AddressDisplay.jsp
      • Stores\WebContent\AuroraB2BStorefrontAssetStore\Snippets\Member\Address\AddressDisplay.jsp
    6. Locate the following code snippet.
      <c:if test="${empty WCParam.addressId}" >
    7. Replace it with the following code snippet.
      <c:if test="${empty WCParam.addressId || WCParam.addressId ne param.addressId }" >
    8. Save and close the files.
  25. Update Content_UI.jspf to correctly display the icon that symbolizes URL attachments for marketing content.
    1. Open the following files for editing.
      • \Stores\WebContent\Widgets_701\com.ibm.commerce.store.widgets.ContentRecommendation\Content_UI.jspf
      • \Stores\WebContent\Widgets_801\com.ibm.commerce.store.widgets.ContentRecommendation\Content_UI.jspf
    2. Locate the following code snippet.
      <c:if test="${not empty fileType}">
    3. Below this snippet, add the following code.
      <c:if test="${fileType eq 'html' || fileType eq 'htm' || mimeType eq 'text/html'}">
      	<c:set var="attachmentType" value="html"/>
      </c:if>
      
    4. Save and close the files.
  26. Update the JSP files related to the Price filter that are used for generating URLs.
    1. Open the Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.CatalogEntryList/CatalogEntryList_UI.jspf file for editing.
      • Locate the following line of code.
        SearchBasedNavigationDisplayJS.appendFilterPriceRange();
      • Replace the line with the following.
        SearchBasedNavigationDisplayJS.appendFilterPriceRange("<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>");
    2. Open the Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.CatalogEntryList/javascript/SearchBasedNavigationDisplay.js file for editing.
      • Locate the following line of code.
        checkPriceInput:function(event)
      • Replace the line with the following.
        checkPriceInput:function(event, currencySymbol)
      • Locate the following line of code.
        this.appendFilterPriceRange();
      • Replace the line with the following.
        this.appendFilterPriceRange(currencySymbol);
      • Locate the following line of code.
        appendFilterPriceRange:function()
      • Replace the line with the following.
        appendFilterPriceRange:function(currencySymbol)
      • Locate the following line of code.
        var label = this.currencySymbol + byId("low_price_input").value + " - " + this.currencySymbol + byId("high_price_input").value;
      • Replace the line with the following.
        var label = currencySymbol + byId("low_price_input").value + " - " + currencySymbol + byId("high_price_input").value;
      • Locate the following line of code.
        restoreHistoryContext:function()
      • Replace the line with the following.
        restoreHistoryContext:function(currencySymbol)
      • Locate the following line of code.
        this.appendFilterPriceRange();
      • Replace the line with the following.
        this.appendFilterPriceRange(currencySymbol);
    3. Open the Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.FacetNavigation/FacetNavigation_HorizontalView_UI.jspf file for editing.
      • Locate the following line of code.
        <input id="low_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_LOWER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event);" class="range_input" type="tel"/>
      • Replace the line with the following.
        <input id="low_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_LOWER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event, '<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>');" class="range_input" type="tel"/>
      • Locate the following line of code.
        <input id="high_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_UPPER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event);" class="range_input" type="tel"/>
      • Replace the line with the following.
        <input id="high_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_UPPER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event, '<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>');" class="range_input" type="tel"/>
      • Locate the following line of code.
        setTimeout("SearchBasedNavigationDisplayJS.restoreHistoryContext();", 200);
      • Replace the line with the following.
        setTimeout("SearchBasedNavigationDisplayJS.restoreHistoryContext(\"<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>\");", 200);
    4. Open the Stores/WebContent/Widgets_701/com.ibm.commerce.store.widgets.FacetNavigation/FacetNavigation_VerticalView_UI.jspf file for editing.
      • Locate the following line of code.
        <input id="low_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_LOWER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event);" class="range_input" type="tel"/>
      • Replace the line with the following.
        <input id="low_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_LOWER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event, '<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>');" class="range_input" type="tel"/>
      • Locate the following line of code.
        <input id="high_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_UPPER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event);" class="range_input" type="tel"/>
      • Replace the line with the following.
        <input id="high_price_input" role="textbox" aria-label="<fmt:message key="LN_SEARCH_FACET_UPPER_BOUND" bundle="${widgetText}"/>" onkeyup="SearchBasedNavigationDisplayJS.checkPriceInput(event, '<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>');" class="range_input" type="tel"/>
      • Locate the following line of code.
        setTimeout("SearchBasedNavigationDisplayJS.restoreHistoryContext();", 200);
      • Replace the line with the following.
        setTimeout("SearchBasedNavigationDisplayJS.restoreHistoryContext(\"<c:out value='${env_CurrencySymbolToFormat}' escapeXml='false'/>\");", 200);
    5. Save and close the files.

Results

Your Aurora-based store is successfully migrated.
HCL Commerce Version 9.1.3.0 or laterNote: In HCL Commerce Version 9.1.3.0 and later, the Store preview feature is supported for Struts 2 migrated local stores, in non-workspace context environments only.

For more information on enabling the Store Preview feature in your migrated local store environment, see step 4.c of Migrating REST-based Search.