Every thing about Custom Hierarchy within BW- Part 1
Topic:
The purpose of these articles is to
- Create a custom hierarchy in BW- using a DSO or Master data(Part 1)
- Debug a Custom Hierarchy.(Part 2)
Back ground :
- More often we encounter issues which can only be dealt using custom hierarchy in BW , but unfortunately/fortunately BW requires a very specific set of keys to generate a hierarchies, being it a time dependent or independent.
this article will help developer to build Hierarchy within BW for data coming from
- Non SAP source system.
- Within BW from one hierarchy to another hierarchy( one MD to another MD).
- Within BW combining 2 or more hierarchy and uploading it in another hierarchy.
2. Debugging a custom hierarchy.
System:
SAP BI 7.x.
General Concept:
The target Info object has to be made as Export DS and reconnect the info object as self loop.
In self loop: Look up has to be done on DSO/Provider and update the Hierarchy with DSO/provider Data.
Data Flow Diagram:
Requirement Specification 1 : Data coming from NON SAP System and stored in Transaction DSO
- As above Fig. create a DSO with Field which are needed for BW Hierarchy
Key fields
- NODEID (Node ID)
Data Fields
- IOBJNM ( Info Object)
- NODENAME(Node Name)
- TLEVEL(level)
- LINK(Link)
- PARENTID(Parent ID)
- CHILDID(Child ID)
- NEXTID(Next ID)
- 0DATEFROM(Valid from)
- 0VALIDTO(Valid To)
- LANGU(LANGU)
- Short Description for Hierarchy
- Medium Desc for Hierarchy
- Description for Hierarchy.
- Create transformation for DSO to get data from Non SAP Data Source (if the data is not being populated in above format, logic has to be written to generate/populate data in above format).
- Right click and create export Data source for the target master data(ZTEST_IO) within the system and reconnect it for the same hierarchy DS as 8ZTEST_IOH.
- Create Implementation on BADI .
-
- Create an implementation on BADI.
- Activate the Implementation.
- Class has been created now Double click on the Implementing class( for below example ZCL_IM_TEST1)
- It will direct you to methods for same Implementing class :There are 2 type of methods in the Implementing class :
- IF_EX_RSU5_SAPI_BADI~DATA_TRANSFORM
- IF_EX_RSU5_SAPI_BADI~HIER_TRANSFORM
- Double click on IF_EX_RSU5_SAPI_BADI~HIER_TRANSFORM
- It will direct you to enhance the method source code.
- Enhancement code:
- Run Hierarchy info package no special setting required, the above code will allow developer to pick up records from the DSO.
- Code :
Info object : ZTEST_IO
IO Data Source: 8ZTEST_IOHHierarchy DSO: TESTHIER CASE I_DATASOURCE.WHEN ‘8ZTEST_IOH’.
FIELD-SYMBOLS:
<ZFS_T_HIENODE> TYPE ROSHIENODE.
TYPES: BEGIN OF TY_TESTHIER,
/BIC/ZNODEID TYPE /BIC/OIZNODEID,
/BIC/ZIOBJNM TYPE /BIC/OIZIOBJNM,
/BIC/ZNODENAME TYPE /BIC/OIZNODENAME,
/BIC/ZTLEVEL TYPE /BIC/OIZTLEVEL,
/BIC/ZLINK TYPE /BIC/OIZLINK,
/BIC/ZPARENTID TYPE /BIC/OIZPARENTID,
/BIC/ZCHILDID TYPE /BIC/OIZCHILDID,
/BIC/ZNEXTID TYPE /BIC/OIZNEXTID,
DATEFROM TYPE /BI0/OIDATEFROM,
DATETO TYPE /BI0/OIDATETO,
/BIC/ZLANGU TYPE /BIC/OIZLANGU,
/BIC/ZTXTSH TYPE /BIC/OIZTXTSH,
/BIC/ZTXTMD TYPE /BIC/OIZTXTMD,
/BIC/ZTXTLG TYPE /BIC/OIZTXTLG,END OF TY_TESTHIER.
DATA: WA_T_HIENODE TYPE ROSHIENODE,
IT_T_HIENODE TYPE STANDARD TABLE OF ROSHIENODE,
IT_TESTHIER TYPE STANDARD TABLE OF TY_TESTHIER,
WA_TESTHIER TYPE TY_TESTHIER.
SELECT /BIC/ZNODEID
/BIC/ZIOBJNM
/BIC/ZNODENAME
/BIC/ZTLEVEL
/BIC/ZLINK
/BIC/ZPARENTID
/BIC/ZCHILDID
/BIC/ZNEXTID
DATEFROM
DATETO
/BIC/ZLANGU
/BIC/ZTXTSH
/BIC/ZTXTMD
/BIC/ZTXTLGFROM /BIC/ATESTHIER00INTO TABLE IT_TESTHIER.
CLEAR WA_T_HIENODE.
LOOP AT IT_TESTHIER INTO WA_TESTHIER.
WA_T_HIENODE–NODEID = WA_TESTHIER–/BIC/MNODEID.
WA_T_HIENODE–IOBJNM = WA_TESTHIER–/BIC/MIOBJNM.
WA_T_HIENODE–TLEVEL = WA_TESTHIER–/BIC/MTLEVEL.
WA_T_HIENODE–LINK = WA_TESTHIER–/BIC/MLINK.
WA_T_HIENODE–PARENTID = WA_TESTHIER–/BIC/MPARENTID.
WA_T_HIENODE–CHILDID = WA_TESTHIER–/BIC/MCHILDID.
WA_T_HIENODE–NEXTID = WA_TESTHIER–/BIC/MNEXTID.
WA_T_HIENODE–DATEFROM = WA_TESTHIER–DATEFROM.
WA_T_HIENODE–DATETO = WA_TESTHIER–DATETO.
APPEND WA_T_HIENODE TO IT_T_HIENODE.
ENDLOOP.
SORT IT_T_HIENODE BY NODEID.
REFRESH C_T_HIENODE[].
C_T_HIENODE[] = IT_T_HIENODE[].
REFRESH IT_T_HIENODE[].ENDCASE.
Requirement Specification 2 : Hierarchy Data coming from SAP / NON SAP System and stored in Master Data.
- All will be same as above except look up will be from Hierarchy table of Info Object 2(H table)
SELECT * FROM /BIC/HINFOOBJ2
Part 2 will explain how to debug this code at run time.
Very cool document, but can't find Part 2
Please share the link for part 2
Hi, many thanks for this very great document.
We have an InfoObject with external characteristics as target. How is it possible to assign data to this InfoObjetcs with custom code?
Many thanks
It can be so easy...here code example for our hierarchy extension...
SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L0S33 {
color: #4DA619;
}
.L0S52 {
color: #0000FF;
}
.L0S55 {
color: #800080;
}
.L0S70 {
color: #808080;
}
CLEAR wa_t_hienode.
LOOP AT it_eclasshier INTO wa_eclasshier.
wa_t_hienode-nodeid = wa_eclasshier-gnodeid.
wa_t_hienode-iobjnm = wa_eclasshier-giobjnm.
IF wa_t_hienode-iobjnm = 'GCLASSNUM'.
CONCATENATE wa_eclassmerk-soursystem wa_eclassmerk-gclasstyp wa_eclasshier-gclassnum INTO wa_t_hienode-nodename.
ELSE.
CONCATENATE wa_eclassmerk-soursystem wa_eclasshier-gclassnum INTO wa_t_hienode-nodename.
ENDIF.
wa_t_hienode-tlevel = wa_eclasshier-gtlevel.
wa_t_hienode-link = wa_eclasshier-glink.
wa_t_hienode-parentid = wa_eclasshier-gparentid.
APPEND wa_t_hienode TO it_t_hienode.
ENDLOOP.