Created by Jerry Wang, last modified on Oct 20, 2014

如果想找出bol collection 里满足某个attribute 等于指定value的条件的bol entity,例如一个bol collection 里包含了一系列product instance, 需要找出product id 等于JERRY06042的product instance,有两种做法:

  1. 逐一遍历collection 中的entity,在每次循环里取出entity的PRODUCT_ID, 和指定比较,如果找到满足条件的bol entity,则退出循环:

```ABAP

CONSTANTS: gv_product_id TYPE comm_product-product_id VALUE 'JERRY06042'.DATA: lv_start TYPE i,lv_end type i.GET RUN TIME FIELD lv_start.DATA(lo_product) = lo_collection->get_first( ).WHILE lo_product IS NOT INITIAL.DATA(lv_product_id) = lo_product->get_property_as_string( 'PRODUCT_ID' ).IF lv_product_id = gv_product_id.WRITE: / 'product found in solution1'.EXIT.ENDIF.lo_product = lo_collection->get_next( ).ENDWHILE.GET RUN TIME FIELD lv_end.lv_end = lv_end - lv_start.WRITE: / 'time spentsolution1: ' , lv_end.
  1. 从bol collection 里得到iterator,利用iterator的FIND_BY_PROPERTY功能:
  CLEAR: lv_start.GET RUN TIME FIELD lv_start.DATA(iterator) = lo_collection->get_iterator( ).DATA(lo_found) = iterator->find_by_property( iv_attr_name = 'PRODUCT_ID' iv_value = gv_product_id ).GET RUN TIME FIELD lv_end.lv_product_id = lo_found->get_property_as_string( 'PRODUCT_ID' ).WRITE: / 'Product found in solution2: ', lv_product_id.lv_end = lv_end - lv_start.WRITE: / 'time spent solution2: ' , lv_end COLOR COL_NEGATIVE.

```

测试发现bol collection里的entity数量越多,则第二种办法的性能优势越突出。例如在bol collection包含1684个product的情况下,方法二的性能是方法一的将近5倍。

REPORT  ZHANA_PRODUCT_SEARCH_FILTER.PARAMETERS: prod_id type COMT_PRODUCT_ID,prod_des type COMT_PRSHTEXTX,cat_id type COMT_CATEGORY_ID,"COMM_PRPRDCATR-CATEGORY_ID,cat_desc type COMT_CATEGORY_TEXT,maxhit type i .DATA: lo_core               TYPE REF TO cl_crm_bol_core,lo_collection         TYPE REF TO if_bol_entity_col,lo_root_entity        TYPE REF TO cl_crm_bol_entity,lv_view_name          TYPE crmt_view_name,lv_query_name         TYPE crmt_ext_obj_name,lt_query_parameter    TYPE crmt_name_value_pair_tab,ls_query_parameter    LIKE LINE OF lt_query_parameter,lv_size               TYPE i.START-OF-SELECTION.*  replace ' ' with '' into prod_id.SHIFT prod_id RIGHT DELETING TRAILING space.SHIFT prod_id left DELETING LEADING space.SHIFT prod_des RIGHT DELETING TRAILING space.SHIFT prod_des left DELETING LEADING space.SHIFT cat_id RIGHT DELETING TRAILING space.SHIFT cat_id left DELETING LEADING space.SHIFT cat_desc RIGHT DELETING TRAILING space.SHIFT cat_desc left DELETING LEADING space.IF prod_id NE ''.ls_query_parameter-name = 'PRODUCT_ID'.ls_query_parameter-value = prod_id.APPEND ls_query_parameter TO lt_query_parameter.ENDIF.IF prod_des NE ''.ls_query_parameter-name = 'DESCRIPTION'.ls_query_parameter-value = prod_des.APPEND ls_query_parameter TO lt_query_parameter.ENDIF.IF cat_id NE ''.ls_query_parameter-name = 'CATEGORY_ID'.ls_query_parameter-value = cat_id.APPEND ls_query_parameter TO lt_query_parameter.ENDIF.IF cat_desc NE ''.ls_query_parameter-name = 'CATEGORY_DESC'.ls_query_parameter-value = cat_desc.APPEND ls_query_parameter TO lt_query_parameter.ENDIF.IF maxhit EQ ''.maxhit = 10000.ENDIF.ls_query_parameter-name = 'MAX_ROWS'.ls_query_parameter-value = maxhit.APPEND ls_query_parameter TO lt_query_parameter.lo_core = cl_crm_bol_core=>get_instance( ).lo_core->load_component_set( 'PROD_ALL' ).lv_query_name = 'ProdAdvancedSearchProducts'."lv_query_name = 'ProdAdvSearchRgProducts'.try.lo_collection = lo_core->query(iv_query_name               = lv_query_nameit_query_params             = lt_query_parameteriv_view_name                = lv_view_name ).
CATCH CX_SY_ARITHMETIC_ERROR.write:/ 'Error' .
ENDTRY.lv_size = lo_collection->IF_BOL_BO_COL~SIZE( ).WRITE:/ 'Number of ' , lv_size, ' Products has been found!'.CONSTANTS: gv_product_id TYPE comm_product-product_id VALUE 'JERRY06042'.DATA: lv_start TYPE i,lv_end type i.GET RUN TIME FIELD lv_start.DATA(lo_product) = lo_collection->get_first( ).WHILE lo_product IS NOT INITIAL.DATA(lv_product_id) = lo_product->get_property_as_string( 'PRODUCT_ID' ).IF lv_product_id = gv_product_id.WRITE: / 'product found in solution1'.EXIT.ENDIF.lo_product = lo_collection->get_next( ).ENDWHILE.GET RUN TIME FIELD lv_end.lv_end = lv_end - lv_start.WRITE: / 'time spentsolution1: ' , lv_end.CLEAR: lv_start.GET RUN TIME FIELD lv_start.DATA(iterator) = lo_collection->get_iterator( ).DATA(lo_found) = iterator->find_by_property( iv_attr_name = 'PRODUCT_ID' iv_value = gv_product_id ).GET RUN TIME FIELD lv_end.lv_product_id = lo_found->get_property_as_string( 'PRODUCT_ID' ).WRITE: / 'Product found in solution2: ', lv_product_id.lv_end = lv_end - lv_start.WRITE: / 'time spent solution2: ' , lv_end COLOR COL_NEGATIVE.

SAP CRM BOL collection find_by_property相关推荐

  1. SAP CRM BOL编程基础,代码+详细注释

    网络上可以找到一些使用BOL查询.维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解.本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念. 这是一篇翻译的文章,你可能会 ...

  2. SAP CRM BOL entity deletion - root node and sub node

    Created by Jerry Wang, last modified on Oct 13, 2014 当使用下列report删除一个BOL entity root entity时,无需在repor ...

  3. SAP CRM BOL attribute_ref的merge逻辑调试

    Created by Wang, Jerry, last modified on Jul 21, 2014 我们知道每个CL_CRM_BOL_ENTITY的实例,其实际存储数据的位置就是在实例内部的c ...

  4. SAP CRM 7.0中的BOL(Business Object Layer)

    业务对象层(BOL)和通用交互层(GenIL)属于业务层. 业务对象层:   在CRM WebClient会话运行期间,业务对象层存储业务对象的数据以及它们属性和关系的定义. 通用交互层 通用交互层将 ...

  5. SAP CRM里产品主数据的文本模型设计

    SAP CRM的产品主数据设计了这几种不同类型的文本模型: Part1 and Part2 actually share the same assignment block COMM_PR_SHTEX ...

  6. Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义

    2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友. 具体说明参见我前一篇文章:2020年关于SAP知识问 ...

  7. SAP CRM CL_CRM_BOL_ENTITY实例的sendable属性是什么时候置位的

    Created by Wang, Jerry, last modified on Jul 21, 2014 SAP CRM WebClient UI上的数据都是绑定到类CL_CRM_BOL_ENTIT ...

  8. SAP CRM和C4C的内容管理(Content Management)

    SAP CRM内容管理 SAP CRM使用Attachments这个UI给用户提供内容管理的功能.通过新建按钮可以上传本地文档到CRM系统: 该内容管理支持简单的版本管理功能,用户可点击Check O ...

  9. 《SAP CRM管理与实施指南》一一1.2 SAP CRM解决方案概述

    本节书摘来自华章计算机<SAP CRM管理与实施指南>一书中的第1章,第1.2节,作者:邹荫文 著,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 SA ...

最新文章

  1. OpenCV边缘之间的距离转换功能的实例(附完整代码)
  2. windows上使用的免费连接linux终端xshell6,xftp6下载
  3. ECCV 2020 论文大盘点-光流篇
  4. 【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同
  5. 说说 Python TestCase 中的断言方法
  6. 蓝桥杯 ADV-225 算法提高 9-2 文本加密
  7. 二维数组的空间复杂度_剑指 offer 面试题精选图解 04 . 二维数组中的查找
  8. 后台管理系统中英文版本切换
  9. 将jpg格式转成PDF格式的转换器
  10. 数模论文写作方法3|问题重述
  11. 4237. 【五校联考5day1】Melancholy (Standard IO)
  12. 视频搜索关键技术浅析
  13. TensorFlow 手写实现卷积神经网络CNN
  14. T 分布与高斯分布的差异
  15. JAVA培训多久可以找工作?
  16. 基于layui 的数据表格复杂表头导出到excel文件中
  17. CGB2111-Day13-用户模块管理
  18. 迪赛智慧数——其他图表(平行坐标图):世界杯历史个人进球排名TOP10
  19. Myeclipse 2013 professional 破解,下载
  20. JavaScript闭包实现计数器

热门文章

  1. EricChu的雅思之路——2020雅思A类考试切身体会\自学备考建议\考试完整流程(最详细版请耐心阅读)
  2. 工厂设备管理远程监控方案
  3. 重新定义工作站的“边界”
  4. 西门子S7-1200介绍和编程及博图软件的安装使用
  5. Direct Boot Mode
  6. IOS学习路线(2014-05-08)
  7. 云服务器物理主机的区别,云服务器与物理机的区别
  8. comsol学习笔记之求解器不收敛
  9. 悬挂缩进 java,c#Word Interop - 设置段落缩进
  10. r语言dataellipse_R语言中的划分聚类模型