In the series of Generic Object Services(GOS) available in the SAP, we have discussed different usage of the GOS toolbar. You can find all of these discussions at Tutorials > Generic Object Services (GOS).
Today, we’ll see the another concept: Relationship browser. Relationships option is available in the GOS Toolbar at GOS toolbar > Relationships.
This browser could display different linked objects like Sales Documents, Inbound IDOCs, Outbound IDOcs etc.
Now lets see how to add this Relationships in this relationship browser. For this purpose, we can use method CREATE_LINK of the class CL_BINARY_RELATION or the FM BINARY_RELATION_CREATE.
Method CREATE_LINK is an advanced version to create the Link which would be displayed in the Relationship browser. Since the method CREATE_LINK is an improved version to create the links, it doesn’t support all the object models. For the remaining of the object models, we need to use the FM BINARY_RELATION_CREATE. So, the question is how to know when to use FM.
When the relation model is not supported by the method CREATE_LINK, it raises the exception CX_OBL_MODEL_ERROR. So, we’ll call the method CREATE_LINK inside the TRY … CATCH … ENDTRY block.
This Code Snippet shows how to use the method to create links in the relationship browser.
*&---------------------------------------------------------------------*
*& Developer: Naimesh Patel
*& Purpose : To Create Relation between Business Objects
*&---------------------------------------------------------------------*
REPORT zgos_relation_create.
*
*
CLASS lcl_relation DEFINITION.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_related.
INCLUDE TYPE sibflporb.
TYPES:
relation TYPE oblreltype,
END OF ty_related.
TYPES:
ty_t_related TYPE STANDARD TABLE OF ty_related.
METHODS:
constructor
IMPORTING
obj_no TYPE sibfboriid
obj_type TYPE sibftypeid
obj_cat TYPE sibfcatid.
METHODS:
add_relation
IMPORTING
obj_no TYPE sibfboriid
obj_type TYPE sibftypeid
obj_cat TYPE sibfcatid
relation TYPE oblreltype.
METHODS:
create_relations.
PRIVATE SECTION.
DATA:
t_related TYPE ty_t_related, "sibflporbt,
my_prop TYPE sibflporb.
ENDCLASS. "lcl_relation DEFINITION
*
*
CLASS lcl_relation IMPLEMENTATION.
METHOD constructor.
* Set Properties of Referent
me->my_prop-instid = obj_no.
me->my_prop-typeid = obj_type.
me->my_prop-catid = obj_cat.
ENDMETHOD. "constructor
METHOD add_relation.
* Add Referenc
FIELD-SYMBOLS: <lfs_relat> LIKE LINE OF me->t_related.
APPEND INITIAL LINE TO me->t_related ASSIGNING <lfs_relat>.
<lfs_relat>-instid = obj_no.
<lfs_relat>-typeid = obj_type.
<lfs_relat>-catid = obj_cat.
<lfs_relat>-relation = relation.
ENDMETHOD. "add_relation
*
METHOD create_relations.
DATA: lwa_relate_key TYPE sibflporb.
FIELD-SYMBOLS: <lfs_relat> LIKE LINE OF me->t_related.
*
DATA:
ls_parent TYPE borident,
ls_related TYPE borident,
lv_relation TYPE binreltyp,
lx_obl TYPE REF TO cx_obl,
lp_errstr TYPE string,
lv_done TYPE flag.
*
* for each relation
LOOP AT me->t_related ASSIGNING <lfs_relat>.
MOVE-CORRESPONDING <lfs_relat> TO lwa_relate_key.
TRY.
* First try with new method to create the Link
CALL METHOD cl_binary_relation=>create_link
EXPORTING
is_object_a = my_prop
is_object_b = lwa_relate_key
ip_reltype = <lfs_relat>-relation.
*
lv_done = 'X'.
*
* If the Link can not be handled by this class, call the
* FM to create the link
CATCH cx_obl_model_error.
*
ls_parent-objkey = me->my_prop-instid.
ls_parent-objtype = me->my_prop-typeid.
ls_related-objkey = <lfs_relat>-instid.
ls_related-objtype = <lfs_relat>-typeid.
lv_relation = <lfs_relat>-relation.
*
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = ls_parent
obj_roleb = ls_related
relationtype = lv_relation
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
lv_done = 'X'.
ENDIF.
CATCH cx_obl INTO lx_obl.
lp_errstr = lx_obl->get_text( ).
MESSAGE lp_errstr TYPE 'S'.
ENDTRY.
*
IF lv_done = 'X'.
WRITE: / 'Relation added: ', <lfs_relat>-instid(10), <lfs_relat>-relation.
ENDIF.
*
ENDLOOP.
*
COMMIT WORK.
*
ENDMETHOD. "create_relations
ENDCLASS. "lcl_relation IMPLEMENTATION
*
START-OF-SELECTION.
DATA: o_relation TYPE REF TO lcl_relation.
*
* Sales Order as the Referent
CREATE OBJECT o_relation
EXPORTING
obj_no = '1000010010' " Sales Order Number
obj_type = 'BUS2032' " Sales Order
obj_cat = 'BO'.
*
* Add Delivery to Sales Order
o_relation->add_relation(
obj_no = '8000020000'
obj_type = 'LIKP'
obj_cat = 'BO'
relation = 'LINK' ). " Link
*
* Add IDOC to Sales Order
o_relation->add_relation(
obj_no = '1000012345'
obj_type = 'IDOC'
obj_cat = 'BO'
relation = 'IDC0' ). " IDOC
*
* Create Relations
o_relation->create_relations( ).
After successful program run, it will display the relationship in the browser of the Order.