0% found this document useful (0 votes)
61 views8 pages

IF Is Initial

The document contains code for querying a database to retrieve partner data. It sets parameters like the page size, reads any filters, performs multiple SELECT statements to fetch the data from various tables, joins the results, handles pagination if needed, and returns the results. Authorization checks are also performed to filter the data for the current user.

Uploaded by

Asif Nazir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views8 pages

IF Is Initial

The document contains code for querying a database to retrieve partner data. It sets parameters like the page size, reads any filters, performs multiple SELECT statements to fetch the data from various tables, joins the results, handles pagination if needed, and returns the results. Authorization checks are also performed to filter the data for the current user.

Uploaded by

Asif Nazir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 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