Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Abap end routine

Former Member
0 Likes
633

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[].


1 REPLY 1
Read only

Former Member
0 Likes
461

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.