如下图,使用最少的更改给SM30添加排序的功能。

SM30添加排序功能_创建表


实现方法:

在直接给表或者维护视图创建表维护后,做下面几个步骤:

1、由使用标准GUI Status改为使用自己的GUI Status

SM30添加排序功能_活动状态_02

SM30添加排序功能_活动状态_03

SM30添加排序功能_创建表_04


2、修改生成的GUI Status,添加排序按钮。

需要修改EALX、ESLG、EULG。

SM30添加排序功能_ico_05


3、添加代码:

SM30添加排序功能_活动状态_06

SM30添加排序功能_活动状态_07

MODULE sort_table INPUT.
DATA: fname(40),
offset TYPE i,
len TYPE i.
DATA: wa_dd03l TYPE dd03l.
FIELD-SYMBOLS: <fs> .

CHECK function(4) = 'SORT'.

GET CURSOR FIELD fname .
SPLIT fname AT '-' INTO fname fname .

CLEAR: offset,len.
SELECT * INTO wa_dd03l FROM dd03l
WHERE tabname = x_header-maintview
ORDER BY position.

IF wa_dd03l-fieldname = fname.
len = wa_dd03l-intlen.
EXIT.
ELSE.
offset = offset + wa_dd03l-intlen.
ENDIF.
ENDSELECT.

ASSIGN extract+offset(len) TO <fs>.

IF function = 'SORTA'.
SORT extract STABLE BY <fs> .
ELSEIF function = 'SORTD'.
SORT extract STABLE BY <fs> DESCENDING .
ENDIF.
ENDMODULE. " sort_table INPUT


现在就可以在SM30实现排序的功能了:

SM30添加排序功能_创建表_08


需要注意的点:

1、添加按钮的时候,如果是红色的非活动状态,要更改为活动状态

2、要注意激活Status

3、sort_table的代码只适合非UNICODE系统,如果是UNICODE系统需要做调整。

4、排序时不需要选中列,只要把光标放到需要排序的列内,点击排序按钮就可以了。

5、只支持单列排序。


SM30添加排序功能_活动状态_09