方式-:调用函数EVAL_FORMULA。
FUNCTION zfmtr6007_001.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_FORMULA) TYPE CHAR40 OPTIONAL
*" VALUE(I_A) TYPE DMBTR OPTIONAL
*" VALUE(I_B) TYPE DMBTR OPTIONAL
*" VALUE(I_C) TYPE DMBTR OPTIONAL
*" VALUE(I_D) TYPE DMBTR OPTIONAL
*" VALUE(I_E) TYPE DMBTR OPTIONAL
*" VALUE(I_F) TYPE DMBTR OPTIONAL
*" VALUE(I_G) TYPE DMBTR OPTIONAL
*" EXPORTING
*" REFERENCE(DATAP) TYPE DMBTR
*"----------------------------------------------------------------------
DATA: dataf TYPE f.
gv_a = i_a.
gv_b = i_b.
gv_c = i_c.
gv_d = i_d.
CALL FUNCTION 'EVAL_FORMULA'
EXPORTING
formula = i_formula
program = sy-repid
routine = 'VAR_GET'
IMPORTING
value = dataf
EXCEPTIONS
division_by_zero = 1
exp_error = 2
formula_table_not_valid = 3
invalid_expression = 4
invalid_value = 5
log_error = 6
parameter_error = 7
sqrt_error = 8
units_not_valid = 9
missing_parameter = 10
OTHERS = 11.
* IF sy-subrc <> 0.
* WRITE:/ i_formula, sy-subrc ,' ERROR!'.
* ELSE.
MOVE dataf TO datap.
* WRITE:/ i_formula, datap.
*
* ENDIF.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM VAR_GET *
*---------------------------------------------------------------------*
FORM var_get USING VALUE(name)
CHANGING VALUE(value)
VALUE(subrc).
subrc = 0.
value = 0. "Default if other than A B C D
CASE name.
WHEN 'A'.
value = gv_a.
WHEN 'B'.
value = gv_b.
WHEN 'C'.
value = gv_c.
WHEN 'D'.
value = gv_d.
WHEN 'E'.
value = gv_e.
WHEN 'F'.
value = gv_f.
WHEN 'G'.
value = gv_g.
ENDCASE.
ENDFORM. "VAR_GET
方式二:使用类CL_JAVA_SCRIPT调用js。
DATA jj TYPE i.
DATA lj TYPE string VALUE '900 + 7 * 2'.
PERFORM dynamicformula USING lj jj.
WRITE lj && ' = ' && jj .
*&---------------------------------------------------------------------*
*& Form Dynamicformula
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->SOURCE text
* -->RE text
*----------------------------------------------------------------------*
FORM dynamicformula USING formula TYPE string
CHANGING re TYPE i.
DATA source TYPE string.
DATA return_value TYPE string.
DATA js_processor TYPE REF TO cl_java_script.
js_processor = cl_java_script=>create( ).
CONCATENATE 'result = ' formula ';' INTO source.
return_value = js_processor->evaluate( source ).
re = return_value.
ENDFORM. "Dynamicform