ABAP实现动态的表达式计算的2种方式

方式-:调用函数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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值