CRM Debugging and BOL Programming to read & populate values · IT Consulting & Development | Custom Software, SAP, Microsoft

CRM Debugging and BOL Programming to read & populate values

Home / Blogs / CRM Debugging and BOL Programming to read & populate values

In this article  CRM Debugging and BOL Programming are explained to help navigate the entity structure in CRM. This article talks about how you can debug and Navigate through the standard CRM structure and populate or retrieve the value for the field.

It is a follow up article from the 1st one. Please refer to the last article if you haven’t already. Here is the link to the article if you would like to read it:

https://peritossolutions.com/crm-bol-programming-make-fields-editable-and-display-only/

In this article below topic areas are discussed:

  1. To disable one specific field in an Address section
  2. Find the UI component
  3. Find technical object to do code changes
  4. Get value using IF_BOL_BO_PROPERTY_ACCESS
    • Debug to find where the value is coming from
  5. Get value of UI field using me-> context type
    • Debug to find how this gets populated.
  6. Add a default Blank row in CRM UI

1.    Requirement: Disable a specific UI element field

Requirement: In customer overview screen when user clicks on edit to update the address information disable a specific field called “Delivery service type” and do not allow to update Phone and email sections as highlighted below.

2.    Find the UI component

UI component was BP_ADDR and View value as BP_ADDR/AccountAddressEF

3.    Find Technical object to do code changes

Use transaction obsp_wd_cmpwb to be able to open the component in backend CRM system. Specific fields can be found as below

Context_Nodes > Implementation class > Attributes >STRUCT.FIELDNAME

There are different methods that you can find in the context node attributes as was also answered in the post below

https://answers.sap.com/questions/9678392/use-of-getter-setter-methods-in-web-ui.html

  • GET_XYZ – This is used to get the data of attribute(XYZ) from the BOL Layer and display it on the UI
  • SET_XYZ – This is used to set the data of the attribute from the UI to the BOL layer
  • GET_M_XYZ – This defines the meta data (type) of the attribute
  • GET_I_XYZ – This defines whether the attibute is editable or non editable i.e, using Get_I method you can make your field as grade out based up on any condition.
  • GET_V_XYZ – This defines the content of drop down values, F4 Help etc i.e,you can retrieve the dropdown values based up on your condition.
  • GET_P_XYZ – This defines the property of attribute whether it’s drop down, text box, F4 help, check box etc. Also, if any followup event should trigger the same is mentioned here i.e,you can call specific even handler using P method .
  • There are two more methods which have recently got added from the above two as mentioned below
  • GET_A_XYZ – This is used to hide or display the attribute based on the Switch ID.
  • GET_AC_XYZ – This is used for Field Action Menu Getter
  • Since I need to make the field disabled, I need to make use of the field value GET_M_DELI_SERV_TYPE
  • You can find this method in context node Buildaddress> Attributes> STRUCT.DELI_SERV_TYPE which has a set of predefined methods as seen below

The code which was used to set the value as disabled would be GET_I_XYZ

If the icon does not look green as in the above screenshot choose to redefine or one of then options below to activate the method

Find the source code as below:

METHOD get_i_deli_serv_type.
CALL METHOD super->get_i_deli_serv_type
EXPORTING
iterator    = iterator
RECEIVING
rv_disabled = rv_disabled.

IF zl_bp_addr_accountaddress_impl=>gv_addr_disabled IS NOT INITIAL.
rv_disabled = zl_bp_addr_accountaddress_impl=>gv_addr_disabled.
ENDIF.

ENDMETHOD.

4.    Get value of UI field using IF_BOL_BO_PROPERTY_ACCESS

I would like to read the address number value from the UI. To access a specific value coming from the previous or current screen use the BOL property access type as mentioned below where you want to read the value from

In this case  ZGO_BOL_PROPERTY  of type IF_BOL_BO_PROPERTY_ACCESS defined in class ZL_BP_ADDR_ACCOUNTCOMMNUM_IMPL is used where I want to read the attribute address number and address GUID which are attributes in that class. This is a standard type which can be used and some of the common types need to be remembered to help in understanding the basics of CRM Debugging and BOL Programming

If you check the interface IF_BOL_BO_PROPERTY_ACCESS, it has properties as below:

To be able to use the value stored in the property below code needs to be run

 In ZL_BP_ADDR_ACCOUNTEMAILSE_IMPL DO_PREPARE_OUTPUT DATA: lo_bo        TYPE REF TO  cl_crm_bol_entity, lv_addr      TYPE ad_addrnum, lv_addr_guid TYPE bu_address_guid. IF zl_bp_addr_accountcommnum_impl=>zgo_bol_property IS NOT INITIAL . lo_bo ?=  zl_bp_addr_accountcommnum_impl=>zgo_bol_property. ENDIF. IF lo_bo IS BOUND . lo_bo->get_property_as_value( EXPORTING iv_attr_name =     'ADDRESS_NUMBER' IMPORTING ev_result    =       lv_addr ). lo_bo->get_property_as_value( EXPORTING iv_attr_name =     'ADDRESS_GUID' IMPORTING ev_result    =       lv_addr_guid ). ENDIF .

4.1.  Check in debug mode where the value is coming from

You can also navigate to container proxy by using the code as below. Here are some step by step details on how you could manage CRM Debugging and BOL Programming to achieve this result

ZL_BP_ADDR_ACCOUNTCOMMNUM_IMPL=>ZGO_BOL_PROPERTY

Where ZGO_BOL_PROPERTY is of type IF_BOL_BO_PROPERTY_ACCESS

  1. Go to container_proxy
  2. Go to Data_Ref
  3. Click on data type which opens up
  4. Open the attribute_ref
  5. Find the address number and address value in there

The above would directly come to container proxy

Click on Data_ref

Click on the type below

Click on Attribute ref

Find the values

5.    Get value of UI field using me-> context type

For debugging as a starting point use the implementation class and find from Context what specific field value are you looking for. Example I am looking to find the address number field as below. This can also be done

You can use “Me” and navigate inside to find the values

Inside “Me” you can find the context Type which can be Z or standard in my case I defined a ZContext

ztyped_context->builaddress->collection_wrapper->

Inside “Me” you can find the context Type which can be Z or standard in my case I defined a ZContext

ztyped_context->builaddress->collection_wrapper->

Insider collection reference look for

Look for entity list as above which shows 3 entries as there are 3 BP addresses on the UI

Go to one of the entities and it would have container proxy

Follow the same steps as in 4.1

  1. Go to container_proxy
  2. Go to Data_Ref
  3. Click on data type which opens up
  4. Open the attribute_ref
  5. Find the address number and address value in there

This should give you some idea on how you could do  CRM Debugging and BOL Programming easily by following a set path and Data structure concept.

6. Add a default blank row in the CRM UI table

As you can see below default Blank line was added to the email so the user can enter but no default blank line was added for Mobile Number

Now when we add the code as below to method DO_PREPARE_OUTPUT of class ZL_BP_ADDR_ACCOUNTCOMMNUM_IMPL

CALL METHOD super->do_prepare_output
EXPORTING
iv_first_time = iv_first_time.

This would add a default blank line to the component

 

To summarize CRM Debugging can be slightly complicated if you do not understand the basic underlying architecture. This blog talks about how to debug by navigating in the standard SAP CRM structure. Using BOL programming to populate or retrieve the value from UI fields.  To understand how to find the technical objects to do the change and lastly how to create a default blank row. This should help improve your learning for CRM Debugging and BOL Programming. For further reading here is the link to the earlier post on CRM Basics.

https://peritossolutions.com/crm-bol-programming-make-fields-editable-and-display-only/

Thanks for reading the article. Pl share your comments and feedback. To know more about our SAP service offering read below

https://peritossolutions.com/services/sap-consulting/

Contact us if you have a business inquiry

https://peritossolutions.com/contact-us/

Leave a Reply

Your email address will not be published. Required fields are marked *

× How can I help you?