Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

   "in case there isnt any limit, set it to 100

    IF LV_PAGE IS INITIAL.
      LV_PAGE = 100.
      MV_SELECT_MAX = LV_PAGE + IO_TECH_REQUEST_CONTEXT->GET_SKIP( ) + IO_T
ECH_REQUEST_CONTEXT->GET_TOP( ) + 10.
    ELSE.
      MV_SELECT_MAX = LV_PAGE + IO_TECH_REQUEST_CONTEXT->GET_SKIP( ) + IO_T
ECH_REQUEST_CONTEXT->GET_TOP( ) + 10.
    ENDIF.

* - Retrieve data from database ---------------------------------------
* - incase count is asked for
    IF IO_TECH_REQUEST_CONTEXT->HAS_COUNT( ) = ABAP_TRUE.
      ES_RESPONSE_CONTEXT-COUNT = GET_BP_NUM_GUID_COUNT( ).
      RETURN.

    ELSE.
      CLEAR ES_RESPONSE_CONTEXT-INLINECOUNT.
    ENDIF.

    "read requested filters
    "fetch data from DB's
    "Send if according to requested filters
    IF LINES( MT_FILTERS_ALL ) GE 1.
      GET_BP_NUM_GUID( ).

      "incase there were some issues with authorizations

      CLEAR LT_PARTNER_SELOP.
      SORT LT_GUIDS ASCENDING.
      LOOP AT MT_PARTNER_NUM_GUID ASSIGNING FIELD-SYMBOL(<FS_PARTNER>).
        LT_PARTNER_SELOP = VALUE #( BASE LT_PARTNER_SELOP ( SIGN = 'I' OPTI
ON = 'EQ' LOW = <FS_PARTNER>-PARTNER )  ).
      ENDLOOP.

      SELECT DISTINCT
        BP~PARTNER,
        BP~PARTNER_GUID,
        BP~SOURCE,
        BP~AUGRP,
        BP~BPEXT,
        BP~TITLE,
        BP~NAME_FIRST,
        BP~NAME_LAST,
        BP~NAME_LAST2,
        BP~NAMEMIDDLE,
        BP~NAME_LST2,
        BP~TITLE_ACA1,
        BP~TITLE_ROYL,
        BP~INITIALS,
        BP~LANGU_CORR,
        BP~BIRTHDT,
        BP~NAMCOUNTRY,
        YBP~YSUFFIX ,
        YBP~YCOMPANY1,
        YBP~YOCCUPATION,
        YBP~YRESP_SAL_DEALER,
        YBP~YRESP_SRC_DEALER,
        YBP~YRSALESP,
        YBP~YRSERVP,
        CONNECT~YY_PORSCHE_ID_UC,
        VEHICLE~YYVIN,
        VEHICLE~YYLICENCEPLATE,
        EMAIL~SMTP_ADDR,
        TELEPHONE~TELNR_LONG,
        IMPORTER~IMP_NUMBER,
        COMMLINK~ADDRNUMBER
            FROM  BUT000 AS BP
            INNER JOIN YIMPORTER AS IMPORTER ON IMPORTER~AUGRP_CUST = BP~AU
GRP
            LEFT OUTER JOIN YBPARTNER AS YBP ON BP~PARTNER_GUID = YBP~PAREN
T_ID
            LEFT OUTER JOIN YCRMA3000_PCC AS CONNECT ON BP~PARTNER_GUID = C
ONNECT~PARENT_ID
            LEFT OUTER JOIN YVEH_ALL AS VEHICLE ON BP~PARTNER = VEHICLE~YYC
USTOMER
            LEFT OUTER JOIN ADR6 AS EMAIL ON BP~ADDRCOMM = EMAIL~ADDRNUMBER
            LEFT OUTER JOIN BUT020 AS COMMLINK ON BP~PARTNER = COMMLINK~PAR
TNER
            LEFT OUTER JOIN ADR2 AS TELEPHONE ON COMMLINK~ADDRNUMBER = TELE
PHONE~ADDRNUMBER
            LEFT OUTER JOIN ADR2 AS MOBILE ON BP~ADDRCOMM = MOBILE~ADDRNUMB
ER
            UP TO @MV_SELECT_MAX ROWS INTO TABLE @DATA(LT_RESULTS) WHERE BP
~PARTNER IN @LT_PARTNER_SELOP.

      DELETE ADJACENT DUPLICATES FROM LT_RESULTS COMPARING PARTNER.

      IF LINES( LT_RESULTS ) GT MV_SELECT_MAX AND IS_PAGING IS INITIAL.
        LS_PAGING-TOP = MV_SELECT_MAX.

        CALL METHOD /IWBEP/CL_MGW_DATA_UTIL=>PAGING
          EXPORTING
            IS_PAGING = LS_PAGING
          CHANGING
            CT_DATA   = LT_RESULTS.

      ENDIF.

    ELSE.
**********************************************************************
      SELECT SINGLE IS_ACTIVE FROM CRM_ACE_USERS
        INTO @DATA(LV_ACTIVE)
        WHERE USR_NAME = @SY-UNAME.
      SELECT SINGLE * FROM CRM_ACE_USER_OTS
        INTO @DATA(LS_OTS)
        WHERE USR_NAME = @SY-UNAME
        AND CRM_OBJECT_TYPE = 'ACCOUNTCRM'.
      IF LV_ACTIVE = ABAP_TRUE AND SY-SUBRC = 0.
        "Get Accounts using SalesOrg as a filter

        SELECT DISTINCT BP~PARTNER, BP~PARTNER_GUID INTO TABLE @LT_PARTNER 
UP TO @MV_SELECT_MAX ROWS
            FROM  BUT000 AS BP
            INNER JOIN YIMPORTER AS IMPORTER ON IMPORTER~AUGRP_CUST = BP~AU
GRP
            INNER JOIN CRM_ACE2_BP_ACL AS ACL ON ACL~OBJECT_GUID = BP~PARTN
ER_GUID
            INNER JOIN CRM_ACE2_BP_GRP AS GRP ON ACL~ACEGROUP_ID = GRP~ACEG
ROUP_ID
            INNER JOIN CRM_ACE2_BP_UCT AS UCT ON GRP~ACEGROUP_ID = UCT~ACEG
ROUP_ID
                WHERE
                  IMPORTER~MAIN_IMPORTER EQ @ABAP_TRUE AND
                  ( BP~BPKIND EQ @YIF_CRMA5627_API_BP~BP_KIND_CUSTOMER OR B
P~BPKIND EQ @YIF_CRMA5627_API_BP~BP_KIND_PROSPECT ) AND
                  BP~XDELE EQ @ABAP_FALSE
                  AND UCT~USR_NAME = @SY-UNAME
          ORDER BY BP~PARTNER.

        DELETE ADJACENT DUPLICATES FROM LT_PARTNER COMPARING PARTNER.

        CLEAR LT_PARTNER_SELOP.
        LOOP AT LT_PARTNER ASSIGNING <FS_PARTNER>.
          LT_PARTNER_SELOP = VALUE #( BASE LT_PARTNER_SELOP ( SIGN = 'I' OP
TION = 'EQ' LOW = <FS_PARTNER>-PARTNER )  ).
        ENDLOOP.

        SELECT DISTINCT
        BP~PARTNER,
        BP~PARTNER_GUID,
        BP~SOURCE,
        BP~AUGRP,
        BP~BPEXT,
        BP~TITLE,
        BP~NAME_FIRST,
        BP~NAME_LAST,
        BP~NAME_LAST2,
        BP~NAMEMIDDLE,
        BP~NAME_LST2,
        BP~TITLE_ACA1,
        BP~TITLE_ROYL,
        BP~INITIALS,
        BP~LANGU_CORR,
        BP~BIRTHDT,
        BP~NAMCOUNTRY,
        YBP~YSUFFIX ,
        YBP~YCOMPANY1,
        YBP~YOCCUPATION,
        YBP~YRESP_SAL_DEALER,
        YBP~YRESP_SRC_DEALER,
        YBP~YRSALESP,
        YBP~YRSERVP,
        CONNECT~YY_PORSCHE_ID_UC,
        VEHICLE~YYVIN,
        VEHICLE~YYLICENCEPLATE,
        EMAIL~SMTP_ADDR,
        TELEPHONE~TELNR_LONG,
        IMPORTER~IMP_NUMBER,
        COMMLINK~ADDRNUMBER
            FROM  BUT000 AS BP
            INNER JOIN YIMPORTER AS IMPORTER ON IMPORTER~AUGRP_CUST = BP~AU
GRP
            LEFT OUTER JOIN YBPARTNER AS YBP ON BP~PARTNER_GUID = YBP~PAREN
T_ID
            LEFT OUTER JOIN YCRMA3000_PCC AS CONNECT ON BP~PARTNER_GUID = C
ONNECT~PARENT_ID
            LEFT OUTER JOIN YVEH_ALL AS VEHICLE ON BP~PARTNER = VEHICLE~YYC
USTOMER
            LEFT OUTER JOIN ADR6 AS EMAIL ON BP~ADDRCOMM = EMAIL~ADDRNUMBER
            LEFT OUTER JOIN BUT020 AS COMMLINK ON BP~PARTNER = COMMLINK~PAR
TNER
            LEFT OUTER JOIN ADR2 AS TELEPHONE ON COMMLINK~ADDRNUMBER = TELE
PHONE~ADDRNUMBER
            LEFT OUTER JOIN ADR2 AS MOBILE ON BP~ADDRCOMM = MOBILE~ADDRNUMB
ER
            INTO TABLE @LT_RESULTS WHERE BP~PARTNER IN @LT_PARTNER_SELOP.

        DELETE ADJACENT DUPLICATES FROM LT_RESULTS COMPARING PARTNER.

        IF LINES( LT_RESULTS ) GT MV_SELECT_MAX AND IS_PAGING IS INITIAL.
          LS_PAGING-TOP = MV_SELECT_MAX.

          CALL METHOD /IWBEP/CL_MGW_DATA_UTIL=>PAGING
            EXPORTING
              IS_PAGING = LS_PAGING
            CHANGING
              CT_DATA   = LT_RESULTS.

        ENDIF.

      ELSE.

        SELECT DISTINCT BP~PARTNER, BP~PARTNER_GUID INTO TABLE @LT_PARTNER 
UP TO @MV_SELECT_MAX ROWS
           FROM  BUT000 AS BP
           INNER JOIN YIMPORTER AS IMPORTER ON IMPORTER~AUGRP_CUST = BP~AUG
RP
               WHERE
                 IMPORTER~MAIN_IMPORTER EQ @ABAP_TRUE AND
                 ( BP~BPKIND EQ @YIF_CRMA5627_API_BP~BP_KIND_CUSTOMER OR BP
~BPKIND EQ @YIF_CRMA5627_API_BP~BP_KIND_PROSPECT ) AND
                 BP~XDELE EQ @ABAP_FALSE
         ORDER BY BP~PARTNER.
        DELETE ADJACENT DUPLICATES FROM LT_PARTNER COMPARING PARTNER.

        LOOP AT LT_PARTNER ASSIGNING <FS_PARTNER>.
          LT_PARTNER_SELOP = VALUE #( BASE LT_PARTNER_SELOP ( SIGN = 'I' OP
TION = 'EQ' LOW = <FS_PARTNER>-PARTNER )  ).
        ENDLOOP.

        SELECT DISTINCT
        BP~PARTNER,
        BP~PARTNER_GUID,
        BP~SOURCE,
        BP~AUGRP,
        BP~BPEXT,
        BP~TITLE,
        BP~NAME_FIRST,
        BP~NAME_LAST,
        BP~NAME_LAST2,
        BP~NAMEMIDDLE,
        BP~NAME_LST2,
        BP~TITLE_ACA1,
        BP~TITLE_ROYL,
        BP~INITIALS,
        BP~LANGU_CORR,
        BP~BIRTHDT,
        BP~NAMCOUNTRY,
        YBP~YSUFFIX ,
        YBP~YCOMPANY1,
        YBP~YOCCUPATION,
        YBP~YRESP_SAL_DEALER,
        YBP~YRESP_SRC_DEALER,
        YBP~YRSALESP,
        YBP~YRSERVP,
        CONNECT~YY_PORSCHE_ID_UC,
        VEHICLE~YYVIN,
        VEHICLE~YYLICENCEPLATE,
        EMAIL~SMTP_ADDR,
        TELEPHONE~TELNR_LONG,
        IMPORTER~IMP_NUMBER,
        COMMLINK~ADDRNUMBER
            FROM  BUT000 AS BP
            INNER JOIN YIMPORTER AS IMPORTER ON IMPORTER~AUGRP_CUST = BP~AU
GRP
            LEFT OUTER JOIN YBPARTNER AS YBP ON BP~PARTNER_GUID = YBP~PAREN
T_ID
            LEFT OUTER JOIN YCRMA3000_PCC AS CONNECT ON BP~PARTNER_GUID = C
ONNECT~PARENT_ID
            LEFT OUTER JOIN YVEH_ALL AS VEHICLE ON BP~PARTNER = VEHICLE~YYC
USTOMER
            LEFT OUTER JOIN ADR6 AS EMAIL ON BP~ADDRCOMM = EMAIL~ADDRNUMBER
            LEFT OUTER JOIN BUT020 AS COMMLINK ON BP~PARTNER = COMMLINK~PAR
TNER
            LEFT OUTER JOIN ADR2 AS TELEPHONE ON COMMLINK~ADDRNUMBER = TELE
PHONE~ADDRNUMBER
            LEFT OUTER JOIN ADR2 AS MOBILE ON BP~ADDRCOMM = MOBILE~ADDRNUMB
ER
            INTO TABLE @LT_RESULTS WHERE BP~PARTNER IN @LT_PARTNER_SELOP.

        DELETE ADJACENT DUPLICATES FROM LT_RESULTS COMPARING PARTNER.

        "if entries are more than 100 take care of it
        IF LINES( LT_RESULTS ) GT MV_SELECT_MAX AND IS_PAGING IS INITIAL.
          LS_PAGING-TOP = MV_SELECT_MAX.

          CALL METHOD /IWBEP/CL_MGW_DATA_UTIL=>PAGING
            EXPORTING
              IS_PAGING = LS_PAGING
            CHANGING
              CT_DATA   = LT_RESULTS.

        ENDIF.
      ENDIF.

**********************************************************************
*      LOOP AT LT_PARTNER_FINAL INTO LS_PARTNER.
*        TRY.
*            LS_SINGLE_BP_ENTITY = ME->BP_GET_ENTITY( EXPORTING IV_BP_ID 
= LS_PARTNER-PARTNER ).
*            APPEND LS_SINGLE_BP_ENTITY TO ET_ENTITYSET.
*        ENDTRY.
*      ENDLOOP.
    ENDIF.

    IF IS_PAGING IS NOT INITIAL.
      "skip & top
      CALL METHOD /IWBEP/CL_MGW_DATA_UTIL=>PAGING
        EXPORTING
          IS_PAGING = IS_PAGING
        CHANGING
          CT_DATA   = LT_RESULTS.
    ENDIF.
    IF IT_ORDER IS NOT INITIAL.
      "order by
      CALL METHOD /IWBEP/CL_MGW_DATA_UTIL=>ORDERBY
        EXPORTING
          IT_ORDER = IT_ORDER
        CHANGING
          CT_DATA  = LT_RESULTS.
    ENDIF.

** $inlinecount query option for all count entries.
    IF IO_TECH_REQUEST_CONTEXT->HAS_INLINECOUNT( ) = ABAP_TRUE.
      ES_RESPONSE_CONTEXT-INLINECOUNT = LINES( LT_RESULTS ).
    ELSE.
      CLEAR ES_RESPONSE_CONTEXT-INLINECOUNT.
    ENDIF.
    "assemble partners
    LOOP AT LT_RESULTS ASSIGNING FIELD-SYMBOL(<FS_RESULTS>).
      LT_SELOP = VALUE #( BASE LT_SELOP ( SIGN = 'I' OPTION = 'EQ' LOW = <F
S_RESULTS>-PARTNER )  ).
      LT_SELOP_COMP = VALUE #( BASE LT_SELOP_COMP ( SIGN = 'I' OPTION = 'EQ
' LOW = <FS_RESULTS>-PARTNER_GUID )  ).
    ENDLOOP.
    "get customer status
    GET_CUSTOMER_STATUS( LT_SELOP ).
    "get company name
    GET_COMPANY_NAME( LT_SELOP_COMP ).
    "get language
    SELECT MANDT,LAND1,INTCA FROM T005 INTO TABLE @DATA(LT_LANG).

    SORT MT_CUST_STATUS ASCENDING BY PARTNER.
    SORT MT_COMPANY_NAME ASCENDING BY ADDRN.

    "add data for a Trip
    LOOP AT LT_RESULTS ASSIGNING FIELD-SYMBOL(<FS_TABLE>).
      READ TABLE MT_CUST_STATUS ASSIGNING FIELD-SYMBOL(<FS_CUST_STATUS>) WI
TH KEY PARTNER = <FS_TABLE>-PARTNER BINARY SEARCH.
      READ TABLE MT_COMPANY_NAME ASSIGNING FIELD-SYMBOL(<FS_COMPANY>) WITH 
KEY ADDRN = <FS_TABLE>-ADDRNUMBER BINARY SEARCH.
      IF  <FS_TABLE>-NAMCOUNTRY IS NOT INITIAL.
        READ TABLE LT_LANG ASSIGNING FIELD-SYMBOL(<FS_LANG>) WITH KEY LAND1 
= <FS_TABLE>-NAMCOUNTRY BINARY SEARCH.
      ENDIF.

      APPEND INITIAL LINE TO ET_ENTITYSET ASSIGNING FIELD-
SYMBOL(<FS_ENTITYSET>).
      <FS_ENTITYSET>-BUSINESSPARTNERID          = <FS_TABLE>-PARTNER.
      <FS_ENTITYSET>-AUTHGROUP                  = <FS_TABLE>-AUGRP.
      <FS_ENTITYSET>-NAMEFIRST                  = <FS_TABLE>-NAME_FIRST.
      <FS_ENTITYSET>-NAMELAST                   = <FS_TABLE>-NAME_LAST.
      <FS_ENTITYSET>-NAMEMIDDLE                 = <FS_TABLE>-NAMEMIDDLE.
      <FS_ENTITYSET>-DATEOFBIRTH                = <FS_TABLE>-BIRTHDT.
      <FS_ENTITYSET>-EMAILADDRESS               = <FS_TABLE>-SMTP_ADDR.
      IF <FS_COMPANY> IS ASSIGNED.
        <FS_ENTITYSET>-COMPANYNAME1               = <FS_COMPANY>-COMPANY.
      ENDIF.
      <FS_ENTITYSET>-CORRESPONDENCELANG         = <FS_TABLE>-LANGU_CORR.
      <FS_ENTITYSET>-INITIALS                   = <FS_TABLE>-INITIALS.
      <FS_ENTITYSET>-EXTERNALID                 = <FS_TABLE>-BPEXT.
      IF <FS_LANG> IS ASSIGNED.
        <FS_ENTITYSET>-LANGUAGE                   = <FS_LANG>-INTCA.
      ENDIF.
      <FS_ENTITYSET>-TITLE                      = <FS_TABLE>-TITLE.
      <FS_ENTITYSET>-LICENCEPLATE               = <FS_TABLE>-
YYLICENCEPLATE.
      <FS_ENTITYSET>-PORSCHEID                  = <FS_TABLE>-
YY_PORSCHE_ID_UC.
      <FS_ENTITYSET>-VEHICLEIDENTIFICATION      = <FS_TABLE>-YYVIN.
      <FS_ENTITYSET>-NAMEBIRTH                  = <FS_TABLE>-NAME_LST2.
      <FS_ENTITYSET>-NAMELASTOTHER              = <FS_TABLE>-NAME_LAST2.
      <FS_ENTITYSET>-MOBILENUMBER               = <FS_ENTITYSET>-
MOBILENUMBER.
      <FS_ENTITYSET>-TELEPHONENUMBER            = <FS_TABLE>-TELNR_LONG.
      <FS_ENTITYSET>-TITLEACA1                  = <FS_TABLE>-TITLE_ACA1.
      <FS_ENTITYSET>-TITLEROYAL                 = <FS_TABLE>-TITLE_ROYL.
      <FS_ENTITYSET>-RESPONSIBLESALESDEALERID   = <FS_TABLE>-
YRESP_SAL_DEALER.
      <FS_ENTITYSET>-RESPONSIBLESALESPERSONID   = <FS_TABLE>-YRSALESP.
      <FS_ENTITYSET>-RESPONSIBLESERVICEDEALERID = <FS_TABLE>-
YRESP_SRC_DEALER.
      <FS_ENTITYSET>-RESPONSIBLESERVICEPERSONID = <FS_TABLE>-YRSERVP.
      <FS_ENTITYSET>-SOURCE                     = <FS_TABLE>-SOURCE.
      <FS_ENTITYSET>-PAGIMPORTERID              = <FS_TABLE>-IMP_NUMBER.
      <FS_ENTITYSET>-SUFFIX                     = <FS_TABLE>-YSUFFIX.
      <FS_ENTITYSET>-OCCUPATION                 = <FS_RESULTS>-YOCCUPATION.

      IF <FS_CUST_STATUS> IS ASSIGNED.
        <FS_ENTITYSET>-CUSTOMERSTATUS = <FS_CUST_STATUS>-STATUS.
      ENDIF.
      ME->GET_HASH( CHANGING CS_ENTITY = <FS_ENTITYSET>
                    EXCEPTIONS NO_HASH_CALC = 1 ).
    ENDLOOP.

You might also like