// ===================================================================================
 //                                                                              Select
 //                                                                              ======
 private PagingResultBean<Product> selectProductPage(int pageNumber, ProductSearchForm form) {
   verifyOrClientError("The pageNumber should be positive number: " + pageNumber, pageNumber > 0);
   return productBhv.selectPage(
       cb -> {
         cb.setupSelect_ProductStatus();
         cb.setupSelect_ProductCategory();
         cb.specify()
             .derivedPurchase()
             .max(
                 purchaseCB -> {
                   purchaseCB.specify().columnPurchaseDatetime();
                 },
                 Product.ALIAS_latestPurchaseDate);
         if (form.productName != null) {
           cb.query().setProductName_LikeSearch(form.productName, op -> op.likeContain());
         }
         if (form.purchaseMemberName != null) {
           cb.query()
               .existsPurchase(
                   purchaseCB -> {
                     purchaseCB
                         .query()
                         .queryMember()
                         .setMemberName_LikeSearch(
                             form.purchaseMemberName, op -> op.likeContain());
                   });
         }
         if (form.productStatus != null) {
           cb.query().setProductStatusCode_Equal_AsProductStatus(form.productStatus);
         }
         cb.query().addOrderBy_ProductName_Asc();
         cb.query().addOrderBy_ProductId_Asc();
         cb.paging(4, pageNumber);
       });
 }
 // ===================================================================================
 //                                                                              Select
 //                                                                              ======
 private PagingResultBean<Product> selectProductPage(int pageNumber, WxValidatorForm form) {
   verifyOrClientError("The pageNumber should be positive number: " + pageNumber, pageNumber > 0);
   return productBhv.selectPage(
       cb -> {
         cb.ignoreNullOrEmptyQuery();
         cb.setupSelect_ProductStatus();
         cb.setupSelect_ProductCategory();
         cb.specify()
             .derivedPurchase()
             .count(
                 purchaseCB -> {
                   purchaseCB.specify().columnPurchaseId();
                 },
                 Product.ALIAS_purchaseCount);
         cb.query().setProductName_LikeSearch(form.productName, op -> op.likeContain());
         final String purchaseMemberName = form.purchaseMemberName;
         if (LaStringUtil.isNotEmpty(purchaseMemberName)) {
           cb.query()
               .existsPurchase(
                   purchaseCB -> {
                     purchaseCB
                         .query()
                         .queryMember()
                         .setMemberName_LikeSearch(purchaseMemberName, op -> op.likeContain());
                   });
         }
         cb.query().setProductStatusCode_Equal_AsProductStatus(form.productStatus);
         cb.query().addOrderBy_ProductName_Asc();
         cb.query().addOrderBy_ProductId_Asc();
         cb.paging(4, pageNumber);
       });
 }
 @AllowAnyoneAccess // TODO s.tadokoro Remove this when JSON Login feature is implemented.
 @Execute
 public JsonResponse<List<MypageProductResult>> index() {
   ListResultBean<Product> memberList =
       productBhv.selectList(
           cb -> {
             cb.query().addOrderBy_RegularPrice_Desc();
             cb.fetchFirst(3);
           });
   List<MypageProductResult> beans =
       memberList
           .stream()
           .map(
               member -> {
                 return new MypageProductResult(member);
               })
           .collect(Collectors.toList());
   return asJson(beans);
 }