二维码

向导生成的table control中按钮bug原因分析

Twilight发表于 2015-03-09 16:33qshiou 最后回复于 2015-07-02 17:51 [复制链接] 6346 4

维护数据的需求,我们喜欢用table control来实现,多数时候用向导来生成代码,这样来开发很简单,减少了不少工作量,但是向导生成的标准代码不是100%符合要求的,也需要我们微调,例如下面的一些情况。

向导新建‘TC_400’名称的table control然后向导在400screen生成如下逻辑流:
  1. PROCESS BEFORE OUTPUT.
  2. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_400'
  3.   MODULE tc_400_change_tc_attr.
  4. *&SPWIZARD: MODULE TC_400_CHANGE_COL_ATTR.
  5.   LOOP AT   gt_list
  6.        INTO gs_list
  7.        WITH CONTROL tc_400
  8.        CURSOR tc_400-current_line.
  9.     MODULE tc_400_get_lines.
  10. *&SPWIZARD:   MODULE TC_400_CHANGE_FIELD_ATTR
  11.   ENDLOOP.

  12.   MODULE status_0400.
  13. *
  14. PROCESS AFTER INPUT.
  15. *&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_400'
  16.   LOOP AT gt_list.
  17.     CHAIN.
  18.       FIELD gs_list-matnr MODULE set_matnr.
  19.       FIELD gs_list-maktx MODULE set_maktx.
  20.       FIELD gs_list-lifnr MODULE set_lifnr.
  21.       FIELD gs_list-name1 MODULE set_name1.
  22.       FIELD gs_list-matnr_m MODULE set_matnr_m.
  23.       FIELD gs_list-ddtext MODULE set_ddtext.
  24.       FIELD gs_list-datab.
  25.       FIELD gs_list-datae MODULE set_datae.
  26.       MODULE tc_400_modify ON CHAIN-REQUEST.
  27.     ENDCHAIN.
  28.     FIELD gs_list-mark
  29.       MODULE tc_400_mark ON REQUEST.
  30.   ENDLOOP.
  31.   MODULE tc_400_user_command.
  32. *&SPWIZARD: MODULE TC_400_CHANGE_TC_ATTR.
  33. *&SPWIZARD: MODULE TC_400_CHANGE_COL_ATTR.
复制代码

有时我们自定义按钮,明明做了一些ok_code的清空,但是回车老是捕捉到上一次的ok_code
  1. MODULE user_command_0400 INPUT.
  2.   CLEAR save_ok.
  3.   save_ok = ok_code.
  4.   CLEAR ok_code.
  5.   CASE save_ok.
  6.     WHEN 'SAVE'.
  7.     WHEN 'EXIT'.
  8.       LEAVE PROGRAM.
  9.     WHEN 'BACK' OR 'CANCEL'.
  10.       REFRESH gt_list.
  11.       LEAVE TO SCREEN 0.
  12.     WHEN 'EXCEL'.
  13.       PERFORM frm_execl_to_it.
  14.     WHEN 'CHECK'.
  15.       IF gt_list[] IS NOT INITIAL.
  16.         PERFORM frm_400_check.
  17.       ELSE.
  18.         MESSAGE s208(00) DISPLAY LIKE 'E' WITH '没有数据,请输入!'.
  19.         EXIT.
  20.       ENDIF.
  21.   ENDCASE.
  22.   CLEAR: save_ok.
复制代码

我们结果分析发现,在MODULE tc_400_user_command.向导生成的module中对ok_code重新赋值了,故出现如上问题。
我们可以添加如下语句 来解决问题
  1. IF ok_code(6) EQ 'TC_400'.
  2. ......
  3. ENDIF.
复制代码

ok_code.jpg
向导生成的MODULE tc_400_modify ON CHAIN-REQUEST.中,通常需要添加如下代码:
TC_MODIFY.jpg
看代码你就应该知道什么意思了吧
回复

使用道具 举报

xacwc
楼主真强大,赞一个........
回复 支持 反对

使用道具 举报

qshiou
IF ok_code(6) EQ 'TC_400'. 解决了困扰我好久的问题,非常感谢楼主。弱弱地问下modify那里加
IF SY-SUBRC NE 0 AND GS_LIST  IS NOT INITIAL. 这个是什么情形需要
回复 支持 反对

使用道具 举报

Twilight
qshiou 发表于 2015-7-2 16:20
IF ok_code(6) EQ 'TC_400'. 解决了困扰我好久的问题,非常感谢楼主。弱弱地问下modify那里加
IF SY-SUBR ...

APPEND是TC界面新增数据,modify只能是TC界面有数据更新
回复 支持 反对

使用道具 举报

qshiou
leon 发表于 2015-7-2 16:37
APPEND是TC界面新增数据,modify只能是TC界面有数据更新

感谢楼主,楼主棒棒哒
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表