写作于2017年2月17日。

Java和ABAP只能根据字符串通过反射获得变量的metadata,像标题描述的这个需求听起来有点怪。需求是Mervin实现Range search时需要根据range table的内容来动态拼OPEN SQL,OPEN SQL里的statement必须是range table的变量名。
AG9:
这四个参数模拟search支持的attribute,如果runtime时候哪个参数传了值进去,就把哪个参数名拼到SQL去:

根据变量值取得变量的参数名

具体实现:

  method BUILD_SQL.
* Jerry: move this logic to constructor!!

  data: lt_arg TYPE TABLE OF SEOSUBCODF.
  SELECT * INTO TABLE lt_arg FROM SEOSUBCODF WHERE clsname = 'ZCL_SQL'
     and cmpname = 'BUILD_SQL'.
* Jerry: end.

  DATA: lv_result TYPE string value 'select from XXX'.

  LOOP AT lt_arg ASSIGNING FIELD-SYMBOL(<arg>).
     ASSIGN (<arg>-sconame) TO FIELD-SYMBOL(<arg_value>).
     IF sy-subrc = 0 and <arg_value> IS NOT INITIAL.
        lv_result = | { lv_result } WHERE { <arg>-sconame } = { <arg_value> } |.
     ENDIF.
  ENDLOOP.
  WRITE: / lv_result.
  endmethod.

测试:

根据变量值取得变量的参数名

输出:
参数名已经动态拼到SQL里去了:

根据变量值取得变量的参数名

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
根据变量值取得变量的参数名

相关文章:

  • 2021-05-30
  • 2022-12-23
  • 2021-09-06
  • 2022-12-23
  • 2021-12-05
  • 2020-05-08
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-16
  • 2021-06-09
  • 2021-05-25
  • 2022-01-03
  • 2022-12-23
  • 2021-12-28
  • 2021-08-07
相关资源
相似解决方案