abap--如何根据动态公式计算数据(增补),谢谢网友补充

来源:互联网 发布:nginx rewrite break 编辑:程序博客网 时间:2024/05/01 07:19

最近有位同事在项目中碰到一个问题,需要动态公式计算数据。我们开始想到自动生成子程序,但是动态生成子程序有个数限制(不能超过36个),我们只好另寻他法。 由于以前看过abap调用javascript的应用,我就想到了javascript。具体代码如下(就是要求大家去学习javascript的语法):

方法一

report ZDEMO_COMPILE.
data jj type i.
perform Dynamicformula  using ' 900 + 7  % 3 ' jj.
write / jj.
perform Dynamicformula  using ' 900 + ( 7 + 10 )  % 3 ' jj.
write / jj.
perform Dynamicformula  using ' 900 * 30 + ( 7 + 10 )  % 3 ' jj.
write / 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.                    "Dynamicformula

方法二


CALL FUNCTION 'EVAL_FORMULA'
  EXPORTING
    FORMULA                       = ' ( 9 * 10 + ( 7 + 10 ) * 2 )  div 3  '
 IMPORTING
   VALUE                         = jj
          .
write / jj.

Javascript 操作符列表

算术运算符
说明  符号 
加法  +
递减  --
除法  /
递增  ++
取模算法  %
乘法  *
减法  -
一元求反  -
 

所有算术运算符都对数值数据执行计算。当任一操作数为字符串时,加法运算符还执行字符串串联操作。

逻辑运算符
说明  符号 
相等  ==
 大于或等于  >=
 大于  >
 恒等  ===
 包含在其中  in
 不相等  !=
 小于或等于  <=
 小于  <
 逻辑“与”  &&
 逻辑“非”  !
 逻辑“或”  ||
 不全等  !==
 
逻辑运算符返回Boolean值。根据运算符的不同,值可以表示比较、测试或组合的结果。

位运算符
说明  符号 
按位“与”  &
 按位左移  <<
 按位“非”  ~
 按位“或”  |
 按位右移  >>
 按位“异或”  ^
 无符号右移  >>>
 
位操作符对操作数的二进制表示形式执行操作。如果操作数相互不兼容,将强迫使它们成为适当的类型。有关更多信息,请参见按位运算符强制。

赋值运算符
说明  符号 
赋值  =
 复合加法赋值  +=
 复合按位“与”赋值  &=
 复合按位“或”赋值  |=
 复合按位“异或”赋值  ^=
 复合除法赋值  /=
 复合左移赋值  <<=
 复合取模赋值  %=
复合乘法赋值  *=
 复合右移赋值  >>=
 复合减法赋值  -=
 复合无符号右移赋值  >>>=
 
所有的赋值运算符都返回赋给左操作数的值。

其他运算符
说明  符号 
逗号  ,
 条件(三元)  ?:
 删除  delete
 确定实例  instanceof
 新建  new
 Typeof  typeof
 返回空  void