Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
jahnavi_venati
Explorer

Hi All,

Let us upload values from excel into Decision table using the BRF+ API’S

Using the following code

PARAMETERS: ip_rule     TYPE rlgrap-filename OBLIGATORY.
CONSTANTSgc_appl_id   TYPE if_fdt_types=>id  VALUE '005056C000081EE58CD3919CB9A80957',"Application GUID
            gc_dt_id    
TYPE if_fdt_types=>id  VALUE '001E671A4F281ED5BD97A46E4673360F',"Decision Table GUID
            gc_xls      
TYPE string  VALUE '.xls',
            gc_dir      
TYPE string  VALUE 'c:\',
            gc_*xls     
TYPE string  VALUE '*.xls'.


TYPES:BEGIN OF ts_msg_txt_data,
            level        
TYPE char24,
            age          
TYPE char24,
            pricing      
TYPE char24,
            base         
TYPE char24,
            currency_base
TYPE char24,
END OF ts_msg_txt_data.

DATAlt_files               TYPE                                      filetable,
       ls_files              
TYPE                                      file_table,
       iv_rcode              
TYPE                                      int4,
       iv_action             
TYPE                                      int4,
       lref_decision_table   
TYPE REF TO                         cl_fdt_decision_table,
       lref_factory          
TYPE REF TO                         if_fdt_factory,
       lt_excel              
TYPE STANDARD TABLE OF  ts_msg_txt_data,
       wa_excel              
TYPE                                      ts_msg_txt_data,
       lt_msg_data           
TYPE                                      if_fdt_decision_table=>ts_table_data,
       ls_msg_data           
LIKE LINE OF                          lt_msg_data,
       lv_row_no             
TYPE                                      int4,
       lts_range             
TYPE                                      if_fdt_range=>ts_range,
       ls_range              
LIKE LINE OF                         lts_range,
       lx_fdt                
TYPE REF TO                        cx_fdt,
       lt_message            
TYPE                                      if_fdt_types=>t_message,
       lv_message            
TYPE                                      string,
       lv_actv_failed        
TYPE                                      abap_bool.

FIELD-SYMBOLS: <lv_value>      TYPE          any,
               <lv_amount>    
TYPE          if_fdt_types=>element_amount,
               <ls_message>   
TYPE          if_fdt_types=>s_message.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ip_rule.


CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
default_extension      
= gc_xls
file_filter            
= gc_*xls
initial_directory      
= gc_dir
CHANGING
file_table             
= lt_files
rc                     
= iv_rcode
user_action            
= iv_action
EXCEPTIONS
file_open_dialog_failed
= 1
cntl_error             
= 2
error_no_gui           
= 3
OTHERS                  = 4.
IF sy-subrc <> 0.
    
MESSAGE WITH 'file_open_dialog'.
ELSE.
READ TABLE lt_files INDEX 1 INTO ls_files.
IF sy-subrc = 0.
     ip_rule
= ls_files-filename.
ENDIF.
ENDIF.

START-OF-SELECTION.
**extraction of ceaser rules fom the excel file
CALL FUNCTION 'UPLOAD_XLS_FILE_2_ITAB'
EXPORTING
i_filename
= ip_rule
TABLES
e_itab    
= lt_excel
EXCEPTIONS
file_error
= 1
OTHERS     = 2.
IF sy-subrc <> 0.
MESSAGE 'Unable to upload file ' TYPE  'E'.
ENDIF.
*generic factory instance
lref_factory
= cl_fdt_factory=>if_fdt_factory~get_instance( gc_appl_id ).
*get the expression the decision table guid
lref_decision_table ?= lref_factory
->get_expression(
iv_id
gc_dt_id )."
lref_decision_table
->if_fdt_transaction~enqueue( ).
DELETE ADJACENT DUPLICATES FROM lt_excel.
LOOP AT lt_excel INTO wa_excel .
lv_row_no
= lv_row_no + 1.
*level
CLEAR: ls_msg_data, ls_range, lts_range.
ls_msg_data
-col_no = 1.
ls_msg_data
-row_no = lv_row_no.
ls_range
-position = 1.
ls_range
-sign     = if_fdt_range=>gc_sign_include.
ls_range
-option   = if_fdt_range=>gc_option_equal.
CREATE DATA ls_range-r_low_value TYPE if_fdt_types=>element_text.
ASSIGN ls_range-r_low_value->* TO <lv_value>.
<lv_value>
= wa_excel-level.
INSERT ls_range INTO TABLE ls_msg_data-ts_range.
INSERT ls_msg_data INTO TABLE lt_msg_data.
*age.
CLEAR: ls_msg_data, ls_range, lts_range.
ls_msg_data
-col_no = 2.
ls_msg_data
-row_no = lv_row_no.
ls_range
-position = 1.
ls_range
-sign     = if_fdt_range=>gc_sign_include.
ls_range
-option   = if_fdt_range=>gc_option_equal.
CREATE DATA ls_range-r_low_value TYPE if_fdt_types=>element_text.
ASSIGN ls_range-r_low_value->* TO <lv_value>.
<lv_value>
= wa_excel-age.
INSERT ls_range INTO TABLE ls_msg_data-ts_range.
INSERT ls_msg_data INTO TABLE lt_msg_data.
*pricing
CLEAR: ls_msg_data, ls_range, lts_range.
ls_msg_data
-col_no = 3.
ls_msg_data
-row_no = lv_row_no.
CREATE DATA ls_msg_data-r_value TYPE if_fdt_types=>element_text.
ASSIGN ls_msg_data-r_value->* TO <lv_value>.
<lv_value>
= wa_excel-pricing.
INSERT ls_msg_data INTO TABLE lt_msg_data.
*base
CLEAR: ls_msg_data, ls_range, lts_range.
ls_msg_data
-col_no = 4.
ls_msg_data
-row_no = lv_row_no.
CREATE DATA ls_msg_data-r_value TYPE if_fdt_types=>element_amount.
ASSIGN ls_msg_data-r_value->* TO <lv_amount>.
<lv_amount>
-number = wa_excel-base .
<lv_amount>
-currency = wa_excel-currency_base .
INSERT ls_msg_data INTO TABLE lt_msg_data.
UNASSIGN <lv_amount>
.
CLEAR wa_excel.
ENDLOOP.
IF lt_msg_data IS NOT INITIAL.
TRY.
lref_decision_table
->if_fdt_decision_table~set_table_data( its_data = lt_msg_data  ).
CATCH cx_fdt INTO lx_fdt.
IF lx_fdt IS NOT INITIAL.
WRITE : / 'Creation of Decision table data failed with exception'.
ENDIF.
ENDTRY.
*    Perform deep activation & saving.
TRY.
lref_decision_table
->if_fdt_transaction~activate(
EXPORTING iv_deep              = abap_true
IMPORTING et_message           = lt_message
ev_activation_failed
= lv_actv_failed ).
CATCH cx_fdt INTO lx_fdt.
IF lx_fdt IS NOT INITIAL.
WRITE : 'Activation failed with exception'.
ENDIF.
ENDTRY.
*  Save all the objects and release all locks.
IF lv_actv_failed EQ abap_true.
lref_decision_table
->if_fdt_transaction~dequeue(
EXPORTING iv_deep              = abap_true ).
WRITE : / 'Deep activation failed'.                 
LOOP AT lt_message ASSIGNING <ls_message>.
MESSAGE ID <ls_message>-msgid TYPE <ls_message>-msgty NUMBER <ls_message>-msgno
WITH <ls_message>-msgv1 <ls_message>-msgv2 <ls_message>-msgv3 <ls_message>-msgv4
INTO lv_message.
WRITE: / 'Reason : -',lv_message.                 
ENDLOOP.
ELSE.
TRY.
lref_decision_table
->if_fdt_transaction~save(
EXPORTING iv_deep              = abap_true ).
CATCH cx_fdt INTO lx_fdt.
WRITE : / 'Save failed with exception'.         
LOOP AT lx_fdt->mt_message ASSIGNING <ls_message>.
WRITE :/ <ls_message>-text.
ENDLOOP.
ENDTRY.
lref_decision_table
->if_fdt_transaction~dequeue(
EXPORTING iv_deep              = abap_true ).
ENDIF.

ENDIF.
WRITE:'DT Updated successfully'.


Input file has following values which need to be inserted into decision table.

While execution of report provide the input file as shown in below screen shot and Click on Execute.

We get the following output.

Now in Decision table we get the values in BRF+ Workbench as shown in below screen .

10 Comments
Labels in this area