BOL简单分析(二)

关于Display Mode

CRM5.0开始,BOL带有了一个Display Mode。目的就是防止误操作BOL数据。

最终是改变了core的一个参数

IV_DISPLAY_MODE_SUPPORT =ABAP_TRUE.

不过,在调用start_up的时候,默认是非显示模式,也就是可改。

代码示例:

* Start BOL core withdisplay mode support

DATA: lv_bol_core TYPEREF TO cl_crm_bol_core.

lv_bol_core =cl_crm_bol_core=>get_instance( ).

lv_bol_core->start_up(iv_appl_name = ‘MY_COMPONENT_SET’

         iv_display_mode_support =ABAP_TRUE ).

* Execute query andaccess entity

DATA: lv_entity type refto cl_crm_bol_entity.

lv_entity= ... - "Entity is in now display mode

* Switch to change modeand change entity

lv_entity->switch_to_change_mode(). "Reread and lock entity

IFlv_entity->is_changeable( ) = abap_true.

lv_entity->set_property_as_string(iv_attr_name =  'PROPERTY_NAME'

              iv_value          = 'New Value' ).

ENDIF.

 

注意下switch_to_change_mode与LOCK效果等同。目的就是独占当前的实例,便于增删改。

 

 

下面这个例子,演示的如何使用BOL的查询。

* Get searchcriterion of BOL query

DATA: lv_query TYPEREF TO cl_crm_bol_query_service,

  lv_city type string.

lv_query =cl_crm_bol_query_service=>get_instance( ‘QUERY_NAME’ ).

lv_city= lv_query->if_bol_bo_property_access~get_property_as_string(‘City’).“Short form using alias

lv_city =lv_query->get_property_as_string( ‘City’ ).

* Set property ofBOL entity

DATA: lv_entity TYPEREF TO cl_crm_bol_entity

lv_entity->if_bol_bo_property_access~set_property(iv_attr_name = ‘CITY’

                       iv_value          = ‘Walldorf’).

“Short form usingalias

lv_entity->set_property(iv_attr_name = ‘CITY’

            iv_value          = ‘Walldorf’ ).

* Cast toproperty_access interface

DATA:lv_business_object TYPE REF TO if_bol_bo_property_access.

lv_business_object?= lv_entity.

 

一些常用类之间的关系。

CL_CRM_BOL_ENTITY_COL有接口IF_BOL_ENTITY_COL。

CL_CRM_BOL_BO_COL有接口IF_BOL_BO_COL。

CL_CRM_BOL_ENTITY_COL的BO_PROPERTY_ACCESS集合就是CL_CRM_BOL_BO_COL

IF_BOL_ENTITY_COL接口可以进一步派生接口IF_BOL_BO_COL。

这些类都可以对集合做如下动作

INSERT, GET_FIRST,GET_NEXT, GET_CURRENT, SORT, CLEAR, MARK, UNMARK.

 

下面的代码示例获取当前行数据及集合循环指针的用法。

* Create collection

DATA: lv_collectionTYPE REF TO cl_crm_bol_bo_collection,

lv_property_accessTYPE REF TO if_bol_bo_property_access,

lv_query TYPE REF TOcl_crm_bol_query_service.

CREATE OBJECTlv_collection.

...

* Add item and makeit current

lv_collection->if_bol_bo_col~insert(iv_bo = lv_query

Iv_index = 1

Iv_set_focus =ABAP_BOOL ).

* Global iteration

lv_property_access =lv_collection->get_next( ). “Global iteration

“ moves focus

* Local iteration

DATA: lv_iteratorTYPE REF TO if_bol_bo_col_iterator.

lv_iterator =lv_collection->get_iterator( ).

lv_property_access =lv_iterator->get_first( )

WHILElv_query_is_bound.

lv_property_access =lv_collection->get_next(). “Local iteration

does not

ENDWHILE. “ movefocus

 

下面代码演示bol的数据查找功能(很弱)。注意,找到的话,根据你的要求返回是行号或者对象。

* Find by property

DATA: lv_personsTYPE REF TO cl_crm_bol_entity_collection,

lv_male TYPE REF TOcl_crm_bol_entity,

lv_iterator TYPE REFTO if_bol_bo_col_iterator.

lv_iterator =lv_persons->get_iterator( ).

lv_male =lv_iterator->find_by_property( iv_attr_name = ‘SEX’

                                                                 iv_value = 2 ).

* Set collectionfocus on the entity found

lv_persons->find(iv_bo = lv_male ).

 

下面代码演示bol的排序。这个功能一旦用了,那么就是真实的把对象重新排列了,原来的序列必定不存在了。(其实原理就是链表重排)

* Sorting

DATA: lv_personsTYPE REF TO cl_crm_bol_entity_collection,

lv_male TYPE REF TOcl_crm_bol_entity,

lv_iterator TYPE REFTO if_bol_bo_col_iterator.

lv_persons->sort(iv_attr_name = ‘SEX’

iv_sort_order = IF_BOL_BO_COL=>SORT_DESCENDING )."默认正序

 

关于多项选择,主要看markunmark函数,以及get_marked

 

下面这段实例很实用,说的是如何获取bo的报错。

* Access messages ofa business object

* 1) Use the messagecontainer manager

DATA: lv_mcm TYPEREF TO cl_crm_genil_mess_cont_manager.

lv_mcm =lv_bol_core->get_message_cont_manager( ).

* 2) ... to obtainthe message container

DATA: lv_object_nameTYPE crmt_ext_obj_name,

Lv_object_id TYPEcrmt_gnil_object_id.

lv_object_name =lv_order->get_name( ).

lv_object_id =lv_order->get_key( ).

DATA: lv_mc TYPE REFTO if_genil_message_container.

lv_mc =lv_mcm->get_message_cont( iv_object_name = lv_object_name

                                                             Iv_object_id =lv_object_id ).

* 3) Access messages

DATA:lv_number_of_errors TYPE int4,

lt_error_messagesTYPE crmt_genil_message_tab.

lv_number_of_errors= lv_mc->get_number_of_messages( lv_mc->mt_error).

IF lv_number_of_errors <> 0.

lt_error_messages =lv_mc->get_messages( lv_mc->mt_error ).

ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值