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

OrderReadHelper.getOrderItemAttributes as non static function

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Done
    • Affects Version/s: Trunk
    • Fix Version/s: Upcoming Branch
    • Component/s: order
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: