SAP CRM BOL collection find_by_property
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,有两种做法:
- 逐一遍历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.
- 从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相关推荐
- SAP CRM BOL编程基础,代码+详细注释
网络上可以找到一些使用BOL查询.维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解.本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念. 这是一篇翻译的文章,你可能会 ...
- 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 ...
- SAP CRM BOL attribute_ref的merge逻辑调试
Created by Wang, Jerry, last modified on Jul 21, 2014 我们知道每个CL_CRM_BOL_ENTITY的实例,其实际存储数据的位置就是在实例内部的c ...
- SAP CRM 7.0中的BOL(Business Object Layer)
业务对象层(BOL)和通用交互层(GenIL)属于业务层. 业务对象层: 在CRM WebClient会话运行期间,业务对象层存储业务对象的数据以及它们属性和关系的定义. 通用交互层 通用交互层将 ...
- SAP CRM里产品主数据的文本模型设计
SAP CRM的产品主数据设计了这几种不同类型的文本模型: Part1 and Part2 actually share the same assignment block COMM_PR_SHTEX ...
- Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义
2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友. 具体说明参见我前一篇文章:2020年关于SAP知识问 ...
- 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 ...
- SAP CRM和C4C的内容管理(Content Management)
SAP CRM内容管理 SAP CRM使用Attachments这个UI给用户提供内容管理的功能.通过新建按钮可以上传本地文档到CRM系统: 该内容管理支持简单的版本管理功能,用户可点击Check O ...
- 《SAP CRM管理与实施指南》一一1.2 SAP CRM解决方案概述
本节书摘来自华章计算机<SAP CRM管理与实施指南>一书中的第1章,第1.2节,作者:邹荫文 著,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 SA ...
最新文章
- OpenCV边缘之间的距离转换功能的实例(附完整代码)
- windows上使用的免费连接linux终端xshell6,xftp6下载
- ECCV 2020 论文大盘点-光流篇
- 【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同
- 说说 Python TestCase 中的断言方法
- 蓝桥杯 ADV-225 算法提高 9-2 文本加密
- 二维数组的空间复杂度_剑指 offer 面试题精选图解 04 . 二维数组中的查找
- 后台管理系统中英文版本切换
- 将jpg格式转成PDF格式的转换器
- 数模论文写作方法3|问题重述
- 4237. 【五校联考5day1】Melancholy (Standard IO)
- 视频搜索关键技术浅析
- TensorFlow 手写实现卷积神经网络CNN
- T 分布与高斯分布的差异
- JAVA培训多久可以找工作?
- 基于layui 的数据表格复杂表头导出到excel文件中
- CGB2111-Day13-用户模块管理
- 迪赛智慧数——其他图表(平行坐标图):世界杯历史个人进球排名TOP10
- Myeclipse 2013 professional 破解,下载
- JavaScript闭包实现计数器