Uploaded image for project: 'OFBiz'
  1. OFBiz
  2. OFBIZ-11208

OrderReadHelper.getOrderItemAttributes as non static function

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Done
    • Trunk
    • None
    • order
    • None

    Description

      Currenlty if we use the java helper class OrderReadHelper to resolve the orderItemAttributes, it didn't use the a local cache and call each time the delegator throw a static function.

      I propose to use also as non static function optimise database calling when you have multiple get to do.

      Origin: On customer site we have a huge table orderItemAttributes (8M tuples) with several call. Use a local cache throw OrderReadHelper divide by nine the calling.

      public String getOrderItemAttribute(String orderItemSeqId, String attributeName) {
           GenericValue orderItemAttribute = null;
           if (orderHeader != null) {
               if (orderItemAttributes == null) {
                   try{
                         orderItemAttributes = EntityQuery.use(orderHeader.getDelegator()) .from("OrderItemAttribute") .where("orderId", getOrderId()) .queryList();
                  } catch (GenericEntityException e) { Debug.logError(e, module); }
               }
               orderItemAttribute = EntityUtil.getFirst(
                   EntityUtil.filterByAnd(orderItemAttributes,
                       UtilMisc.toMap("orderItemSeqId", orderItemSeqId, "attrName", attributeName)));
           }
           return orderItemAttribute != null ? orderItemAttribute.getString("attrValue"): null;
       }
       

      At the first call, we populate the OrderReadHelper with all orderItemAttributes liked to an order, and after just filter with the orderItemSeqId and the attribute name wanted

      Example:

          OrderReadHelper orh = new OrderReadHelper(orderHeader)
          ...
          for (GenericValue orderItem : orh.getOrderItems()) {
                      listAttr << 
                             [startValue   : orh.getOrderItemAttribute(orderItem.orderItemSeqId, "MyStartValue"),
                              endValue     : orh.getOrderItemAttribute(orderItem.orderItemSeqId, "MyEndValue")]
          }
      

      We request only for the first passage, after for all other line we use the local OrderReadHelper cache.

      Attachments

        Activity

          People

            nmalin Nicolas Malin
            nmalin Nicolas Malin
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: