2008 Apr 24 5:37 PM
Hi there!
I'm having a problem with an transformation end routine and I'm new to ABAP so was hoping someone could help me.... I'm using BI 7.0.
I have a transformation which has direct mappings from a datasource to a DSO. I also have a view which selects data from three different DSO's. It then updates the current DSO in the end routine when a match occurs on the key.
I can see the data in the temporary structures and see that it is being added to the Result_package but for some reason it is not updating the 5 or so fields in the DSO data.
I can't see where the data is getting lost as in the debugger I can see it being passed through all along.
Here is my code:
Can anyone see if i'm missing something?
Thanks for your help!
TYPES: BEGIN OF G_REC_S,
CASEID TYPE /BIC/OICASEID,
USERID TYPE /BIC/OIUSERID,
ORGUNITID TYPE /BIC/OIORGUNITID,
POSITION TYPE /BIC/OIPOSITION,
SVUSERID TYPE /BIC/OIUSERID,
ORGOBJLINKID TYPE /BIC/OIOWNERORG,
INFOFLAG TYPE /BIC/OICHINFST,
PRODID TYPE /BIC/OIPRODID,
PRODTYPE TYPE /BIC/OIPROD_TYPE,
END OF G_REC_S.
TYPES: BEGIN OF PRODDEL_REC_S,
CASEID TYPE /BIC/OICASEID,
PRODID TYPE /BIC/OIPRODID,
PRODTYPE TYPE /BIC/OIPROD_TYPE,
END OF PRODDEL_REC_S.
DATA: TMP_OLD_INFO TYPE G_REC_S.
DATA: TMP_NEW_INFO TYPE G_REC_S.
DATA: TMP_PRODDEL_INFO TYPE PRODDEL_REC_S.
*DATA: itab_RP TYPE STANDARD TABLE OF _ty_s_TG_1.
*WITH HEADER LINE
*WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
*Structure Result Package
DATA: istr_RP TYPE _ty_s_TG_1.
*Table Result Package
DATA: itab_RP TYPE STANDARD TABLE OF _ty_s_TG_1 INITIAL SIZE 0.
DATA: LEN TYPE I.
DATA: INFODEFINED(1) TYPE C.
DATA: NEW_TAB_REC_S TYPE STANDARD TABLE OF G_REC_S INITIAL SIZE 0.
DATA: OLD_TAB_REC_S TYPE STANDARD TABLE OF G_REC_S INITIAL SIZE 0.
DATA: PRODUCTDELIVERY_TAB TYPE STANDARD TABLE OF PRODDEL_REC_S
INITIAL
SIZE 0.
*Take info from link tables (orgpos-userpos - ODS
SELECT
USERPOS~/BIC/CASEID as caseid
USERPOS~/BIC/USERID as userid
USERPOS~/BIC/ORGUNITID as orgunitid
USERPOS~/BIC/POSITION as position
USERSUPERVISOR~/BIC/USERID as svuserid
USERPOS~/BIC/OWNERORG as ORGOBJLINKID
"" as INFOFLAG
"" as prodid
"" as prodtype
FROM
ZORGUSERVIEW as USERPOS
LEFT JOIN
ZORGUSERVIEW as USERSUPERVISOR
ON USERSUPERVISOR~/BIC/CASEID = USERPOS~/BIC/CASEID AND
USERSUPERVISOR~/BIC/USERROLE = 'RT4'
*/BIC/AOWNERORG00 as ORGOBJ INNER JOIN
*/BIC/AUSER_POS00 as USERPOS
*ON USERPOS~/BIC/USERID = ORGOBJ~/BIC/USERID
*inner JOIN
*/BIC/AORG_POS00 as ORGPOS
*ON USERPOS~/BIC/POSITION = ORGPOS~/BIC/POSITION
INTO TABLE NEW_TAB_REC_S
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
USERPOS~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID
AND USERPOS~/BIC/USERROLE = 'RT1'.
SORT NEW_TAB_REC_S ASCENDING
BY ORGOBJLINKID.
DELETE ADJACENT DUPLICATES FROM NEW_TAB_REC_S COMPARING CASEID.
.
*Take info from Caseheader ODS
SELECT
CASEH~/BIC/CASEID
CASEH~/BIC/USERID
CASEH~/BIC/ORGUNITID
CASEH~/BIC/POSITION
CASEH~/BIC/SVUSERID
CASEH~/BIC/OWNERORG
CASEH~/BIC/CHINFST
CASEH~/BIC/PRODID
CASEH~/BIC/PROD_TYPE
FROM /BIC/ACASEHEAD00 as CASEH
INTO TABLE OLD_TAB_REC_S
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
CASEH~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID.
SORT OLD_TAB_REC_S ASCENDING
BY CASEID.
DELETE ADJACENT DUPLICATES FROM OLD_TAB_REC_S COMPARING CASEID.
SELECT
PD~/BIC/CASEID
PD~/BIC/PRODID
PD~/BIC/PROD_TYPE
FROM /BIC/APRODELIV00 as PD
INNER JOIN /BIC/PPRODID as P
ON P~/BIC/PRODID = PD~/BIC/PRODID
INTO TABLE PRODUCTDELIVERY_TAB
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
PD~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID.
SORT PRODUCTDELIVERY_TAB ASCENDING
BY CASEID.
DELETE ADJACENT DUPLICATES FROM PRODUCTDELIVERY_TAB COMPARING CASEID
.
LOOP AT RESULT_PACKAGE into istr_RP.
CLEAR TMP_OLD_INFO.
READ TABLE OLD_TAB_REC_S
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_OLD_INFO.
* BINARY SEARCH.
IF TMP_OLD_INFO-ORGOBJLINKID IS INITIAL or TMP_OLD_INFO-SVUSERID
IS INITIAL.
CLEAR TMP_NEW_INFO.
READ TABLE NEW_TAB_REC_S
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_NEW_INFO.
* BINARY SEARCH.
ENDIF.
* User - OrgUnit - Position
IF TMP_OLD_INFO-ORGOBJLINKID IS NOT INITIAL.
* TMP_OLD_INFO-INFOFLAG = 'Y'.
istr_RP-/BIC/USERID = TMP_OLD_INFO-USERID.
istr_RP-/BIC/ORGUNITID = TMP_OLD_INFO-ORGUNITID.
istr_RP-/BIC/POSITION = TMP_OLD_INFO-POSITION.
istr_RP-/BIC/OWNERORG = TMP_OLD_INFO-ORGOBJLINKID.
ELSE.
istr_RP-/BIC/USERID = TMP_NEW_INFO-USERID.
istr_RP-/BIC/ORGUNITID = TMP_NEW_INFO-ORGUNITID.
istr_RP-/BIC/POSITION = TMP_NEW_INFO-POSITION.
istr_RP-/BIC/OWNERORG = TMP_NEW_INFO-ORGOBJLINKID.
ENDIF.
* Supervisor
IF TMP_OLD_INFO-SVUSERID IS NOT INITIAL.
istr_RP-/BIC/SVUSERID = TMP_OLD_INFO-SVUSERID.
ELSE.
istr_RP-/BIC/SVUSERID = TMP_NEW_INFO-SVUSERID.
ENDIF.
* Productid - ProductType
IF TMP_OLD_INFO-PRODID IS NOT INITIAL.
istr_RP-/BIC/PRODID = TMP_OLD_INFO-PRODID.
istr_RP-/BIC/PROD_TYPE = TMP_OLD_INFO-PRODTYPE.
ELSE.
CLEAR TMP_PRODDEL_INFO.
READ TABLE PRODUCTDELIVERY_TAB
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_PRODDEL_INFO.
* BINARY SEARCH.
istr_RP-/BIC/PRODID = TMP_PRODDEL_INFO-PRODID.
istr_RP-/BIC/PROD_TYPE = TMP_PRODDEL_INFO-PRODTYPE.
* SHIFT TMP_NEW_INFO-USERID LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-ORGUNITID LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-POSITION LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-ORGOBJLINKID LEFT DELETING LEADING SPACE.
* IF STRLEN( TMP_NEW_INFO-USERID ) > 0 AND STRLEN(
*TMP_NEW_INFO-ORGUNITID ) > 0 AND STRLEN( TMP_NEW_INFO-POSITION )
* > 0.
* istr_RP-/BIC/CHINFST = 'Y'.
* ELSE.
* istr_RP-/BIC/CHINFST = 'N'.
* ENDIF.
* ELSE.
* istr_RP-/BIC/CHINFST = 'N'.
ENDIF.
* append the added lines to result
append istr_RP to itab_RP.
ENDLOOP.
refresh RESULT_PACKAGE.
move itab_RP[] to RESULT_PACKAGE[].
Hi there!
I'm having a problem with an transformation end routine and I'm new to ABAP so was hoping someone could help me.... I'm using BI 7.0.
I have a transformation which has direct mappings from a datasource to a DSO. I also have a view which selects data from three different DSO's. It then updates the current DSO in the end routine when a match occurs on the key.
I can see the data in the temporary structures and see that it is being added to the Result_package but for some reason it is not updating the 5 or so fields in the DSO data.
I can't see where the data is getting lost as in the debugger I can see it being passed through all along.
Here is my code:
Can anyone see if i'm missing something?
Thanks for your help!
TYPES: BEGIN OF G_REC_S,
CASEID TYPE /BIC/OICASEID,
USERID TYPE /BIC/OIUSERID,
ORGUNITID TYPE /BIC/OIORGUNITID,
POSITION TYPE /BIC/OIPOSITION,
SVUSERID TYPE /BIC/OIUSERID,
ORGOBJLINKID TYPE /BIC/OIOWNERORG,
INFOFLAG TYPE /BIC/OICHINFST,
PRODID TYPE /BIC/OIPRODID,
PRODTYPE TYPE /BIC/OIPROD_TYPE,
END OF G_REC_S.
TYPES: BEGIN OF PRODDEL_REC_S,
CASEID TYPE /BIC/OICASEID,
PRODID TYPE /BIC/OIPRODID,
PRODTYPE TYPE /BIC/OIPROD_TYPE,
END OF PRODDEL_REC_S.
DATA: TMP_OLD_INFO TYPE G_REC_S.
DATA: TMP_NEW_INFO TYPE G_REC_S.
DATA: TMP_PRODDEL_INFO TYPE PRODDEL_REC_S.
*DATA: itab_RP TYPE STANDARD TABLE OF _ty_s_TG_1.
*WITH HEADER LINE
*WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
*Structure Result Package
DATA: istr_RP TYPE _ty_s_TG_1.
*Table Result Package
DATA: itab_RP TYPE STANDARD TABLE OF _ty_s_TG_1 INITIAL SIZE 0.
DATA: LEN TYPE I.
DATA: INFODEFINED(1) TYPE C.
DATA: NEW_TAB_REC_S TYPE STANDARD TABLE OF G_REC_S INITIAL SIZE 0.
DATA: OLD_TAB_REC_S TYPE STANDARD TABLE OF G_REC_S INITIAL SIZE 0.
DATA: PRODUCTDELIVERY_TAB TYPE STANDARD TABLE OF PRODDEL_REC_S
INITIAL
SIZE 0.
*Take info from link tables (orgpos-userpos - ODS
SELECT
USERPOS~/BIC/CASEID as caseid
USERPOS~/BIC/USERID as userid
USERPOS~/BIC/ORGUNITID as orgunitid
USERPOS~/BIC/POSITION as position
USERSUPERVISOR~/BIC/USERID as svuserid
USERPOS~/BIC/OWNERORG as ORGOBJLINKID
"" as INFOFLAG
"" as prodid
"" as prodtype
FROM
ZORGUSERVIEW as USERPOS
LEFT JOIN
ZORGUSERVIEW as USERSUPERVISOR
ON USERSUPERVISOR~/BIC/CASEID = USERPOS~/BIC/CASEID AND
USERSUPERVISOR~/BIC/USERROLE = 'RT4'
*/BIC/AOWNERORG00 as ORGOBJ INNER JOIN
*/BIC/AUSER_POS00 as USERPOS
*ON USERPOS~/BIC/USERID = ORGOBJ~/BIC/USERID
*inner JOIN
*/BIC/AORG_POS00 as ORGPOS
*ON USERPOS~/BIC/POSITION = ORGPOS~/BIC/POSITION
INTO TABLE NEW_TAB_REC_S
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
USERPOS~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID
AND USERPOS~/BIC/USERROLE = 'RT1'.
SORT NEW_TAB_REC_S ASCENDING
BY ORGOBJLINKID.
DELETE ADJACENT DUPLICATES FROM NEW_TAB_REC_S COMPARING CASEID.
.
*Take info from Caseheader ODS
SELECT
CASEH~/BIC/CASEID
CASEH~/BIC/USERID
CASEH~/BIC/ORGUNITID
CASEH~/BIC/POSITION
CASEH~/BIC/SVUSERID
CASEH~/BIC/OWNERORG
CASEH~/BIC/CHINFST
CASEH~/BIC/PRODID
CASEH~/BIC/PROD_TYPE
FROM /BIC/ACASEHEAD00 as CASEH
INTO TABLE OLD_TAB_REC_S
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
CASEH~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID.
SORT OLD_TAB_REC_S ASCENDING
BY CASEID.
DELETE ADJACENT DUPLICATES FROM OLD_TAB_REC_S COMPARING CASEID.
SELECT
PD~/BIC/CASEID
PD~/BIC/PRODID
PD~/BIC/PROD_TYPE
FROM /BIC/APRODELIV00 as PD
INNER JOIN /BIC/PPRODID as P
ON P~/BIC/PRODID = PD~/BIC/PRODID
INTO TABLE PRODUCTDELIVERY_TAB
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE
PD~/BIC/CASEID = RESULT_PACKAGE-/BIC/CASEID.
SORT PRODUCTDELIVERY_TAB ASCENDING
BY CASEID.
DELETE ADJACENT DUPLICATES FROM PRODUCTDELIVERY_TAB COMPARING CASEID
.
LOOP AT RESULT_PACKAGE into istr_RP.
CLEAR TMP_OLD_INFO.
READ TABLE OLD_TAB_REC_S
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_OLD_INFO.
* BINARY SEARCH.
IF TMP_OLD_INFO-ORGOBJLINKID IS INITIAL or TMP_OLD_INFO-SVUSERID
IS INITIAL.
CLEAR TMP_NEW_INFO.
READ TABLE NEW_TAB_REC_S
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_NEW_INFO.
* BINARY SEARCH.
ENDIF.
* User - OrgUnit - Position
IF TMP_OLD_INFO-ORGOBJLINKID IS NOT INITIAL.
* TMP_OLD_INFO-INFOFLAG = 'Y'.
istr_RP-/BIC/USERID = TMP_OLD_INFO-USERID.
istr_RP-/BIC/ORGUNITID = TMP_OLD_INFO-ORGUNITID.
istr_RP-/BIC/POSITION = TMP_OLD_INFO-POSITION.
istr_RP-/BIC/OWNERORG = TMP_OLD_INFO-ORGOBJLINKID.
ELSE.
istr_RP-/BIC/USERID = TMP_NEW_INFO-USERID.
istr_RP-/BIC/ORGUNITID = TMP_NEW_INFO-ORGUNITID.
istr_RP-/BIC/POSITION = TMP_NEW_INFO-POSITION.
istr_RP-/BIC/OWNERORG = TMP_NEW_INFO-ORGOBJLINKID.
ENDIF.
* Supervisor
IF TMP_OLD_INFO-SVUSERID IS NOT INITIAL.
istr_RP-/BIC/SVUSERID = TMP_OLD_INFO-SVUSERID.
ELSE.
istr_RP-/BIC/SVUSERID = TMP_NEW_INFO-SVUSERID.
ENDIF.
* Productid - ProductType
IF TMP_OLD_INFO-PRODID IS NOT INITIAL.
istr_RP-/BIC/PRODID = TMP_OLD_INFO-PRODID.
istr_RP-/BIC/PROD_TYPE = TMP_OLD_INFO-PRODTYPE.
ELSE.
CLEAR TMP_PRODDEL_INFO.
READ TABLE PRODUCTDELIVERY_TAB
WITH KEY CASEID = istr_RP-/BIC/CASEID
INTO TMP_PRODDEL_INFO.
* BINARY SEARCH.
istr_RP-/BIC/PRODID = TMP_PRODDEL_INFO-PRODID.
istr_RP-/BIC/PROD_TYPE = TMP_PRODDEL_INFO-PRODTYPE.
* SHIFT TMP_NEW_INFO-USERID LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-ORGUNITID LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-POSITION LEFT DELETING LEADING SPACE.
* SHIFT TMP_NEW_INFO-ORGOBJLINKID LEFT DELETING LEADING SPACE.
* IF STRLEN( TMP_NEW_INFO-USERID ) > 0 AND STRLEN(
*TMP_NEW_INFO-ORGUNITID ) > 0 AND STRLEN( TMP_NEW_INFO-POSITION )
* > 0.
* istr_RP-/BIC/CHINFST = 'Y'.
* ELSE.
* istr_RP-/BIC/CHINFST = 'N'.
* ENDIF.
* ELSE.
* istr_RP-/BIC/CHINFST = 'N'.
ENDIF.
* append the added lines to result
append istr_RP to itab_RP.
ENDLOOP.
refresh RESULT_PACKAGE.
move itab_RP[] to RESULT_PACKAGE[].
2008 Apr 25 2:20 PM
In debugger mode i have noticed that an exception is thrown in 2 places...
a catch cx_rs_not_found.
Has anyone come across this before in a DSO update through end routine?
I've added the debugger pieces of code where the exception occurs.
Thanks
Nuala
==== 2. update hierarchy in main memory ============
data l_r_cursor type ref to cl_rsbm_log_component.
try.
l_r_cursor = get_child( ).
do.
l_r_cursor = l_r_cursor->get_next( ).
enddo.
catch cx_rs_not_found.
endtry.
* === 2. go to last step ====
try.
do.
o_r_log = o_r_log->get_next( ).
enddo.
catch cx_rs_not_found.
endtry.
check not o_r_log->get_nodetype( ) = rsbm_c_nodetype-process_step.
r_r_log_step ?= o_r_log.
endmethod.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |