Friday, June 25, 2010

Application Form: Create Link to other clients


During Unit Testing/ System Integration Testing period, it is advisable to create application form link in other clients instead of creating application for each and every client. Thus, changes in development client are reflected in other clients. (Please take note this is simple a link, no objects are copied).


You can specify the target client and existing active application form that you want to create link to.

Tuesday, June 22, 2010

FREE_SELECTIONS_EX_2_WHERE


This FM helps to construct WHERE conditions of a select statement. This is useful if you have the requirement to  implement a dynamic select statement.

How to implement it?
You have to initiate Type Group RSDS by using TYPE-POOL keyword. After that, you need a internal table and structure of type RSDS_EXPR. This will store the expression of the selection:

RSDS_EXPR-TABLENAME -> Table Name
RSDS_EXPR-EXPR_TAB-> Itab stores the expressions
  • RSDS_EXPR-EXPR_TAB-LOGOP              -> Logical Operation ("AND", "OR", "NOT", only)
  • RSDS_EXPR-EXPR_TAB-ARITY                -> Priority of Logical Operation
  • RSDS_EXPR-EXPR_TAB-FIELDNAME     -> Table's field name for selection
  • RSDS_EXPR-EXPR_TAB-OPTION             -> Selection Option ("EQ", "BT", "CP", "GT", and etc.)
  • RSDS_EXPR-EXPR_TAB-LOW                   -> Value - Low
  • RSDS_EXPR-EXPR_TAB-HIGH                  -> Value - High
Note: If the intended WHERE condition is:
WHERE hvorg EQ '0600'
   AND ( tvorg EQ '0010'
        OR tvorg EQ '0011' )
   AND augst EQ ''
  AND augrd NE '05'.

RSDS_EXPR-EXPR_TAB shall be populated in this manner:

The result would be:

Monday, June 21, 2010

How to debug Background Job (Part 3)

1. During implement your code, Call FM 'C160_HOLD_FOR_DEBUG'.
2. Go to System -> User Profile -> Own Data or T-Code SU03.

3. Add a User Master Parameter ID, 'ESN' and flag it with 'X'. Data stored in Table USR05.

4. This FM will run a infinite loop now and you can debug via SM50.

Thursday, June 17, 2010

How to debug Background Job (Part 2)

1. Write an infinite loop in your code.
DATA: lv_infinite TYPE i.

WHILE lv_infinite EQ 0.
ENDWHILE.
2. Then go to SM50, select the program and then go to:
Program/Session -> Program ->Debugging

Tuesday, June 15, 2010

How to debug Background Job (Part 1)


1. Go to SM37, choose the background job that you want to debug.
2. Enter 'JDBG' (Without '/') at Command Field.

Saturday, June 12, 2010

CRM_ORDER_READ

  1. When you have the BP Number, Get the HEADER_GUID and ITEM_GUID from CRMD_ORDER_INDEX table.
  2. Call FM 'CRM_ORDER_READ' and export these HEADER_GUID and ITEM_GUID to IT_HEADER_GUID and IT_ITEM_GUID.
  3. Set the calling mode to IV_MODE:
    • A = Create
    • B = Change
    • C = Display
    • D = Delete
  4. Export object name such as 'TEXTS', 'ORDERADM_H'  and etc. to IT_REQUESTED_OBJECTS, this is important steps on the performance tuning.
  5. Import the results from the ET_ internal table, suchs as ET_TEXT, ET_ORDERADM_H, and etc.

Tuesday, June 1, 2010

ZUT_GET_LOCAL_TIME_BY_UNAME





LOGIC
----------------------------------------------------------------------
Purpose: Get Local Time according to the user's time zone, or time zone provided.
----------------------------------------------------------------------
  1. Get Time Zone
    • IF im_uname is provided, get tzone from table usr02.
    • ELSEIF im_tzone is provided, tzone = im_tzone.
    • ELSE default tzone to 'UTC'
  2. Get Current Time Stamp
    • IF im_timestamp is not provided, call FM 'TZ_UTC_SYSTEMCLOCK' => UTC timestamp
  3. Get Local Time
    • Call FM 'TZ_GLOBAL_TO_LOCAL' to get local time.



SAMPLE CODE
----------------------------------------------------------------------
FUNCTION zut_get_local_time_by_uname. 
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IM_UNAME) TYPE  SYUNAME OPTIONAL
*"     REFERENCE(IM_TZONE) TYPE  TZNZONE OPTIONAL
*"     REFERENCE(IM_TIMESTAMP) TYPE  TZNTIMESTP OPTIONAL
*"  EXPORTING
*"     REFERENCE(EX_LOCAL_DATE) TYPE  SYSTDATLO
*"     REFERENCE(EX_LOCAL_TIME) TYPE  SYSTTIMLO
*"     REFERENCE(EX_LOCAL_TIMESTAMP) TYPE  TZNTIMESTP
*"----------------------------------------------------------------------
*--------------------------------------*
* DECLARATION                          *
*--------------------------------------*
  
DATA: lv_tzone       LIKE ttzdata-tzone,
        lv_timestamp   
TYPE ttzdata-timestamp.
*--------------------------------------*
* TIME ZONE PREPARATION                *
*--------------------------------------*
  
IF im_uname IS NOT INITIAL.
    
SELECT SINGLE tzone
       
INTO lv_tzone
       
FROM  usr02
       
WHERE bname EQ im_uname.
    
IF sy-subrc NE 0.
      
 
IF im_tzone IS NOT INITIAL.
      
      lv_tzone = im_tzone.
      
 
ELSE.
      
      lv_tzone = 
'UTC'.
      
 
ENDIF.
    ELSE.
      
IF lv_tzone IS INITIAL.
        
IF im_tzone IS NOT INITIAL.
      
      lv_tzone = im_tzone.
      
 
ELSE.
      
      lv_tzone = 
'UTC'.
      
 
ENDIF.
      
ENDIF.
    
ENDIF.
  
ELSEIF im_tzone IS NOT INITIAL.
    lv_tzone = im_tzone.
  
ELSE.
    lv_tzone = 
'UTC'.
  
ENDIF.
*--------------------------------------*
* TIMESTAMP PREPARATION                *
*--------------------------------------*
  
IF im_timestamp IS NOT INITIAL.
    lv_timestamp = im_timestamp.
  
ELSE.
    
CALL FUNCTION 'TZ_UTC_SYSTEMCLOCK'
      
IMPORTING
*        UTC_DATE      =
*        UTC_TIME      =
        utc_timestamp = lv_timestamp
      
EXCEPTIONS
        
OTHERS        = 1.
    
IF sy-subrc NE 0.
      lv_timestamp = sy-datum.
      lv_timestamp+
8 = sy-uzeit.
    
ENDIF.
  
ENDIF.
*--------------------------------------*
* GET LOCAL TIME                       *
*--------------------------------------*
  
CALL FUNCTION 'TZ_GLOBAL_TO_LOCAL'
    
EXPORTING
*      DATE_GLOBAL        = '00000000'
      timestamp_global    = lv_timestamp
      timezone            = lv_tzone
 

*      TIME_GLOBAL        = '000000'
    
IMPORTING
      date_local          = ex_local_date
      timestamp_local     = ex_local_timestamp
      time_local          = ex_local_time
    
EXCEPTIONS
      
OTHERS              = 4.
ENDFUNCTION.