Want to know the background settings while schduling an Infopackage

Hi,
I need to know where do we find the settings that we make in the background scheduling of a  infopackage, Like the report's background settings will be stored in TBTCO table.
Thanks In Advance.

Hi Jeeva,
The settings are stored in the table RSBATCHPARALLEL and RSBATCHSERVER.
The data request can be scheduled once or periodically. Here, periodically means
that you determine the cycle in which the data is to be scheduled in the background
job (hourly, daily, weekly, monthly, or over other periods). You have the option to
start the data request immediately, on a particular date, at a particular time, after
a job, after an event or in a particular operation mode.
If you still want more tables releated to this here you goo
RSBATCHADM                     Administration Settings for Batch Mananger
RSBATCHCTRL                    BW Batch Management - Control Table      
RSBATCHCTRL_PAR                BW Batch Management - Control Table      
RSBATCHDATA                    Copy of INDX for Batch and Enqueue Runtime
RSBATCHDEBUG                   Debugging of Batch Processes for the Batch
RSBATCHDEBUGTYPE               Process Types for which Batch and Debug
RSBATCHDEBUGVAL                Debugging of Batch Processes - Variable Li
RSBATCHDEBUGWAIT               Waiting Processes for Batch Manager to Be
RSBATCHDELDATA                 Scheduled Deletions for Automatic Deletion
RSBATCHENQ                     Pure Enqueue Table for the Batch Manager 
RSBATCHHEADER                  BW Batch Management - Header Table
RSBATCHLOGSTAT                 Store Statistics for Analyze Table on rsba
RSBATCHLOGWRITE                Store Log Handle for slg1 Write in Batch 
RSBATCHPARALLEL                Control Parallel Batch Processes         
RSBATCHPROT                    BW Batch Management - Log Table          
RSBATCHSERVER                  Server Selection for Parallel Batch Proces
RSBATCHSTACK                   BW Batch Management - Caller Stack of Star
RSBATCHWAITVAL                 Debugging of Batch Processes
Pleasure answering your question.
Santosh Nagaraj
Edited by: Santosh Nagaraj on Aug 4, 2009 2:20 PM

Similar Messages

  • How do i connect my macbook pro to another screen (a fujitsu siemens) i got the cable for it but i want to know the settings so i transfer desc to the fujitsu screen.

    How do i connect my macbook pro to another screen (a fujitsu siemens) i got the cable for it but i want to know the settings so i transfer desc to the fujitsu screen.

    Welcome to Apple Support Communities
    If you have the cable, just connect it to both and the desktop will show up on the external display. Then, you can select different modes, changing arrangement in System Preferences > Displays > Arrangement, or using shortcuts > http://support.apple.com/kb/ht5019

  • I want to know the difference between Days column and Day1 Column

    Hi All,
    I used this query:
    SELECT to_char(return_date_time,'dd/mon/yyyy hh24:mi:ss') Test,
    DECODE ('I', 'I', DECODE (1, NULL, NULL, 0, NULL, SYSDATE + 1)) Days,
    DECODE ('I', 'I', SYSDATE + 1) Day1
    FROM fm_curr_locn
    WHERE patient_id = 'DU00002765'
    output: 
    Test
    Days
    Day1
    26/oct/2013 00:00:00
    26-OCT-13
    10/26/2013 3:06:59 PM
    I want to know the difference between Days column and Day1 column and why the days column didnt show the time
    Please anyone help.....
    Regards
    Shagar M

    Pleiadian wrote:
    It is the decode statement that is doing this.
    The format of decode is:
    decode(expression, search1, result1, search2, result2, searchn, resultn, default)
    All result fields must be of the same datatype and will be of the datatype of the first result (result1 in this example)
    In your example (the decode for the field Days) the first result is a NULL. I suspect (gurus? anyone?) that Oracle will use the varchar2 overload of the decode statement, and the date field will be converted to varchar2 using your NLS_DATE_FORMAT settings.
    In the second decode statment (Day1) the first result is of datatype date, so the result of the decode statement will be a date field (and will be parsed as such by your sql development tool)
    I agree, as NULL is the first result returned the datatype is undetermined, so Oracle is picking VARCHAR2 over others, and causing an implicit datatype conversion on the resultant date value, whereas the other which is returned as a date will use the local settings of the client tool being used.
    I can replicate the 'issue' in Toad, and it's rectified if we cast the first returned value of the decode statement...
    SELECT DECODE ('I', 'I', DECODE (1, NULL, CAST(NULL AS DATE), 0, NULL, SYSDATE + 1)) Days,
           DECODE ('I', 'I', SYSDATE + 1) Day1
    FROM dual

  • Want to change the Background Color of Selected Tab

    Hi All,
    I want to change the Background Color of Selected Tab of the tabstrip visible in Content Admin Role (Browse, Overview etc.).
    I have changed the Background Color of Selected Tab - Tabstrips-Complex Elements through Theme Editor, but that did not take effect.
    Only the other webdynpro components tabstrips took effect.
    Regards,
    Vishal

    Hi Andre,
    I don't know if you have already figured out how to change the background color of the tabstrip, but I will explain how we have done it.
    You might have tried to change the background color in "Tabstrip" (under the menu "Complex Elements") in Theme Editor. When you change the property "Background color of selected/unselected tabs", this will not change the color of the images on the tabstrip (ex. the triangle on the side of the tab). These images are on the server. We copied these images and then made changes to them, before we uploaded them again through the Theme Editor.
    The path to find the images is /usr/sap/~/JC01/j2ee/cluster/server0/apps/sap.com/irj/servlet_jsp/irj/root/portalapps/com.sap.design.urdesigndata/themes/portal/the name of your theme/common/tablist
    If this didn't work for you, you might have to change the properties in "Pattern Containers" (under Complex Elements") in Theme Editor. The tablist properties are under the header "Tab Container".
    I think it should work for you then. We also found that there was some problems when we tried to view the changes in Firefox, but haven't figured out how to solve this.
    /Ellen

  • Want to know the number of lines executed in my code

    Hi,
        I want to know the total number of lines of code executed by Flex in my application which includes the code generated while converting mxml to .as .Like for example with help of Trace class.

    Hi,
    Please go through following links which i am providing :
    1) http://www.adobe.com/devnet/flash-builder/articles/ascode-coverage.html
    2) http://opensource.adobe.com/wiki/display/flexpmd/FlexPMD
    3) http://opensource.adobe.com/wiki/display/flexpmd/FlexMetrics
    Thanks and Regards,
    Vibhuti Gosavi | [email protected] | www.infocepts.com

  • We want to know the reason that the compression package is bigger than planned.

    We have made a game by using the engine of Unity. It is 38M in the local compression which art resources accounted for 20M while sound accounting for 1.3M。
    when the game is released, we set the Universal armv6 + armv7 (OpenGL ES1.1 +2.0) option in the Target Platform parameters, we also set the Disabled options in the Stripping Level parameter, and the Fast but no Exceptions option in the  Script Call Optimization parameters. But the final product package published in the appstore is 66.8M. We want to know the reason that the compression package is bigger than planned.
    Thank you.

    You probably want to post in the Developers forum area.

  • Want to know the job of 20k1 Audio Processor on X-Fi Cards

    :Want to know the job of 20k Audio Processor on X-Fi Cards? <!-- [endif] -->
    <p class="MsoNormal">X-Fi Processor claimed as world?s most powerful audio processor. i.e. 0,000 MIPS.
    <p class="MsoNormal">This speed is more than the central processor.
    <p class="MsoNormal">If most of X-Fi cards does not have decoding capabilities, for what this much of processing power is required for audio reproduction.
    <p class="MsoNormal">Is this just a manufacturer?s advertisement to exaggerate about the product?
    <p class="MsoNormal">AFAIK, CMSS-3D, 24-bit crystallizer does not require much processing power, if it were required then creative Mp3 players, Xtreme audio, Xtreme notebooks would not have the crystallizer feature.
    <p class="MsoNormal">?
    <p class="MsoNormal">Coming to Games, Direct X engine also does not require more power because to just run the Direct X API on Direct X engine, this much power is not required.
    <p class="MsoNormal">?
    <p class="MsoNormal">Thanks,
    <p class="MsoNormal">Ravi Sankar

    A. owh nice answer mister guru DWH well bout DAC well...i comparing recording 48 khz and 96khz 24 bit cannot hear much diffrent cuz the result sound same and exact like from sources but with sounforges i push the limit 92 khz the result diffrent ( but sometimes i suspicious this card have built in compresor inside it to minimize peak)
    about compressor built in : ok its really confuse for a while cuz sometimes the sound not kick off but while reach -6 /-3 db the sound kickin somehow
    comparing with HD realtek on my notebook asus x5rl
    well i experimenting using reaper theres an option 64bit mix wave which i realize HD meaning 64 bit
    if i turn off 64 bit option mix then i feel the sound not becoming HD in this soundblaster < thats i think which something getin losing
    B. well about software FX? i think all soundcard have a mixer software features like reverbing / echo / equlizer builtin decoder console
    i dont know is it FX console u talk bout it is the way optional mixer console whichs is already builtin inside the chipset or not? but if the FX u talkin bout is from console and as a trademark , i dont think thats a reall big surprise for me
    becuz i dont wanna mess my project mixing song eq coloring when i recording or playbacking using those FX from console such put crystalize/3D room / reverbing
    infact while i recording again / making mix tapes > there only fx i see on that console whois really effecting the recording result such echos, any EQ or Crystalize i dont think really effecting the recording from input DAC, the question is do i need this echos?
    cuz while i using profesionnal software music programe for composing i can use mixer EQ event surround 5. option from the software rather than using from a console
    but then with this 5. card output that i have in this usb card i think is good idea to make a project making surround sounding via 5. speaker / but is there any 5. speaker profesional compatibles with this card sinces i read some ppl complaining bout uncompabtibles speaker connecting to this card?
    which i know if i buy some other profesional card event digidesign prootools card/ alesis or else i cant put 5. soundsystem speaker directyly from the card
    but then is come back to the reallity do the disco club already use surround 5. or maybe 7. soundsystem or not
    becuz i still know they just using a MONO soundsystem setup some of them LOL
    C. owh ok i got it this card chipset cannot act like a micro controller or maybe some kinda intelegent CPU to makes VST worx cuz i know some other product already making some kinda CPU external as VST plugins generator so the CPU desktop / notebook dont have to working hard again to act as VST
    thnx
    PS: when fresh driver for this card goin be done, since till now i still use driver plug n play detect from windows xp to avoid bugs and BSOD, and then somehow i googles in internet i found PAX driver version but still cannot hold 96khz or 92 khz? via asio
    can u make a lighter console? everytimes i put console somehow its pop up so heavy , page 2 pages so heavy

  • Want to know the size of Session Object

    Hi,
    There are around 100 objects stored in my application session.i want to know the size of Session object.
    For this i perform the following code:
    Enumeration enu=request.getSession().getAttributeNames();
    int i=0;
                   Object obj=null;
                   while(enu.hasMoreElements())
    String obj_name=(String)enu.nextElement();
                        long MemoryBefore=Runtime.getRuntime().freeMemory();
                        obj=new Object();
                        obj=(request.getSession().getAttribute(obj_name));
                        long MemoryAfter=Runtime.getRuntime().freeMemory();
                        obj.getClass().getName();
                        obj=null;
         System.out.prinltn(Session Attr Variable ::: "+obj_name +" and Size :"+(MemoryAfter-MemoryBefore));
                             i++;
    But each time i get size 0

    Anurag_Tripathi wrote:
    Hi,
    There are around 100 objects stored in my application session.i want to know the size of Session object.
    For this i perform the following code:First, that code makes no sense. Second, I highly recommend using a [Java profiler|http://www.google.com/search?q=java+profiler] to measure your application's performance. It will be much easier than trying to cobble together code to do this on your own.
    ~

  • I want to know the function moulde used to convert the unit of measure

    The whole process should be done in the Portugues login language.
    For the login language PT( Portuguese). In table MARA, if i choose the menu settings-> use parameters-> and chek this field (conversion field exit) . Then for any material if i check the unit of measure (MEINS), is display of all the material its shows differently, but if i select one material and see all the fields of that material, the MEINS field is changed. For example when all the materials are show the MEINS is ST. but when i select one material and display it . it shows PEC in portugues language.
    I want to know the function moulde used to convert the unit of measure

    HI,
    There exits the conversion routine for that particular field in its domain level..
    copy that conversion routine and search for that in SE37 your conversion routine
    you will find the function module this gives you the internal and external formats
    Fms are listed below for MEINS
    CONVERSION_EXIT_CUNIT_INPUT    Conversion exit for commercial (3-char) measurement unit INPUT
    CONVERSION_EXIT_CUNIT_OUTPUT   Conversion exit for commercial (3-char) measurement unit OUTPUT
    For convertiung quantity into base unit of measure you can do this way
    CALL FUNCTION 'ME_CONVERSION_MEINS'                       "#EC *
        EXPORTING
          i_matnr             = "give material number"
          i_mein1             = "Unit of measurement "
          i_meins             = "base unit of measure
          i_menge             = "quantity
        IMPORTING
          menge               = "quantioty in your required measurement
        EXCEPTIONS
          error_in_conversion       = 1
          no_success                = 2
          OTHERS                    = 3.
    HOpe this helps you
    Reward if useful
    regards,
    nazeer
    Message was edited by:
            nazeer shaik

  • U rgent:"i want to know the work of this "conversion routine".

    Hi all,
    In the domain of any field in the  database table there is one option called "conversion routine" just below to "output list".
    i want to know the work of this "conversion routine".
    can any one please tell me the practical use of this with  real time example.
    good points will be rewarded for helpful answer.
    thanks in advance
    Message was edited by:
            tapu abap

    Hi,
    REPORT  ZTEST.
    TYPES: UPC_YS_API_CHASEL_T TYPE STANDARD TABLE OF UPC_YS_API_CHASEL.
    TYPES: UPC_YS_API_CHAPRO_T TYPE STANDARD TABLE OF UPC_YS_API_CHAPRO.
    TYPES: UPC_YS_API_KYFPRO_T TYPE STANDARD TABLE OF UPC_YS_API_KYFPRO.
    CLASS CL_ABAP_CONV_ROUTINE DEFINITION DEFERRED.
    TYPES: BEGIN OF CONVEXIT_LOOKUP_S,
            CONVEXIT TYPE LVC_S_FCAT-CONVEXIT,
            O_CONVEXIT TYPE REF TO CL_ABAP_CONV_ROUTINE,
           END OF CONVEXIT_LOOKUP_S.
    TYPES: CONVEXIT_LOOKUP_T TYPE HASHED TABLE OF CONVEXIT_LOOKUP_S
            WITH UNIQUE KEY CONVEXIT.
    TYPES: FIELDCATALOG_UNIQUE TYPE HASHED TABLE OF LVC_S_FCAT
             WITH UNIQUE KEY FIELDNAME.
    TYPES: BEGIN OF PLAN_AREA_STRUCT_CACHE,
             PLANNING_AREA TYPE UPC_AREA-AREA,
             FIELDCATALOG TYPE LVC_T_FCAT,
             CHARACTERISTICS TYPE ZUPC_YS_API_CHAPRO_T,
             KEYFIGURES TYPE ZUPC_YS_API_KYFPRO_T,
             TRANSACTION_DATA_TABLE TYPE REF TO DATA,
           END OF PLAN_AREA_STRUCT_CACHE.
    TYPES: PLAN_AREA_STRUCT_CACHE_T TYPE SORTED TABLE OF
    PLAN_AREA_STRUCT_CACHE WITH UNIQUE KEY PLANNING_AREA.
    *       CLASS CX_DATE_CONVERSION DEFINITION
    CLASS CX_DATE_CONVERSION DEFINITION INHERITING FROM CX_DYNAMIC_CHECK.
      PUBLIC SECTION.
        DATA: MESSAGE TYPE STRING.
        METHODS CONSTRUCTOR
          IMPORTING MESSAGE TYPE STRING.
    ENDCLASS.                   "CX_DATE_CONVERSION DEFINITION
    *       CLASS CX_DATE_CONVERSION IMPLEMENTATION
    CLASS CX_DATE_CONVERSION IMPLEMENTATION.
      METHOD CONSTRUCTOR.
        SUPER->CONSTRUCTOR( ).
        ME->MESSAGE = MESSAGE.
      ENDMETHOD.                   "CONSTRUCTOR
    ENDCLASS.                   "CX_DATE_CONVERSION IMPLEMENTATION
    *       CLASS CL_ABAP_CONV_ROUTINE DEFINITION
    CLASS CL_ABAP_CONV_ROUTINE DEFINITION.
      PUBLIC SECTION.
        METHODS APPLY_CONV_INPUT
          IMPORTING
            INPUT TYPE ANY
          EXPORTING
            OUTPUT TYPE ANY .
        METHODS APPLY_CONV_OUTPUT
          IMPORTING
            INPUT TYPE ANY
          EXPORTING
            OUTPUT TYPE ANY .
        METHODS GET_CONVEXIT
          RETURNING
            VALUE(CONVEXIT) TYPE CONVEXIT .
        METHODS SET_CONVEXIT
          IMPORTING
            VALUE(CONVEXIT) TYPE CONVEXIT .
        METHODS CONSTRUCTOR
          IMPORTING
            CONVEXIT TYPE CONVEXIT OPTIONAL .
      PRIVATE SECTION.
        DATA CONVEXIT TYPE CONVEXIT .
        METHODS GET_INPUT_CONVERSION_EXIT
          RETURNING
            VALUE(FUNCTION_MODULE_NAME) TYPE STRING .
        METHODS GET_OUTPUT_CONVERSION_EXIT
          RETURNING
            VALUE(FUNCTION_MODULE_NAME) TYPE STRING .
    ENDCLASS.                   "CL_ABAP_CONV_ROUTINE DEFINITION
    *       CLASS CL_ABAP_CONV_ROUTINE IMPLEMENTATION
    CLASS CL_ABAP_CONV_ROUTINE IMPLEMENTATION.
      METHOD APPLY_CONV_INPUT .
        DATA: FUNCT_MOD TYPE STRING.
        IF NOT ME->CONVEXIT IS INITIAL.
    * Only apply conversion routine if it exits
          CALL METHOD ME->GET_INPUT_CONVERSION_EXIT
            RECEIVING
              FUNCTION_MODULE_NAME = FUNCT_MOD.
          CALL FUNCTION FUNCT_MOD
            EXPORTING
              INPUT  = INPUT
            IMPORTING
              OUTPUT = OUTPUT.
        ELSE.
    * Can only hope this works
          OUTPUT = INPUT.
        ENDIF.
      ENDMETHOD.                   "APPLY_CONV_INPUT
      METHOD APPLY_CONV_OUTPUT.
        DATA: FUNCT_MOD TYPE STRING.
        IF NOT ME->CONVEXIT IS INITIAL.
    * Only apply conversion routine if it exits
          CALL METHOD ME->GET_OUTPUT_CONVERSION_EXIT
            RECEIVING
              FUNCTION_MODULE_NAME = FUNCT_MOD.
          CALL FUNCTION FUNCT_MOD
            EXPORTING
              INPUT  = INPUT
            IMPORTING
              OUTPUT = OUTPUT.
        ELSE.
    * Can only hope this works
          OUTPUT = INPUT.
        ENDIF.
      ENDMETHOD.                   "APPLY_CONV_OUTPUT
      METHOD CONSTRUCTOR.
        IF CONVEXIT IS SUPPLIED.
          CALL METHOD ME->SET_CONVEXIT
            EXPORTING
              CONVEXIT = CONVEXIT.
        ENDIF.
      ENDMETHOD.                   "CONSTRUCTOR
      METHOD GET_CONVEXIT.
        CONVEXIT = ME->CONVEXIT.
      ENDMETHOD.                   "GET_CONVEXIT
      METHOD SET_CONVEXIT.
        ME->CONVEXIT = CONVEXIT.
      ENDMETHOD.                   "SET_CONVEXIT
      METHOD GET_INPUT_CONVERSION_EXIT.
    * Generate standard conversion routines for input conversion
    * This is based on standard SAP ABAP help documentation
        CONCATENATE 'CONVERSION_EXIT_' ME->CONVEXIT
          '_INPUT' INTO FUNCTION_MODULE_NAME.
      ENDMETHOD.                   "GET_INPUT_CONVERSION_EXIT
      METHOD GET_OUTPUT_CONVERSION_EXIT.
    * Generate standard conversion routines for output conversion
    * This is based on standard SAP ABAP help documentation
        CONCATENATE 'CONVERSION_EXIT_' ME->CONVEXIT
          '_OUTPUT' INTO FUNCTION_MODULE_NAME.
      ENDMETHOD.                   "GET_OUTPUT_CONVERSION_EXIT
    ENDCLASS.                   "CL_ABAP_CONV_ROUTINE IMPLEMENTATION
    *       CLASS CL_ABAP_CONV_DECIMAL DEFINITION
    CLASS CL_ABAP_CONV_DECIMAL DEFINITION.
      PUBLIC SECTION.
        CLASS-DATA SAP_DECIMAL_FMT_SPACE TYPE USR01-DCPFM VALUE ' '
    READ-ONLY .
        CLASS-DATA SAP_DECIMAL_FMT_X TYPE USR01-DCPFM VALUE 'X' READ-ONLY .
        CLASS-DATA SAP_DECIMAL_FMT_Y TYPE USR01-DCPFM VALUE 'Y' READ-ONLY .
        CLASS-DATA USER_DECIMAL_FORMAT TYPE USR01-DCPFM READ-ONLY .
        CLASS-METHODS CLASS_CONSTRUCTOR .
        CLASS-METHODS CONVERT_DECIMAL_EXT2INT
          IMPORTING
            EXTERNAL_VALUE TYPE STRING
          CHANGING
            INTERNAL_VALUE TYPE P
          RAISING
            CX_SY_CONVERSION_OVERFLOW
            CX_SY_CONVERSION_NO_NUMBER .
        CLASS-METHODS CONVERT_DECIMAL_INT2EXT
          IMPORTING
            INTERNAL_VALUE TYPE P
          CHANGING
            EXTERNAL_VALUE TYPE STRING .
    ENDCLASS.                   "CL_ABAP_CONV_DECIMAL DEFINITION
    *       CLASS CL_ABAP_CONV_DECIMAL IMPLEMENTATION
    CLASS CL_ABAP_CONV_DECIMAL IMPLEMENTATION.
      METHOD CLASS_CONSTRUCTOR .
        SELECT SINGLE DCPFM FROM USR01 INTO USER_DECIMAL_FORMAT
          WHERE BNAME = SY-UNAME.
      ENDMETHOD.                   "CLASS_CONSTRUCTOR
      METHOD CONVERT_DECIMAL_EXT2INT .
    * THE GOAL IS TO GET THIS INTO INTERNAL FORMAT WHICH IS EQUIVALENT TO
    * EX. NNNNN.NN
        DATA: NUM_STR TYPE STRING.
        NUM_STR = EXTERNAL_VALUE.
        CONDENSE NUM_STR NO-GAPS.
        CASE USER_DECIMAL_FORMAT.
          WHEN SAP_DECIMAL_FMT_X.
            REPLACE ALL OCCURRENCES OF ',' IN NUM_STR WITH SPACE.
            CONDENSE NUM_STR NO-GAPS.
          WHEN SAP_DECIMAL_FMT_SPACE.
            REPLACE ALL OCCURRENCES OF '.' IN NUM_STR WITH SPACE.
            CONDENSE NUM_STR NO-GAPS.
            REPLACE ALL OCCURRENCES OF ',' IN NUM_STR WITH '.'.
          WHEN SAP_DECIMAL_FMT_Y.
            REPLACE ALL OCCURRENCES OF ',' IN NUM_STR WITH '.'.
        ENDCASE.
        INTERNAL_VALUE = NUM_STR.
      ENDMETHOD.                   "CONVERT_DECIMAL_EXT2INT
      METHOD CONVERT_DECIMAL_INT2EXT .
    * THE GOAL IS TO GET THIS INTO EXTERNAL FORMAT WHICH IS BASED ON SAP
    * USER PROFILE SETTINGS
    * CURRENT INPUT FORMAT EQUIVALENT IS EX. NNNNN.NN
        DATA: TEMP(70) TYPE C.
        WRITE INTERNAL_VALUE TO TEMP.
        EXTERNAL_VALUE = TEMP.
      ENDMETHOD.                   "CONVERT_DECIMAL_INT2EXT
    ENDCLASS.                   "CL_ABAP_CONV_DECIMAL IMPLEMENTATION
    *       CLASS CL_ABAP_CONV_DATE DEFINITION
    CLASS CL_ABAP_CONV_DATE DEFINITION.
      PUBLIC SECTION.
        CLASS-DATA SAP_DATE_FMT_5 TYPE USR01-DATFM VALUE '5' READ-ONLY .
        CLASS-DATA SAP_DATE_FMT_6 TYPE USR01-DATFM VALUE '6' READ-ONLY .
        CLASS-DATA SAP_DATE_FMT_3 TYPE USR01-DATFM VALUE '3' READ-ONLY .
        CLASS-DATA SAP_DATE_FMT_4 TYPE USR01-DATFM VALUE '4' READ-ONLY .
        CLASS-DATA SAP_DATE_FMT_1 TYPE USR01-DATFM VALUE '1' READ-ONLY .
        CLASS-DATA SAP_DATE_FMT_2 TYPE USR01-DATFM VALUE '2' READ-ONLY .
        CLASS-DATA USER_DATE_FORMAT TYPE USR01-DATFM READ-ONLY .
        CLASS-METHODS CONVERT_DATE_EXT2INT
          IMPORTING
            EXTERNAL_DATE TYPE STRING
          RETURNING
            VALUE(INTERNAL_DATE) TYPE D
          RAISING
            CX_DATE_CONVERSION .
        CLASS-METHODS CONVERT_DATE_INT2EXT
          IMPORTING
            INTERNAL_DATE TYPE D
          RETURNING
            VALUE(EXTERNAL_DATE) TYPE STRING .
        CLASS-METHODS CLASS_CONSTRUCTOR .
    ENDCLASS.                   "CL_ABAP_CONV_DATE DEFINITION
    *       CLASS CL_ABAP_CONV_DATE IMPLEMENTATION
    CLASS CL_ABAP_CONV_DATE IMPLEMENTATION.
      METHOD CLASS_CONSTRUCTOR.
        SELECT SINGLE DATFM FROM USR01 INTO USER_DATE_FORMAT
          WHERE BNAME = SY-UNAME.
      ENDMETHOD.                   "CLASS_CONSTRUCTOR
      METHOD CONVERT_DATE_EXT2INT.
    *  HERE ARE THE CURRENT DATE FORMATS FROM SAP GUI
    *1 DD.MM.YYYY
    *2 MM/DD/YYYY
    *3 MM-DD-YYYY
    *4 YYYY.MM.DD
    *5 YYYY/MM/DD
    *6 YYYY-MM-DD
        DATA: PERMITTED_NUMBERS TYPE STRING VALUE '0123456789'.
        DATA: TEMP_DATE TYPE D.
        DATA: MESSAGE_VALID_NUMERICS TYPE STRING
          VALUE 'Only Numerics (0-9) are acceptable.'.
        DATA: MESSAGE_VALID_FORMAT TYPE STRING
          VALUE 'Invalid date format.'.
        IF STRLEN( EXTERNAL_DATE ) = 10.
          CASE USER_DATE_FORMAT.
            WHEN SAP_DATE_FMT_1.
              IF EXTERNAL_DATE+2(1) = '.' AND EXTERNAL_DATE+5(1) = '.'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+6(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+3(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+0(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS." ISSUE ERROR
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
            WHEN SAP_DATE_FMT_2.
              IF EXTERNAL_DATE+2(1) = '/' AND EXTERNAL_DATE+5(1) = '/'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+6(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+0(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+3(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS. " ISSUE
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
            WHEN SAP_DATE_FMT_3.
              IF EXTERNAL_DATE+2(1) = '-' AND EXTERNAL_DATE+5(1) = '-'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+6(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+0(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+3(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS." ISSUE ERROR
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
            WHEN SAP_DATE_FMT_4.
              IF EXTERNAL_DATE+4(1) = '.' AND EXTERNAL_DATE+7(1) = '.'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+0(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+5(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+8(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS." ISSUE ERROR
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
            WHEN SAP_DATE_FMT_5.
              IF EXTERNAL_DATE+4(1) = '/' AND EXTERNAL_DATE+7(1) = '/'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+0(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+5(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+8(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS." ISSUE ERROR
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
            WHEN SAP_DATE_FMT_6.
              IF EXTERNAL_DATE+4(1) = '-' AND EXTERNAL_DATE+7(1) = '-'.
                TEMP_DATE+0(4) = EXTERNAL_DATE+0(4). " YEAR
                TEMP_DATE+4(2) = EXTERNAL_DATE+5(2). " MONTH
                TEMP_DATE+6(2) = EXTERNAL_DATE+8(2). " DAY
                IF NOT ( TEMP_DATE CO PERMITTED_NUMBERS ).
                  RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_NUMERICS." ISSUE ERROR
                ENDIF.
              ELSE.
                RAISE EXCEPTION TYPE CX_DATE_CONVERSION
                    EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
              ENDIF.
          ENDCASE.
          INTERNAL_DATE = TEMP_DATE.
        ELSEIF STRLEN( EXTERNAL_DATE ) = 8.
    * ASSUME NORMAL DATE FORMAT (YYYYMMDD)
          INTERNAL_DATE = EXTERNAL_DATE.
        ELSE.
          RAISE EXCEPTION TYPE CX_DATE_CONVERSION
            EXPORTING MESSAGE = MESSAGE_VALID_FORMAT. " ISSUE ERROR
        ENDIF.
      ENDMETHOD.                   "CONVERT_DATE_EXT2INT
      METHOD CONVERT_DATE_INT2EXT.
    *  HERE ARE THE CURRENT DATE FORMATS FROM SAP GUI
    *1     DD.MM.YYYY
    *2     MM/DD/YYYY
    *3     MM-DD-YYYY
    *4     YYYY.MM.DD
    *5     YYYY/MM/DD
    *6     YYYY-MM-DD
        DATA: EXTERNAL_DATE_TEMP(10) TYPE C.
        WRITE INTERNAL_DATE TO EXTERNAL_DATE_TEMP.
        EXTERNAL_DATE = EXTERNAL_DATE_TEMP.
      ENDMETHOD.                   "CONVERT_DATE_INT2EXT
    ENDCLASS.                   "CL_ABAP_CONV_DATE IMPLEMENTATION
    *       CLASS CX_SEM_BPS_DATA_ACCESS DEFINITION
    CLASS CX_SEM_BPS_DATA_ACCESS DEFINITION INHERITING FROM CX_DYNAMIC_CHECK
      PUBLIC SECTION.
        DATA: MESSAGE TYPE STRING.
        DATA: RETURN_T TYPE BAPIRET2_T.
        METHODS CONSTRUCTOR
          IMPORTING
            MESSAGE TYPE STRING
            RETURN_T TYPE BAPIRET2_T OPTIONAL.
    ENDCLASS.                   "CX_SEM_BPS_DATA_ACCESS DEFINITION
    *       CLASS CX_SEM_BPS_DATA_ACCESS IMPLEMENTATION
    CLASS CX_SEM_BPS_DATA_ACCESS IMPLEMENTATION.
      METHOD CONSTRUCTOR.
        SUPER->CONSTRUCTOR( ).
        ME->MESSAGE = MESSAGE.
        ME->RETURN_T = RETURN_T.
      ENDMETHOD.                   "CONSTRUCTOR
    ENDCLASS.                   "CX_SEM_BPS_DATA_ACCESS IMPLEMENTATION
    *       CLASS CL_SEMBPS_DATA_ACCESSOR DEFINITION
    CLASS CL_SEMBPS_DATA_ACCESSOR DEFINITION.
      PUBLIC SECTION.
        DATA TRANSACTION_DATA TYPE REF TO DATA .
        CLASS-DATA C_LEVEL TYPE UPC_PLEVEL-PLEVEL VALUE 'ZLABAP' READ-ONLY .
        CLASS-DATA C_LAYOUT TYPE UPP_PARAM-PARAM VALUE 'ZMABAP' READ-ONLY .
        CLASS-DATA C_ADHOC_PACK TYPE UPC_PACKAGE-PPACKAGE VALUE '0-ADHOC'
    READ-ONLY .
        CLASS-DATA C_MULTIPLAN_AREA TYPE UPC_YS_API_CHAPRO-CHANM VALUE
    '_AREA_____' READ-ONLY .
        METHODS GET_INFOCUBE
          RETURNING
            VALUE(INFOCUBE) TYPE UPC_BW_AREA-INFOCUBE .
        METHODS GET_CHARACTERISTIC_SELECTIONS
          EXPORTING
            CHARACTERISTIC_SELECTION TYPE UPC_YS_API_CHASEL_T .
        METHODS REFRESH
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        METHODS CONSTRUCTOR
          IMPORTING
            PLANNING_AREA TYPE UPC_AREA-AREA
            IT_FIELDCATALOG TYPE LVC_T_FCAT
            TRANSACTION_DATA_TABLE TYPE REF TO DATA
            CHARACTERISTIC_SELECTION TYPE UPC_YS_API_CHASEL_T
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        METHODS GET_PLANNING_AREA
          RETURNING
            VALUE(PLANNING_AREA) TYPE UPC_AREA-AREA .
        METHODS GET_CHARACTERISTICS
          EXPORTING
            CHARACTERISTICS TYPE UPC_YS_API_CHAPRO_T .
        METHODS GET_KEYFIGURES
          EXPORTING
            KEYFIGURES TYPE UPC_YS_API_KYFPRO_T .
        METHODS SAVE
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
      PRIVATE SECTION.
        DATA CONVEXIT_LOOKUP TYPE CONVEXIT_LOOKUP_T .
        DATA INFOCUBE TYPE UPC_BW_AREA-INFOCUBE .
        DATA IT_FIELDCATALOG TYPE FIELDCATALOG_UNIQUE .
        DATA PLANNING_AREA TYPE UPC_AREA-AREA .
        DATA CHARACTERISTICS TYPE UPC_YS_API_CHAPRO_T .
        DATA KEYFIGURES TYPE UPC_YS_API_KYFPRO_T .
        DATA CHARACTERISTIC_SELECTION TYPE UPC_YS_API_CHASEL_T .
        DATA LAYOUT_COL_SPEC TYPE STANDARD TABLE OF UPC_YS_API_COL .
        CLASS-METHODS FORCE_ERROR_MESSAGE
          IMPORTING
            MESSAGE TYPE STRING OPTIONAL
            RETURN_STRUCT TYPE BAPIRET2 OPTIONAL
            RETURN_STRUCTS TYPE BAPIRET2_T OPTIONAL
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        CLASS-METHODS CHECK_MESSAGE
          IMPORTING
            E_SUBRC TYPE SY-SUBRC
            RETURN_STRUCT TYPE BAPIRET2
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        METHODS SET_CHARACTERISTIC_SELECTION
          IMPORTING
            CHARACTERISTIC_SELECTION TYPE UPC_YS_API_CHASEL_T .
        METHODS SET_PLANNING_AREA
          IMPORTING
            PLANNING_AREA TYPE UPC_AREA-AREA
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        METHODS VALIDATE_PLANNING_OBJECTS
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        CLASS-METHODS CHECK_MESSAGES
          IMPORTING
            RETURN_STRUCTS TYPE BAPIRET2_T
            E_SUBRC TYPE SY-SUBRC
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        METHODS READ_DATA
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
    ENDCLASS.                   "CL_SEMBPS_DATA_ACCESSOR DEFINITION
    *       CLASS CL_SEMBPS_DATA_ACCESSOR IMPLEMENTATION
    CLASS CL_SEMBPS_DATA_ACCESSOR IMPLEMENTATION.
      METHOD CONSTRUCTOR .
        DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT.
        DATA: CONVEXIT_WA TYPE CONVEXIT_LOOKUP_S.
    * BUILD CONVERSION EXITS AND FIELDCATALOG
        LOOP AT IT_FIELDCATALOG INTO WA_FIELDCATALOG.
          INSERT WA_FIELDCATALOG INTO TABLE ME->IT_FIELDCATALOG[].
          IF NOT WA_FIELDCATALOG-CONVEXIT IS INITIAL.
            CLEAR CONVEXIT_WA.
            CONVEXIT_WA-CONVEXIT = WA_FIELDCATALOG-CONVEXIT.
            CREATE OBJECT CONVEXIT_WA-O_CONVEXIT
                EXPORTING
                  CONVEXIT = WA_FIELDCATALOG-CONVEXIT.
            INSERT CONVEXIT_WA INTO TABLE ME->CONVEXIT_LOOKUP.
          ENDIF.
        ENDLOOP.
        CALL METHOD ME->SET_PLANNING_AREA
          EXPORTING
            PLANNING_AREA = PLANNING_AREA.
        CALL METHOD ME->SET_CHARACTERISTIC_SELECTION
          EXPORTING
            CHARACTERISTIC_SELECTION = CHARACTERISTIC_SELECTION.
    * POINT TO TABLE CONTAINING TRANSACTION DATA
        ME->TRANSACTION_DATA = TRANSACTION_DATA_TABLE.
    * READ DATA
        CALL METHOD ME->REFRESH.
      ENDMETHOD.                   "CONSTRUCTOR
      METHOD GET_CHARACTERISTICS .
        CHARACTERISTICS[] = ME->CHARACTERISTICS[].
      ENDMETHOD.                   "GET_CHARACTERISTICS
      METHOD GET_CHARACTERISTIC_SELECTIONS.
        CHARACTERISTIC_SELECTION[] = ME->CHARACTERISTIC_SELECTION[].
      ENDMETHOD.                   "GET_CHARACTERISTIC_SELECTIONS
      METHOD GET_INFOCUBE .
        INFOCUBE = ME->INFOCUBE.
      ENDMETHOD.                   "GET_INFOCUBE
      METHOD GET_KEYFIGURES .
        KEYFIGURES[] = ME->KEYFIGURES[].
      ENDMETHOD.                   "GET_KEYFIGURES
      METHOD GET_PLANNING_AREA .
        PLANNING_AREA = ME->PLANNING_AREA.
      ENDMETHOD.                   "GET_PLANNING_AREA
      METHOD REFRESH.
        CALL METHOD ME->READ_DATA.
      ENDMETHOD.                   "REFRESH
      METHOD SAVE .
        DATA: E_SUBRC TYPE SY-SUBRC.
        DATA: ES_RETURN TYPE BAPIRET2.
        DATA: CHARACTERISTICS_WA TYPE UPC_YS_API_CHAPRO.
        DATA: WA_REF TYPE REF TO DATA.
        DATA: ITK_ROW TYPE TABLE OF UPC_YS_API_ROW.
        DATA: ITK_ROW_WA TYPE UPC_YS_API_ROW.
        DATA: LAYOUT_COL_SPEC_WA TYPE UPC_YS_API_COL.
        DATA: ITK_DATA TYPE TABLE OF UPC_YS_API_DATA.
        DATA: ITK_DATA_WA TYPE UPC_YS_API_DATA.
        DATA: ETK_RETURN TYPE TABLE OF BAPIRET2.
        DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT.
        DATA: CONVERSION_EXIT TYPE STRING.
        DATA: KEYFIG TYPE STRING.
        DATA: DATE_CHAR TYPE STRING.
        DATA: MESSAGE TYPE STRING.
        CONSTANTS: FIND_FIELD_ERR TYPE STRING VALUE 'Unable to find field'.
        FIELD-SYMBOLS: <TD_FIELD> TYPE ANY.
        FIELD-SYMBOLS: <TD_WA> TYPE ANY.
        FIELD-SYMBOLS: <TD_TAB> TYPE STANDARD TABLE.
        ASSIGN ME->TRANSACTION_DATA->* TO <TD_TAB>.
        CREATE DATA WA_REF LIKE LINE OF <TD_TAB>.
        ASSIGN WA_REF->* TO <TD_WA>.
        CLEAR <TD_WA>.
        DATA: ROWC TYPE I.
        ROWC = 1.
        LOOP AT <TD_TAB> INTO <TD_WA>.
    * FILL CHARACTERISTIC DATA
          LOOP AT ME->CHARACTERISTICS INTO CHARACTERISTICS_WA.
            ASSIGN COMPONENT CHARACTERISTICS_WA-CHANM OF STRUCTURE <TD_WA>
              TO <TD_FIELD>.
            IF SY-SUBRC = 0.
              ITK_ROW_WA-ROW = ROWC.
              ITK_ROW_WA-CHANM = CHARACTERISTICS_WA-CHANM.
              CLEAR ITK_ROW_WA-CHAVLEXT.
    * APPLY OUTPUT CONVERSION EXIT FOR SAP EXTERNAL TYPE
    * ONLY APPLIES WHEN VALUE IS NOT UNASSIGNED ('#') MEANING INITIAL(ABAP)
    * FOR EXTERNAL CONVERSION UNASSIGED ('#') IS JUST A BLANK
              IF NOT <TD_FIELD> IS INITIAL.
                READ TABLE ME->IT_FIELDCATALOG INTO WA_FIELDCATALOG
                  WITH TABLE KEY FIELDNAME = ITK_ROW_WA-CHANM.
                IF SY-SUBRC = 0 AND NOT WA_FIELDCATALOG-CONVEXIT IS INITIAL.
                  DATA: CONVEXIT_WA TYPE CONVEXIT_LOOKUP_S.
                  READ TABLE ME->CONVEXIT_LOOKUP INTO CONVEXIT_WA
                    WITH TABLE KEY CONVEXIT = WA_FIELDCATALOG-CONVEXIT.
                  CALL METHOD CONVEXIT_WA-O_CONVEXIT->APPLY_CONV_OUTPUT
                    EXPORTING
                      INPUT  = <TD_FIELD>
                    IMPORTING
                      OUTPUT = <TD_FIELD>.
                  ITK_ROW_WA-CHAVLEXT = <TD_FIELD>.
                ELSEIF SY-SUBRC = 0 AND WA_FIELDCATALOG-INTTYPE = 'D'.
    * APPLY DATE CONVERSION TO EXTERNAL FORMAT BASED ON USER PROFILE
                  CALL METHOD CL_ABAP_CONV_DATE=>CONVERT_DATE_INT2EXT
                    EXPORTING
                      INTERNAL_DATE = <TD_FIELD>
                    RECEIVING
                      EXTERNAL_DATE = DATE_CHAR.
                  ITK_ROW_WA-CHAVLEXT = DATE_CHAR.
                ELSE.
                  ITK_ROW_WA-CHAVLEXT = <TD_FIELD>.
                ENDIF.
              ENDIF.
              APPEND ITK_ROW_WA TO ITK_ROW.
            ELSE.
    * FAILURE TO FIND THE FIELD IN THE POINTER WILL RESULT IN
    * TRANSACTION DATA INTEGRITY ISSUES, WE SHOULD ERROR OUT
              CONCATENATE FIND_FIELD_ERR CHARACTERISTICS_WA-CHANM
            INTO MESSAGE.
              CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
                EXPORTING
                  MESSAGE = MESSAGE.
            ENDIF.
          ENDLOOP.
    * FILL KEY FIGURE DATA
          LOOP AT ME->LAYOUT_COL_SPEC INTO LAYOUT_COL_SPEC_WA.
            ASSIGN COMPONENT LAYOUT_COL_SPEC_WA-CHAVLEXT
              OF STRUCTURE <TD_WA> TO <TD_FIELD>.
            IF SY-SUBRC = 0.
              ITK_DATA_WA-ROW = ROWC.
              ITK_DATA_WA-COL = LAYOUT_COL_SPEC_WA-COL.
              READ TABLE ME->IT_FIELDCATALOG INTO WA_FIELDCATALOG
                WITH TABLE KEY FIELDNAME = LAYOUT_COL_SPEC_WA-CHAVLEXT.
              IF WA_FIELDCATALOG-INTTYPE = 'P'.
    * MUST CONVERT TO EXTERNAL FORMAT FOR DECIMALS
                CALL METHOD CL_ABAP_CONV_DECIMAL=>CONVERT_DECIMAL_INT2EXT
                  EXPORTING
                    INTERNAL_VALUE = <TD_FIELD>
                  CHANGING
                    EXTERNAL_VALUE = KEYFIG.
              ELSEIF WA_FIELDCATALOG-INTTYPE = 'F'
                OR WA_FIELDCATALOG-INTTYPE = 'I'.
                KEYFIG = <TD_FIELD>.
              ENDIF.
              ITK_DATA_WA-VALUE = KEYFIG.
              APPEND ITK_DATA_WA TO ITK_DATA.
            ELSE.
    * FAILURE TO FIND THE FIELD IN THE POINTER WILL RESULT IN
    * TRANSACTION DATA INTEGRITY ISSUES, WE SHOULD ERROR OUT
              CONCATENATE FIND_FIELD_ERR LAYOUT_COL_SPEC_WA-CHAVLEXT
                INTO MESSAGE.
              CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
                EXPORTING
                  MESSAGE = MESSAGE.
            ENDIF.
          ENDLOOP.
          ROWC = ROWC + 1.
        ENDLOOP.
    * SET ADHOC PACKAGE SELECTIONS
        CALL FUNCTION 'API_SEMBPS_ADHOCPACKAGE_SET'
          EXPORTING
            I_AREA     = ME->PLANNING_AREA
            I_PLEVEL   = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
          IMPORTING
            E_SUBRC    = E_SUBRC
            ES_RETURN  = ES_RETURN
          TABLES
            ITK_CHASEL = CHARACTERISTIC_SELECTION.
    * THROW EXCEPTIONS IF NECESSARY
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
        CALL FUNCTION 'API_SEMBPS_SETDATA'
          EXPORTING
            I_AREA     = ME->PLANNING_AREA
            I_PLEVEL   = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
            I_PACKAGE  = CL_SEMBPS_DATA_ACCESSOR=>C_ADHOC_PACK
            I_LAYOUT   = CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
          IMPORTING
            E_SUBRC    = E_SUBRC
          TABLES
            ITK_ROW    = ITK_ROW
            ITK_DATA   = ITK_DATA
            ETK_RETURN = ETK_RETURN.
    * THROW EXCEPTIONS IF NECESSARY
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGES
          EXPORTING
            E_SUBRC        = E_SUBRC
            RETURN_STRUCTS = ETK_RETURN.
    * SAVE THE DATA INTO THE CUBE
        CALL FUNCTION 'API_SEMBPS_POST'
          IMPORTING
            E_SUBRC   = E_SUBRC
            ES_RETURN = ES_RETURN.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
    * CLEAR SEM BPS DATA BUFFER AS WEIRD BEHAVIOR MAY OCCUR IF
    * NOT CLEARED WHETHER IF SUCCESSFUL OR NOT
        CALL FUNCTION 'API_SEMBPS_REFRESH'
          IMPORTING
            E_SUBRC   = E_SUBRC
            ES_RETURN = ES_RETURN.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
      ENDMETHOD.                   "SAVE
      METHOD CHECK_MESSAGE .
        DATA: RETURN_T TYPE BAPIRET2_T.
        APPEND RETURN_STRUCT TO RETURN_T.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGES
          EXPORTING
            RETURN_STRUCTS = RETURN_T
            E_SUBRC        = E_SUBRC.
      ENDMETHOD.                   "CHECK_MESSAGE
      METHOD CHECK_MESSAGES .
        IF E_SUBRC <> 0.
          DATA: MESSAGE TYPE STRING.
          DATA: RETURN TYPE BAPIRET2.
          READ TABLE RETURN_STRUCTS INTO RETURN WITH KEY TYPE = 'E'.
          IF SY-SUBRC <> 0.
            READ TABLE RETURN_STRUCTS INTO RETURN WITH KEY TYPE = 'A'.
          ENDIF.
          MESSAGE = RETURN-MESSAGE.
          RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS
            EXPORTING
              MESSAGE = MESSAGE
              RETURN_T = RETURN_STRUCTS.
        ENDIF.
      ENDMETHOD.                   "CHECK_MESSAGES
      METHOD FORCE_ERROR_MESSAGE.
        DATA: RC TYPE SY-SUBRC VALUE 4.
        IF MESSAGE IS SUPPLIED.
          DATA: RETURN TYPE BAPIRET2.
          RETURN-TYPE = 'E'.
          RETURN-MESSAGE = MESSAGE.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
            EXPORTING
              RETURN_STRUCT = RETURN
              E_SUBRC       = RC.
        ENDIF.
        IF RETURN_STRUCT IS SUPPLIED.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
            EXPORTING
              RETURN_STRUCT = RETURN_STRUCT
              E_SUBRC       = RC.
        ENDIF.
        IF RETURN_STRUCTS IS SUPPLIED.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGES
            EXPORTING
              RETURN_STRUCTS = RETURN_STRUCTS
              E_SUBRC        = RC.
        ENDIF.
      ENDMETHOD.                   "FORCE_ERROR_MESSAGE
      METHOD READ_DATA .
        DATA: CHAR_DATA TYPE TABLE OF UPC_YS_API_ROW.
        DATA: KEYFIG_DATA TYPE TABLE OF UPC_YS_API_DATA.
        DATA: ETK_ROW_WA TYPE UPC_YS_API_ROW.
        DATA: ETK_COL TYPE TABLE OF UPC_YS_API_COL.
        DATA: ETK_RETURN TYPE TABLE OF BAPIRET2.
        DATA: KEYFIGURES_WA TYPE UPC_YS_API_KYFPRO.
        DATA: E_SUBRC TYPE SY-SUBRC.
        DATA: ES_RETURN TYPE BAPIRET2.
        DATA: ETK_COL_WA TYPE UPC_YS_API_COL.
        DATA: WA_REF TYPE REF TO DATA.
        DATA: HAS_DATA TYPE BOOLEAN.
        DATA: KEYFIG_DATA_WA TYPE UPC_YS_API_DATA.
        DATA: LINE1 TYPE I.
        DATA: LINE2 TYPE I.
        DATA: MESSAGE TYPE STRING.
        CONSTANTS: FIND_FIELD_ERR TYPE STRING VALUE 'Unable to find field '.
        FIELD-SYMBOLS: <TD_FIELD> TYPE ANY.
        FIELD-SYMBOLS: <TD_WA> TYPE ANY.
        FIELD-SYMBOLS: <TD_TAB> TYPE STANDARD TABLE.
        CALL FUNCTION 'API_SEMBPS_ADHOCPACKAGE_SET'
          EXPORTING
            I_AREA     = ME->PLANNING_AREA
            I_PLEVEL   = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
          IMPORTING
            E_SUBRC    = E_SUBRC
            ES_RETURN  = ES_RETURN
          TABLES
            ITK_CHASEL = ME->CHARACTERISTIC_SELECTION.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
        CALL FUNCTION 'API_SEMBPS_GETDATA'
          EXPORTING
            I_AREA      = ME->PLANNING_AREA
            I_PLEVEL    = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
            I_PACKAGE   = CL_SEMBPS_DATA_ACCESSOR=>C_ADHOC_PACK
            I_LAYOUT    = CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
            I_READ_ONLY = 'X'
          IMPORTING
            E_SUBRC     = E_SUBRC
          TABLES
            ETK_ROW     = CHAR_DATA
            ETK_COL     = ETK_COL
            ETK_DATA    = KEYFIG_DATA
            ETK_RETURN  = ETK_RETURN.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGES
          EXPORTING
            E_SUBRC        = E_SUBRC
            RETURN_STRUCTS = ETK_RETURN.
    * SET LAYOUT COLUMN SPECIFICATION
        ME->LAYOUT_COL_SPEC[] = ETK_COL[].
    * CHECK TO SEE IF THE COLUMN SPEC CONTAINS ALL KEY FIGURES REQUIRED
    * THIS WOULD GUARANTEE THAT ALL THE KEY FIGURES PRESENT IN THE CUBE
    * ARE ALSO IN THE LAYOUT
        DESCRIBE TABLE ME->KEYFIGURES LINES LINE1.
        DESCRIBE TABLE ME->LAYOUT_COL_SPEC LINES LINE2.
        IF LINE1 <> LINE2.
          LOOP AT ME->KEYFIGURES INTO KEYFIGURES_WA.
            READ TABLE ME->LAYOUT_COL_SPEC
              WITH KEY CHAVLEXT = KEYFIGURES_WA-KYFNM
              TRANSPORTING NO FIELDS.
            IF SY-SUBRC <> 0.
              CLEAR ES_RETURN.
              ES_RETURN-TYPE = 4.
              CONCATENATE 'Layout ' CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
                ' is missing keyfigure: ' KEYFIGURES_WA-KYFNM
                INTO ES_RETURN-MESSAGE.
              APPEND ES_RETURN TO ETK_RETURN.
            ENDIF.
          ENDLOOP.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
            EXPORTING
              RETURN_STRUCTS = ETK_RETURN.
        ENDIF.
    * CLEAR TRANSACTION DATA IF ANY
        ASSIGN TRANSACTION_DATA->* TO <TD_TAB>.
        REFRESH <TD_TAB>.
        CREATE DATA WA_REF LIKE LINE OF <TD_TAB>.
        ASSIGN WA_REF->* TO <TD_WA>.
        DATA: PREV_ROWID TYPE UPC_YS_API_ROW-ROW VALUE 1.
        DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT.
        DATA: CONVERSION_EXIT TYPE STRING.
        DATA: DECIMAL_CONV TYPE STRING.
        DATA: DATE_CONV TYPE STRING.
        CLEAR <TD_WA>.
    * SORT DATA
        SORT KEYFIG_DATA BY ROW.
        SORT ETK_COL BY COL.
        SORT CHAR_DATA BY ROW.
    * INSERT ALL CHARACTERISTIC ROWS
        LOOP AT CHAR_DATA INTO ETK_ROW_WA.
          IF ETK_ROW_WA-CHANM IS NOT INITIAL.
            IF ETK_ROW_WA-ROW <> PREV_ROWID.
              CLEAR HAS_DATA.
              PREV_ROWID = ETK_ROW_WA-ROW.
              APPEND <TD_WA> TO <TD_TAB>.
              CLEAR <TD_WA>.
            ENDIF.
            HAS_DATA = 'X'.
            ASSIGN COMPONENT ETK_ROW_WA-CHANM OF STRUCTURE
              <TD_WA> TO <TD_FIELD>.
            IF SY-SUBRC = 0.
              CLEAR <TD_FIELD>.
              IF ETK_ROW_WA-CHAVLEXT <> '#'.
    * APPLY INPUT CONVERSION EXIT FOR SAP INTERNAL DATA ELEMENTS
    * ONLY APPLIES WHEN VALUE IS NOT UNASSIGNED ('#')
                READ TABLE ME->IT_FIELDCATALOG INTO WA_FIELDCATALOG
                  WITH TABLE KEY FIELDNAME = ETK_ROW_WA-CHANM.
                IF SY-SUBRC = 0 AND NOT WA_FIELDCATALOG-CONVEXIT IS INITIAL.
                  <TD_FIELD> = ETK_ROW_WA-CHAVLEXT.
    * APPLY INPUT CONVERSION EXIT IF ANY, CHECK INFOOBJECT RSD1 TRANSACTION
                  DATA: CONVEXIT_WA TYPE CONVEXIT_LOOKUP_S.
                  READ TABLE ME->CONVEXIT_LOOKUP INTO CONVEXIT_WA
                    WITH TABLE KEY CONVEXIT = WA_FIELDCATALOG-CONVEXIT.
                  CALL METHOD CONVEXIT_WA-O_CONVEXIT->APPLY_CONV_INPUT
                    EXPORTING
                      INPUT  = <TD_FIELD>
                    IMPORTING
                      OUTPUT = <TD_FIELD>.
                ELSEIF SY-SUBRC = 0 AND WA_FIELDCATALOG-INTTYPE = 'D'.
    * APPLY DATE CONVERSION AS THERE IS NO COVERSION EXIT FOR DATES DUE TO
    * SAPGUI DISPLAY FORMATS BASED ON USER PROFILES
                  TRY.
                      DATE_CONV = ETK_ROW_WA-CHAVLEXT.
                      CALL METHOD CL_ABAP_CONV_DATE=>CONVERT_DATE_EXT2INT
                        EXPORTING
                          EXTERNAL_DATE = DATE_CONV
                        RECEIVING
                          INTERNAL_DATE = <TD_FIELD>.
                    CATCH CX_DATE_CONVERSION .
    * THERE SHOULD BE NO DATE CONVERSION ERROR.
                  ENDTRY.
                ELSE.
                  <TD_FIELD> = ETK_ROW_WA-CHAVLEXT.
                ENDIF.
              ENDIF.
            ELSE.
    * FAILURE TO FIND THE FIELD IN THE POINTER WILL RESULT IN
    * TRANSACTION DATA INTEGRITY ISSUES, WE SHOULD ERROR OUT
              CONCATENATE FIND_FIELD_ERR ETK_ROW_WA-CHANM
                INTO MESSAGE.
              CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
                EXPORTING
                  MESSAGE = MESSAGE.
            ENDIF.
          ENDIF.
        ENDLOOP.
    * APPEND THE LAST ROW
        IF HAS_DATA IS NOT INITIAL.
          APPEND <TD_WA> TO <TD_TAB>.
        ENDIF.
    * INSERT ALL KEY FIGURES
        LOOP AT KEYFIG_DATA INTO KEYFIG_DATA_WA.
          READ TABLE <TD_TAB> INTO <TD_WA> INDEX KEYFIG_DATA_WA-ROW.
          IF SY-SUBRC <> 0.
    * SUMMARY LINE WHICH INDICATES COMPLETION
            EXIT.
          ENDIF.
    * AVAILABLE KEY FIGURES
          READ TABLE ETK_COL INTO ETK_COL_WA
            INDEX KEYFIG_DATA_WA-COL.
          ASSIGN COMPONENT ETK_COL_WA-CHAVLEXT OF STRUCTURE
            <TD_WA> TO <TD_FIELD>.
          IF SY-SUBRC = 0.
            READ TABLE ME->IT_FIELDCATALOG INTO WA_FIELDCATALOG
              WITH TABLE KEY FIELDNAME = ETK_COL_WA-CHAVLEXT.
            IF WA_FIELDCATALOG-INTTYPE = 'P'.
              DECIMAL_CONV = KEYFIG_DATA_WA-VALUE.
              CALL METHOD CL_ABAP_CONV_DECIMAL=>CONVERT_DECIMAL_EXT2INT
                EXPORTING
                  EXTERNAL_VALUE = DECIMAL_CONV
                CHANGING
                  INTERNAL_VALUE = <TD_FIELD>.
            ELSEIF WA_FIELDCATALOG-INTTYPE = 'F' OR
              WA_FIELDCATALOG-INTTYPE = 'I'.
              <TD_FIELD> = KEYFIG_DATA_WA-VALUE.
            ENDIF.
            MODIFY <TD_TAB> INDEX KEYFIG_DATA_WA-ROW FROM <TD_WA>
              TRANSPORTING (ETK_COL_WA-CHAVLEXT) .
          ELSE.
    * FAILURE TO FIND THE FIELD IN THE POINTER WILL RESULT IN
    * TRANSACTION DATA INTEGRITY ISSUES, WE SHOULD ERROR OUT
            CONCATENATE FIND_FIELD_ERR ETK_ROW_WA-CHANM
              INTO MESSAGE.
            CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
              EXPORTING
                MESSAGE = MESSAGE.
          ENDIF.
        ENDLOOP.
      ENDMETHOD.                   "READ_DATA
      METHOD SET_CHARACTERISTIC_SELECTION.
        DATA: CHARACTERISTIC_SELECTION_WA TYPE UPC_YS_API_CHASEL.
        DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT.
        DATA: CONV_EXIT TYPE STRING.
        DATA: DATE_CONV TYPE STRING.
        DATA: TEMP_DATE TYPE D.
    * basically convert the selection criteria to external values and hold
    * copy of that
        REFRESH ME->CHARACTERISTIC_SELECTION.
        LOOP AT CHARACTERISTIC_SELECTION INTO CHARACTERISTIC_SELECTION_WA.
          READ TABLE ME->IT_FIELDCATALOG INTO WA_FIELDCATALOG
            WITH TABLE KEY FIELDNAME = CHARACTERISTIC_SELECTION_WA-CHANM.
          IF SY-SUBRC = 0.
            IF NOT WA_FIELDCATALOG-CONVEXIT IS INITIAL.
              DATA: CONVEXIT_WA TYPE CONVEXIT_LOOKUP_S.
              READ TABLE ME->CONVEXIT_LOOKUP INTO CONVEXIT_WA
                WITH TABLE KEY CONVEXIT = WA_FIELDCATALOG-CONVEXIT.
              CALL METHOD CONVEXIT_WA-O_CONVEXIT->APPLY_CONV_OUTPUT
                EXPORTING
                  INPUT  = CHARACTERISTIC_SELECTION_WA-LOW
                IMPORTING
                  OUTPUT = CHARACTERISTIC_SELECTION_WA-LOW.
              CALL METHOD CONVEXIT_WA-O_CONVEXIT->APPLY_CONV_OUTPUT
                EXPORTING
                  INPUT  = CHARACTERISTIC_SELECTION_WA-HIGH
                IMPORTING
                  OUTPUT = CHARACTERISTIC_SELECTION_WA-HIGH.
            ELSEIF WA_FIELDCATALOG-INTTYPE = 'D'.
    * DATE TYPE CONVERSION BASED ON SAP GUI
              IF NOT CHARACTERISTIC_SELECTION_WA-LOW IS INITIAL.
                TEMP_DATE = CHARACTERISTIC_SELECTION_WA-LOW.
                CALL METHOD CL_ABAP_CONV_DATE=>CONVERT_DATE_INT2EXT
                  EXPORTING
                    INTERNAL_DATE = TEMP_DATE
                  RECEIVING
                    EXTERNAL_DATE = DATE_CONV.
                CHARACTERISTIC_SELECTION_WA-LOW = DATE_CONV.
              ENDIF.
              IF NOT CHARACTERISTIC_SELECTION_WA-HIGH IS INITIAL.
                TEMP_DATE = CHARACTERISTIC_SELECTION_WA-HIGH.
                CALL METHOD CL_ABAP_CONV_DATE=>CONVERT_DATE_INT2EXT
                  EXPORTING
                    INTERNAL_DATE = TEMP_DATE
                  RECEIVING
                    EXTERNAL_DATE = DATE_CONV.
                CHARACTERISTIC_SELECTION_WA-HIGH = DATE_CONV.
              ENDIF.
            ENDIF.
            APPEND CHARACTERISTIC_SELECTION_WA TO
    ME->CHARACTERISTIC_SELECTION.
          ENDIF.
        ENDLOOP.
      ENDMETHOD.                   "SET_CHARACTERISTIC_SELECTION
      METHOD SET_PLANNING_AREA.
        DATA: ES_RETURN TYPE BAPIRET2.
        DATA: E_SUBRC TYPE SY-SUBRC.
    * CHECK TO SEE OF PLANNING AREA IS A MULTI-PLANNING AREA
        CALL FUNCTION 'API_SEMBPS_AREA_GETDETAIL'
          EXPORTING
            I_AREA     = PLANNING_AREA
          IMPORTING
            E_SUBRC    = E_SUBRC
            ES_RETURN  = ES_RETURN
          TABLES
            ETK_CHAPRO = ME->CHARACTERISTICS
            ETK_KYFPRO = ME->KEYFIGURES.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
        ME->PLANNING_AREA = PLANNING_AREA.
    * FIND THE INFOCUBE RELATED TO THE PLANNING AREA
        SELECT SINGLE INFOCUBE FROM UPC_BW_AREA INTO ME->INFOCUBE
          WHERE AREA = PLANNING_AREA.
        CALL METHOD ME->VALIDATE_PLANNING_OBJECTS.
      ENDMETHOD.                   "SET_PLANNING_AREA
      METHOD VALIDATE_PLANNING_OBJECTS.
        DATA: E_SUBRC TYPE SY-SUBRC.
        DATA: ES_RETURN TYPE BAPIRET2.
        DATA: ES_RETURN_T TYPE TABLE OF BAPIRET2.
        DATA: ETK_CHA TYPE TABLE OF UPC_YS_API_PLEVEL_CHA.
        DATA: ETK_CHA_WA TYPE UPC_YS_API_PLEVEL_CHA.
        DATA: CHARACTERISTIC_WA TYPE UPC_YS_API_CHAPRO.
        DATA: KEYFIGURES_WA TYPE UPC_YS_API_KYFPRO.
        DATA: ETK_CHASEL TYPE TABLE OF UPC_YS_API_CHASEL.
        DATA: ETK_KYF TYPE TABLE OF UPC_YS_KYF.
        DATA: ETK_RETURN TYPE TABLE OF BAPIRET2.
        DATA: LINES1 TYPE I.
        DATA: LINES2 TYPE I.
        DATA: E_LEADCOL_COMPL TYPE UPC_YS_API_INFO-LEADCOL_COMPL.
        DATA: ETK_HEAD_INFO TYPE TABLE OF UPC_YS_API_HEAD_INFO.
        DATA: ETK_ROW_INFO TYPE TABLE OF UPC_YS_API_ROW_INFO.
        DATA: ETK_COL_INFO TYPE TABLE OF UPC_YS_API_COL_INFO.
    * CHECK TO SEE IF ITS A MULTI-PLANNING AREA
        READ TABLE ME->CHARACTERISTICS TRANSPORTING NO FIELDS
          WITH KEY CHANM = CL_SEMBPS_DATA_ACCESSOR=>C_MULTIPLAN_AREA.
    * MULTI-PLANNING AREAS SHOULD NOT BE ACCEPTABLE TO THIS AS IT LEADS
    * TO REFERENCING OF PLANNING AREAS IN ITS LEVEL/PACKAGES/LAYOUTS WHICH
    * IS HARDER TO MAINTAIN
        IF SY-SUBRC = 0.
          REFRESH ME->CHARACTERISTICS.
          REFRESH ME->KEYFIGURES.
          CLEAR ES_RETURN.
          ES_RETURN-TYPE = 'E'.
          ES_RETURN-MESSAGE = 'DO NOT USE MULTI-PLANNING AREAS'.
          APPEND ES_RETURN TO ES_RETURN_T.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
            EXPORTING
              RETURN_STRUCTS = ES_RETURN_T.
        ENDIF.
    * CHECK THE PLANNING LEVEL
        CALL FUNCTION 'API_SEMBPS_PLEVEL_GETDETAIL'
          EXPORTING
            I_AREA     = ME->PLANNING_AREA
            I_PLEVEL   = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
          IMPORTING
            E_SUBRC    = E_SUBRC
            ES_RETURN  = ES_RETURN
          TABLES
            ETK_CHA    = ETK_CHA
            ETK_CHASEL = ETK_CHASEL
            ETK_KYF    = ETK_KYF.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGE
          EXPORTING
            E_SUBRC       = E_SUBRC
            RETURN_STRUCT = ES_RETURN.
    * CHECK TO SEE IF THE SAME NUMBER OF CHARACTERISTICS EXISTS IN LEVEL
        DESCRIBE TABLE ME->CHARACTERISTICS LINES LINES1.
        DESCRIBE TABLE ETK_CHA LINES LINES2.
        IF LINES1 <> LINES2.
    * ERROR OUT THE MISSING CHARACTERISTICS FROM THE PLANNING LEVEL
          LOOP AT ME->CHARACTERISTICS INTO CHARACTERISTIC_WA.
            READ TABLE ETK_CHA WITH KEY CHANM = CHARACTERISTIC_WA-CHANM
              TRANSPORTING NO FIELDS.
            IF SY-SUBRC <> 0.
              CLEAR ES_RETURN.
              ES_RETURN-TYPE = 'E'.
              CONCATENATE 'Missing characteristic ' CHARACTERISTIC_WA-CHANM
                ' from planning level ' CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
                INTO ES_RETURN-MESSAGE.
              APPEND ES_RETURN TO ES_RETURN_T.
            ENDIF.
          ENDLOOP.
        ENDIF.
    * CHECK TO SEE IF EVERY CHARACTERISTIC IS AVAIABLE FOR SELECTION IN
    * PACKAGE
        READ TABLE ETK_CHA WITH KEY PACKSEL = SPACE TRANSPORTING NO FIELDS.
        IF SY-SUBRC = 0.
    * ERROR OUT THE CHARACTERISTICS THAT ARE NOT AVAILABLE FOR PACKAGE
    * SELECTIONS
          LOOP AT ETK_CHA INTO ETK_CHA_WA WHERE PACKSEL = SPACE.
            CLEAR ES_RETURN.
            ES_RETURN-TYPE = 'E'.
            CONCATENATE 'Characteristic ' ETK_CHA_WA-CHANM
              ' needs to be available for selection in planning level '
              CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL INTO ES_RETURN-MESSAGE.
            APPEND ES_RETURN TO ES_RETURN_T.
          ENDLOOP.
        ENDIF.
    * CHECK TO SEE IF THE SAME NUMBER OF KEYFIGURES EXISTS IN LEVEL
        DESCRIBE TABLE ME->KEYFIGURES LINES LINES1.
        DESCRIBE TABLE ETK_KYF LINES LINES2.
        IF LINES1 <> LINES2.
    * ERROR OUT THE MISSING KEYFIGURES FROM THE PLANNING LEVEL
          LOOP AT ME->KEYFIGURES INTO KEYFIGURES_WA.
            READ TABLE ETK_KYF WITH KEY KYFNM = KEYFIGURES_WA-KYFNM
              TRANSPORTING NO FIELDS.
            IF SY-SUBRC <> 0.
              CLEAR ES_RETURN.
              ES_RETURN-TYPE = 'E'.
              CONCATENATE 'Missing keyfigure ' KEYFIGURES_WA-KYFNM
                ' from planning level ' CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
                INTO ES_RETURN-MESSAGE.
              APPEND ES_RETURN TO ES_RETURN_T.
            ENDIF.
          ENDLOOP.
        ENDIF.
    * CHECK THE PLANNING LAYOUT
        CALL FUNCTION 'API_SEMBPS_LAYOUT_GETDETAIL'
          EXPORTING
            I_AREA          = ME->PLANNING_AREA
            I_PLEVEL        = CL_SEMBPS_DATA_ACCESSOR=>C_LEVEL
            I_LAYOUT        = CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
          IMPORTING
            E_SUBRC         = E_SUBRC
            E_LEADCOL_COMPL = E_LEADCOL_COMPL
          TABLES
            ETK_HEAD_INFO   = ETK_HEAD_INFO
            ETK_ROW_INFO    = ETK_ROW_INFO
            ETK_COL_INFO    = ETK_COL_INFO
            ETK_RETURN      = ETK_RETURN.
        CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>CHECK_MESSAGES
          EXPORTING
            E_SUBRC        = E_SUBRC
            RETURN_STRUCTS = ETK_RETURN.
    * MAKE SURE THAT HEADER AREA IS EMPTY AS ALL THE DATA READ IS IN LEAD
    * COLUMNS ONLY
        IF NOT ETK_HEAD_INFO[] IS INITIAL.
          CLEAR ES_RETURN.
          ES_RETURN-TYPE = 'E'.
          CONCATENATE 'Header area must be empty in layout '
            CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
            INTO ES_RETURN-MESSAGE.
          APPEND ES_RETURN TO ES_RETURN_T.
        ENDIF.
    * MAKE SURE THAT LAYOUT TYPE IS KEY FIGURES IN DATA COLUMNS
        IF NOT E_LEADCOL_COMPL IS INITIAL.
          CLEAR ES_RETURN.
          ES_RETURN-TYPE = 'E'.
          CONCATENATE 'Layout ' CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
            ' must be of type "Key Figs in data columns"'
            INTO ES_RETURN-MESSAGE.
          APPEND ES_RETURN TO ES_RETURN_T.
        ENDIF.
    * CHECK FOR THE SAME NUMBER OF CHARACTERISTICS IN LEAD COLUMNS OF LAYOUT
    * AND IN PLANNING AREA
        DESCRIBE TABLE ME->CHARACTERISTICS LINES LINES1.
        DESCRIBE TABLE ETK_ROW_INFO LINES LINES2.
        IF LINES1 <> LINES2.
    * ERROR OUT THE MISSING CHARACTERISTICS FROM THE PLANNING LEVEL
          LOOP AT ME->CHARACTERISTICS INTO CHARACTERISTIC_WA.
            READ TABLE ETK_ROW_INFO WITH KEY CHANM = CHARACTERISTIC_WA-CHANM
              TRANSPORTING NO FIELDS.
            IF SY-SUBRC <> 0.
              CLEAR ES_RETURN.
              ES_RETURN-TYPE = 'E'.
              CONCATENATE 'Missing characteristic ' CHARACTERISTIC_WA-CHANM
                ' from planning layout ' CL_SEMBPS_DATA_ACCESSOR=>C_LAYOUT
                INTO ES_RETURN-MESSAGE.
              APPEND ES_RETURN TO ES_RETURN_T.
            ENDIF.
          ENDLOOP.
        ENDIF.
    * IF MESSAGES ARE AVAILBLE FROM CUSTOM CHECKS THROW EXCEPTION
        IF NOT ES_RETURN_T[] IS INITIAL.
          CALL METHOD CL_SEMBPS_DATA_ACCESSOR=>FORCE_ERROR_MESSAGE
            EXPORTING
              RETURN_STRUCTS = ES_RETURN_T.
        ENDIF.
      ENDMETHOD.                   "VALIDATE_PLANNING_OBJECTS
    ENDCLASS.                   "CL_SEMBPS_DATA_ACCESSOR IMPLEMENTATION
    *       CLASS CL_SEMBPS_DATA_ACCESS_FACTORY DEFINITION
    CLASS CL_SEMBPS_DATA_ACCESS_FACTORY DEFINITION.
      PUBLIC SECTION.
        CLASS-METHODS CREATE_DATA_ACCESSOR
          IMPORTING
            PLAN_AREA TYPE UPC_AREA-AREA
            CHARACTERISTIC_SELECTION TYPE UPC_YS_API_CHASEL_T
            DDIC_STRUCTURE_NAME TYPE DD02L-TABNAME OPTIONAL
          EXPORTING
            O_DATA_ACCESSOR TYPE REF TO CL_SEMBPS_DATA_ACCESSOR
          CHANGING
            TRANSACTION_DATA_TABLE TYPE STANDARD TABLE OPTIONAL
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
        CLASS-METHODS GET_PLANNING_AREA_SPECS
          IMPORTING
            PLANNING_AREA TYPE UPC_AREA-AREA
          EXPORTING
            TRANSACTION_DATA_STRUCT TYPE REF TO DATA
            KEYFIGURES TYPE UPC_YS_API_KYFPRO_T
            FIELDCATALOG TYPE LVC_T_FCAT
            CHARACTERISTICS TYPE UPC_YS_API_CHAPRO_T
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
      PRIVATE SECTION.
        CLASS-DATA PLAN_AREA_CACHE TYPE PLAN_AREA_STRUCT_CACHE_T .
        CLASS-METHODS CREATE_DYNAMIC_STRUCTURE
          IMPORTING
            PLANNING_AREA TYPE UPC_AREA-AREA
          EXPORTING
            TRANSACTION_DATA_STRUCT TYPE REF TO DATA
            KEYFIGURES TYPE UPC_YS_API_KYFPRO_T
            FIELDCATALOG TYPE LVC_T_FCAT
            CHARACTERISTICS TYPE UPC_YS_API_CHAPRO_T
          RAISING
            CX_SEM_BPS_DATA_ACCESS .
    ENDCLASS.                   "CL_SEMBPS_DATA_ACCESS_FACTORY DEFINITION
    *       CLASS CL_SEMBPS_DATA_ACCESS_FACTORY IMPLEMENTATION
    CLASS CL_SEMBPS_DATA_ACCESS_FACTORY IMPLEMENTATION.
      METHOD CREATE_DATA_ACCESSOR.
        DATA: TRANSACTION_DATA_STRUCT TYPE REF TO DATA.
        DATA: FIELDCATALOG TYPE LVC_T_FCAT.
        IF TRANSACTION_DATA_TABLE IS SUPPLIED
          AND DDIC_STRUCTURE_NAME IS SUPPLIED AND
          NOT DDIC_STRUCTURE_NAME IS INITIAL.
    * RETRIEVE FIELD CATALOG OF THE DDIC STRUCTURE TO PROVIDE
          CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
            EXPORTING
              I_STRUCTURE_NAME       = DDIC_STRUCTURE_NAME
            CHANGING
              CT_FIELDCAT            = FIELDCATALOG
            EXCEPTIONS
              INCONSISTENT_INTERFACE = 1
              PROGRAM_ERROR          = 2
              OTHERS                 = 3.
          IF SY-SUBRC <> 0.
            MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
          GET REFERENCE OF TRANSACTION_DATA_TABLE INTO
    TRANSACTION_DATA_STRUCT.
        ELSE.
    * GENERATE INTERNAL TABLE AND ITS FIELD CATALOG DYNAMICALLY
          CALL METHOD CL_SEMBPS_DATA_ACCESS_FACTORY=>GET_PLANNING_AREA_SPECS
            EXPORTING
              PLANNING_AREA           = PLAN_AREA
            IMPORTING
              TRANSACTION_DATA_STRUCT = TRANSACTION_DATA_STRUCT
              FIELDCATALOG            = FIELDCATALOG.
        ENDIF.
    * CREATE DATA ACCESSOR
        CREATE OBJECT O_DATA_ACCESSOR
          EXPORTING
            PLANNING_AREA = PLAN_AREA
            IT_FIELDCATALOG = FIELDCATALOG
            TRANSACTION_DATA_TABLE = TRANSACTION_DATA_STRUCT
            CHARACTERISTIC_SELECTION = CHARACTERISTIC_SELECTION.
      ENDMETHOD.                   "CREATE_DATA_ACCESSOR
      METHOD GET_PLANNING_AREA_SPECS.
        DATA: PLAN_AREA_CACHE_WA TYPE PLAN_AREA_STRUCT_CACHE.
        FIELD-SYMBOLS: <TD_TAB_DEFINITION> TYPE STANDARD TABLE.
        READ TABLE PLAN_AREA_CACHE
          WITH TABLE KEY PLANNING_AREA = PLANNING_AREA
          INTO PLAN_AREA_CACHE_WA.
    * CREATE INTERNAL TABLE REFLECTING THE PLANNING AREA AND CACHE IT
    * TO AVOID TOO MANY CALLS TO CREATION OF DYNAMIC INTERNAL TABLES
    * SAP HAS RESTRICTED DEVELOPERS FROM CREATING
        IF SY-SUBRC <> 0.
          CLEAR PLAN_AREA_CACHE_WA.
          CALL METHOD
    CL_SEMBPS_DATA_ACCESS_FACTORY=>CREATE_DYNAMIC_STRUCTURE
            EXPORTING
              PLANNING_AREA           = PLANNING_AREA
            IMPORTING
              TRANSACTION_DATA_STRUCT =
    PLAN_AREA_CACHE_WA-TRANSACTION_DATA_TABLE
              KEYFIGURES              = PLAN_AREA_CACHE_WA-KEYFIGURES
              FIELDCATALOG            = PLAN_AREA_CACHE_WA-FIELDCATALOG
              CHARACTERISTICS         = PLAN_AREA_CACHE_WA-CHARACTERISTICS.
          PLAN_AREA_CACHE_WA-PLANNING_AREA = PLANNING_AREA.
          INSERT PLAN_AREA_CACHE_WA INTO TABLE PLAN_AREA_CACHE.
        ENDIF.
        FIELDCATALOG[] = PLAN_AREA_CACHE_WA-FIELDCATALOG.
        CHARACTERISTICS[] = PLAN_AREA_CACHE_WA-CHARACTERISTICS[].
        KEYFIGURES[] = PLAN_AREA_CACHE_WA-KEYFIGURES[].
        ASSIGN PLAN_AREA_CACHE_WA-TRANSACTION_DATA_TABLE->*
          TO <TD_TAB_DEFINITION>.
    * CREATE A NEW REFERENCE
        CREATE DATA TRANSACTION_DATA_STRUCT LIKE
          <TD_TAB_DEFINITION>.
      ENDMETHOD.                   "GET_PLANNING_AREA_SPECS
      METHOD CREATE_DYNAMIC_STRUCTURE.
        DATA: ES_RETURN TYPE BAPIRET2.
        DATA: E_SUBRC TYPE SY-SUBRC.
        DATA: MESSAGE TYPE STRING.
        CALL FUNCTION 'API_SEMBPS_AREA_GETDETAIL'
          EXPORTING
            I_AREA     = PLANNING_AREA
          IMPORTING
            E_SUBRC    = E_SUBRC
            ES_RETURN  = ES_RETURN
          TABLES
            ETK_CHAPRO = CHARACTERISTICS
            ETK_KYFPRO = KEYFIGURES.
        IF E_SUBRC <> 0.
          MESSAGE = ES_RETURN-MESSAGE.
          RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS
            EXPORTING MESSAGE = MESSAGE.
        ENDIF.
        READ TABLE CHARACTERISTICS TRANSPORTING NO FIELDS
          WITH KEY CHANM = CL_SEMBPS_DATA_ACCESSOR=>C_MULTIPLAN_AREA.
        IF SY-SUBRC = 0.
          MESSAGE = 'DO NOT USE MULTI-PLANNING AREAS'.
          RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS
            EXPORTING MESSAGE = MESSAGE.
        ENDIF.
        DATA: CHAR_WA TYPE UPC_YS_API_CHAPRO.
        DATA: KEYFIG_WA TYPE UPC_YS_API_KYFPRO.
        DATA: WA_FIELDCATALOG TYPE LVC_S_FCAT.
        DATA: RETURN TYPE BAPIRET2.
        DATA: DETAILS TYPE BAPI6108.
    * CHARACTERISTIC FIELDCATALOG
        LOOP AT CHARACTERISTICS INTO CHAR_WA.
          WA_FIELDCATALOG-INTTYPE = CHAR_WA-INTTP.
          WA_FIELDCATALOG-FIELDNAME = CHAR_WA-CHANM.
          WA_FIELDCATALOG-DATATYPE = CHAR_WA-DATATP.
          WA_FIELDCATALOG-INTLEN = CHAR_WA-INTLEN.
          WA_FIELDCATALOG-DECIMALS = CHAR_WA-DECIMALS.
          WA_FIELDCATALOG-OUTPUTLEN = CHAR_WA-OUTPUTLEN.
          CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
            EXPORTING
              INFOOBJECT = CHAR_WA-CHANM
            IMPORTING
              DETAILS    = DETAILS
              RETURN     = RETURN.
          IF RETURN-TYPE = 'E'.
            MESSAGE = RETURN-MESSAGE.
            RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS
              EXPORTING MESSAGE = MESSAGE.
          ENDIF.
          WA_FIELDCATALOG-CONVEXIT = DETAILS-CONVEXIT.
          APPEND WA_FIELDCATALOG TO FIELDCATALOG.
        ENDLOOP.
    * KEYFIGURE FIELDCATALOG
        LOOP AT KEYFIGURES INTO KEYFIG_WA.
          WA_FIELDCATALOG-INTTYPE = KEYFIG_WA-INTTP.
          WA_FIELDCATALOG-FIELDNAME = KEYFIG_WA-KYFNM.
          WA_FIELDCATALOG-DATATYPE = KEYFIG_WA-DATATP.
          WA_FIELDCATALOG-INTLEN = KEYFIG_WA-DIGITS.
          WA_FIELDCATALOG-DECIMALS = KEYFIG_WA-DECIMALS.
          WA_FIELDCATALOG-DD_OUTLEN = KEYFIG_WA-OUTPUTLEN.
          CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
            EXPORTING
              INFOOBJECT = KEYFIG_WA-KYFNM
            IMPORTING
              DETAILS    = DETAILS
              RETURN     = RETURN.
          IF RETURN-TYPE = 'E'.
            MESSAGE = RETURN-MESSAGE.
            RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS
              EXPORTING MESSAGE = MESSAGE.
          ENDIF.
          WA_FIELDCATALOG-CONVEXIT = DETAILS-CONVEXIT.
          APPEND WA_FIELDCATALOG TO FIELDCATALOG.
        ENDLOOP.
    * AVOID TOO MANY CALLS TO THIS FUNCTION MODULE
        IF NOT FIELDCATALOG[] IS INITIAL.
          CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
            EXPORTING
              IT_FIELDCATALOG           = FIELDCATALOG
            IMPORTING
              EP_TABLE                  = TRANSACTION_DATA_STRUCT
            EXCEPTIONS
              GENERATE_SUBPOOL_DIR_FULL = 1
              OTHERS                    = 2.
          CASE SY-SUBRC.
            WHEN 1.
              RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS EXPORTING
                  MESSAGE = 'Dynamic table creation failure on subpool'.
            WHEN 2.
              RAISE EXCEPTION TYPE CX_SEM_BPS_DATA_ACCESS EXPORTING
                  MESSAGE = 'Dynamic table creation failure'.
          ENDCASE.
        ENDIF.
      ENDMETHOD.                   "CREATE_DYNAMIC_STRUCTURE
    ENDCLASS.           "CL_SEMBPS_DATA_ACCESS_FACTORY IMPLEMENTATION
    Look at this link:
    <a href="http://help.sap.com/saphelp_nw04/helpdata/en/cf/21ee19446011d189700000e8322d00/frameset.htm">http://help.sap.com/saphelp_nw04/helpdata/en/cf/21ee19446011d189700000e8322d00/frameset.htm</a>
    Pls reward points.
    Regards,
    Ameet

  • HT1688 i want to know the country of this phone??

    i want to know the country of iphone with imei 012761009787014

    What do you see
    Settings > General > About, against - Carrier

  • I want to change the privacy settings on my e-mail, I provided the password once and now it opens without one

    I want to change the security settings on my e-mail. I provided a password once and now it opens without one. I want to keep my messages private.
    == This happened ==
    Every time Firefox opened
    == When I updated.

    Websites remembering you and automatically log you in is stored in a cookie
    Tools > Options > Privacy > Cookies: "Show Cookies"
    See also [[Cookies]]

  • I purchased CS5 Design Standard about 5 years ago. Now I am trying to install  second PC, but I got a message like " This serial number is not correct."  I want to know the correct serial number, but I missed my ex adobe ID because I've changed my E-mail

    I purchased CS5 Design Standard about 5 years ago. Now I am trying to install  second PC, but I got a message like " This serial number is not correct."  I want to know the correct serial number, but I missed my ex adobe ID because I've changed my E-mail address.

    It is not clear to me what your issue is with not being able to sign in to your Adobe account to find the serial number.  You should still be able to sign in and find your serial number if you registered the software.
    If your first PC is a Windows machine you might be able to extract the serial number from it using the Belarc Advisor
    http://www.belarc.com/free_download.html

  • You want to know the amount of space the transaction log for the Customer database is using. Which T-SQL command would you use?

    You want to know the amount of space the transaction log for the Customer database is using. Which T-SQL command would you use?

    Forced me to do a little research.
    DBCC SQLPERF(logspace)
    See also
    http://stackoverflow.com/questions/198343/how-can-i-get-the-size-of-the-transaction-log-in-sql-2005-programmatically
    For every expert, there is an equal and opposite expert. - Becker's Law
    My blog
    My TechNet articles

  • Hi there, I want to change the background-color of the browser, when a popup-picture is shown. This picture pops up by clicking a hyperlink in the text...can anyone help me please...thanks a lot

    Hi there, I want to change the background-color of the browser, when a popup-picture is shown. This picture pops up by clicking a hyperlink in the text...can anyone help me please...thanks a lot

    Hi,
    CSS is interpreted by your browser, so server cache seems unlikely in htis case. There is however some hierarchy in CSS, so parts of the APEX CSS, theme CSS or page CSS might overwright or block yours.
    Does changing the CSS on runtime affect your page? Eg, run the following in your browser console and see if your page turns black: $('#uBodyContainer').css("background-color","black")
    Also try moving up your css in the hierarchy labeling it as important:
    div#uBodyContainer { 
      background-color:#000000 !important;  
    See:Assigning property values, Cascading, and Inheritance
    Regards,
    Vincent
    http://vincentdeelen.blogspot.com

Maybe you are looking for

  • Connecting to a remote OpenLDAP server over SSL.

    I've been trying for several weeks now to get a remote OpenLDAP server up and running; configured in such a way that it only allows SSL and requires certificate validation. I've created a CA with a self-signed certificate. I used that CA to create a

  • Adobe R/W from CS6 installed on a Windows 7 64 bit computer keeps crashing

    Adobe R/W from CS6 installed on a Windows 7 64 bit computer keeps crashing

  • Role of timing and rate in the buffered acquisition

    Hi I am trying a buffered acquisition.  In the timing VI, when i specify the rate to be around 2000, i do not get any error message and the data acqusition continues. Also i am giving a time of 1000ms in the wait until next millisecond vi in the whil

  • Reading untagged documents keeps popping up

    My computer has Windows 7 Home Premium 64bit and Adobe Reader 9.4.3.  When I open up a pdf, a window Reading Untagged Document pops up wanting me to take an action.  I have looked at all of the preferences as to how to turn this off and have not foun

  • Ipad mini ios installation problem

    new ipad mini when new ios 7 is installed message is coming estimating time remaining - but nothing happens and also couldn't stop download . what is the solution for this