Skip to Content

In this blog I will share Installed Base (IBase) concept briefly and the FM’s commonly used.

Installed base management enables the representation of objects installed at a customer’s site or an organization (such as devices, machines, and software) for which a service is offered. In business processes, an installed base can be referred to as a general unit or as an individual element (component).

The Purpose of Installed bases are to structure and represent installed objects. Each object belongs to an object family. An installed base consists of general data, a structure and components. One can install as many components as they require for each installed base and you can create subordinate components for each of these components. In this way, you create an installed base structure with as many nodes as you want. Partners are assigned to installed objects.

The Function group: IB_CRM_API gives the CRM API’s for IBase.

1) CRM_IBASE_GET_DETAIL: Gives the IBase details

2) CRM_IBASE_GET_PARTNER: Gives the Partner information of the IBase.

3) CRM_IBASE_COMP_GET_DETAIL: Gives the Component details.

4) CRM_IBASE_COMP_GET_PARTNER: Gives the Partner information of the Component.

5) CALL FUNCTION ‘CRM_IBASE_COMP_GET_HIERARCHY’

      EXPORTING

        i_comp               = ls_comp

        i_level_down_all  = ‘X’

        i_level_up_all      = ‘X’

      IMPORTING

        e_struc_ibase_tab = lt_fields

      EXCEPTIONS

        not_specified     = 1

        doesnt_exist      = 2

        no_authority      = 3

        OTHERS            = 4.

For a Component pass the import parameter i_level_down_all = ‘X’ to get all the Subcomponents(Child). For a Subcomponent pass the import parameter i_level_up_all  = ‘X’ to get its component(Parent).

Alternatively, using BOL Programming above details can be fetched.

data: lr_ib_entity                 TYPE REF TO cl_crm_bol_entity,

        lv_partner_ib               TYPE string,

        lv_partner_num           TYPE string,

        lv_part_fct                  TYPE string,

        lr_bol_col                    TYPE REF TO if_bol_entity_col,

        lr_comp_col                 TYPE REF TO if_bol_entity_col,

        lr_subcomp_col            TYPE REF TO if_bol_entity_col,

        lv_partner_guid            TYPE crmt_object_guid,

        lr_entity                       TYPE REF TO cl_crm_bol_entity,

        lr_comp_entity              TYPE REF TO cl_crm_bol_entity,

          lr_subcomp_entity         TYPE REF TO cl_crm_bol_entity.

For instance lr_ib_entity is at IBHeader level, has IBase details.

A)We will retrieve Business Partner details for the IBase from the below code.

*** HeaderPartnerSet

  lr_entity = lr_ib_entity->get_related_entity( iv_relation_name = ‘HeaderPartnerSet’ ).

*** IBPartnerAll

  check lr_entity is bound.

  lr_bol_col = lr_entity->get_related_entities( iv_relation_name = ‘IBPartnerAll’ ).

  CHECK lr_bol_col IS BOUND.

  lr_entity ?= lr_bol_col->get_first( ).

  check lr_entity is bound.

  lv_partner_ib = lr_entity->get_property_as_string( ‘PARTNER_NUMBER’ ).

  lr_entity = lr_entity->get_related_entity( iv_relation_name = ‘BusinessPartner’ ).

  check lr_entity is bound.

  lv_partner_guid = lr_entity->get_property_as_string( ‘BP_GUID’ ).

  B)Get all the Components of a given ibase and Partner details.

**component collection

  lr_comp_col  =  lr_ib_entity->get_related_entities( iv_relation_name = cl_crm_ibase_il_constant=>firstlevelrelation ).

  if lr_comp_col is bound.

    lr_comp_entity ?= lr_comp_col->get_first( ).

** lr_comp_entity has component details.

****  iterate through all the Components.

    while lr_comp_entity is bound.

***** ComponentPartnerSet

      lr_entity = lr_comp_entity->get_related_entity( iv_relation_name = ‘ComponentPartnerSet’ ).

****  IBPartnerAll

      if lr_entity is not bound.

        exit.

      endif.

      lr_bol_col = lr_entity->get_related_entities( iv_relation_name = ‘IBPartnerAll’ ).

      CHECK lr_bol_col IS BOUND.

      lr_entity ?= lr_bol_col->get_first( ).

***** iterate through all the Partners in a Component.

      while lr_entity is bound.

        lv_partner_num = lr_entity->get_property_as_string( ‘PARTNER_NUMBER’ ).

        lv_part_fct  = lr_entity->get_property_as_string( ‘PARTNER_FCT’ ).

        lr_entity = lr_entity->get_related_entity( iv_relation_name = ‘BusinessPartner’ ).

        check lr_entity is bound.

        lv_partner_guid = lr_entity->get_property_as_string( ‘BP_GUID’ ).

       lr_entity ?= lr_bol_col->get_next( ).

     Endwhile.” iterate through all the Partners in a Component end.

  lr_comp_entity ?= lr_comp_col->get_next( ).

  Endwhile.” iterate through all the Components end.

Endif.

C)Get all the Subcomponents of a given Component and Partner details.

**Subcomponent collection

  lr_subcomp_col  = lr_subcomp_entity->get_related_entities( iv_relation_name = cl_crm_ibase_il_constant=> sublevelrelation ).

  if lr_subcomp_col is bound.

    lr_subcomp_entity ?= lr_subcomp_col->get_first( ).

** lr_subcomp_entity has component details.

**** iterate through all the Subcomponents.

    while lr_subcomp_entity is bound.

***** ComponentPartnerSet

      lr_entity = lr_subcomp_entity->get_related_entity( iv_relation_name = ‘ComponentPartnerSet’ ).

****  IBPartnerAll

      if lr_entity is not bound.

        exit.

      endif.

      lr_bol_col = lr_entity->get_related_entities( iv_relation_name = ‘IBPartnerAll’ ).

      CHECK lr_bol_col IS BOUND.

      lr_entity ?= lr_bol_col->get_first( ).

***** iterate through all the Partners in a Subcomponent.

      while lr_entity is bound.

        lv_partner_num = lr_entity->get_property_as_string( ‘PARTNER_NUMBER’ ).

        lv_part_fct  = lr_entity->get_property_as_string( ‘PARTNER_FCT’ ).

        lr_entity = lr_entity->get_related_entity( iv_relation_name = ‘BusinessPartner’ ).

        check lr_entity is bound.

        lv_partner_guid = lr_entity->get_property_as_string( ‘BP_GUID’ ).

       lr_entity ?= lr_bol_col->get_next( ).

     Endwhile.” iterate through all the Partners in a Subcomponent end.

  lr_subcomp_entity ?= lr_subcomp_col->get_next( ).

Endwhile.” iterate through all the Subcomponents end.

Endif.

Thanks

Ram Vellanki

To report this post you need to login first.

5 Comments

You must be Logged on to comment or reply to a post.

  1. Former Member

    Hi Ram,

    Thanks for the share. Just a quick question. Pls let me know if I’ve to make changes to IBASEs in the middleware or through BADIs, would it be advisable to use BOL layer or there are some specific FMs available to do so. I would most likely want to change warranties, associated partners or determine service orders associated with the IBASE. Would it be advisable to use BOL programming for use in such scenarios.

    Thanks

    Ashish

    (0) 
    1. Former Member Post author

      Hi Ashish,

        There are Many FMs to access IBASE. Look in the Function Group: IB_CRM_API for the relevant one. First consider the option of using BOL programming.

      Thanks

      Ram

      (0) 
  2. Ricky Shaw

    Hello Ram,

    I am getting a dump in scenarios A & B because lr_ib_entity is pointing to NULL object reference.

    A)   lr_entity = lr_ib_entity->get_related_entity( iv_relation_name = ‘HeaderPartnerSet’ ). B) **component collection   lr_comp_col  =  lr_ib_entity->get_related_entities( iv_relation_name = cl_crm_ibase_il_constant=>firstlevelrelation ).

    I tried to instantiate or set the reference to an object but failed. Can you please give me solution? Thanks

    (0) 
    1. Former Member Post author

      Hi Ricky,

        I gave a code snippet for understanding.. Ideally lr_ib_entity will point to the root node and check if it is bound.

      Thanks

      Ram

      (0) 
      1. Ricky Shaw

        Hi Ram,

        lr_ib_entity is NOT bound

        Can you please give me the code snippet to point lr_ib_entity to point to root node IBHeader?

        Thanks

        (0) 

Leave a Reply