ABAP Help Document(27):12 Program Parameters


12.Program Parameters

12.1 Parameter In SAP Memory

SAP内存是当前应用程序服务器的一个特定于用户的内存区域,用户会话的所有主会话都可以一次访问该内存区域。SPA/GPA parameter定义ID最长为20个字符,存储在SAP内存中。SPA/GPA parameter参数名维护在Table:TPARA中。

语法:

SET PARAMETER ID pid FIELD dobj.

语法:
GET PARAMETER ID pid FIELD dobj.

12.2Language Environment

1.Text Pools

Text Pools支持Executable programs;Class pools;Function groups;Module pools;Subroutine pools。

profile parameter :zcsa/second_language,当没有Text Pools时,使用配置;

使用SET LANGUAGE,在执行program时指定语言;

语法:

SET LANGUAGE lang.

lang:在T002表,字段SPRAS维护。

READ TEXTPOOL,获取读取Text Pools,或使用function: SELECTION_TEXTS_MODIFY and SELECTION_TEXTS_DTEL。

示例:

FORM f_program_param.
  DATA:lt_langu LIKE TABLE OF sy-langu.
  DATA:ls_langu LIKE LINE OF lt_langu.
  "获取t002表语言
  SELECT spras FROM t002 INTO TABLE lt_langu.
  LOOP AT lt_langu INTO ls_langu.
    "设置语言
    SET LANGUAGE ls_langu.
    IF sy-subrc = 0.
      WRITE:/ ls_langu, text-010.
    ENDIF.
  ENDLOOP.
ENDFORM

2Text Environment

SAP code page维护表:TCP0C

Name

Key

Meaning

PLATFORM

Operating system of the application server

LANGU

Language key

COUNTRY

Country key

MODIFIER

Locale key (is not used)

LOCALE

Operating system locale

CHARCO

SAP code page number

CHARCOMNLS

obsolete

语法:

SET LOCALE LANGUAGE lang [obsolete_parameters].

语法:

GET LOCALE LANGUAGE lang [obsolete_parameters].

示例:

"指定code page
FORM f_program_param1.
  DATA:lv_text TYPE c LENGTH 3.
  FIELD-SYMBOLS: TYPE x.
  "不同编码规则
  ASSIGN lv_text TO  CASTING.
  lv_text = '??ü'.
  WRITE:/ .

  SET LOCALE LANGUAGE 'E'.
  TRANSLATE lv_text TO UPPER CASE.
  WRITE:/ .

  lv_text = '??ü'.
  SET LOCALE LANGUAGE 'R'.
  TRANSLATE lv_text TO UPPER CASE.
  WRITE:/ .
  SET LOCALE LANGUAGE ' '.
ENDFORM

3Formatting Settings

数字格式,小数点千分符;

日期格式,顺序及符号;

时间格式,12、24小时格式;

CL_ABAP_TIMEFM时间格式帮助类;

配置表Table:T005X,不同country,数字、日期、时间格式设置;

语法:

SET COUNTRY cntry.

指定T005X表配置默认country格式。

数字格式,栏位XDEZP:

XDEZP

Decimal Separator

Thousands Separator

" "

","

"."

"."

","

","

" "

日期格式,栏位DATFM:

DATFM

Date Format

"1"

dd.mm.yyyy

"2"

mm/dd/yyyy

"3"

mm-dd-yyyy

"4"

yyyy.mm.dd

"5"

yyyy/mm/dd

"6"

yyyy-mm-dd

"7"

ggyy.mm.dd, Japanese date

"8"

ggyy/mm/dd, Japanese date

"9"

ggyy-mm-dd, Japanese date

"A"

yyyy/mm/dd, Islamic date 1

"B"

yyyy/mm/dd, Islamic date 2

"C"

yyyy/mm/dd, Iranian date

时间格式,TIMEFM栏位:

TIMEFM

Time Format

24-hour format (default setting) hh:mm:ss

12-hour format (1 to 12) hh:mm:ss AM and hh:mm:ss PM

12-hour format (1 to 12) hh:mm:ss am and hh:mm:ss pm

12-hour format (0 to 11) hh:mm:ss AM and hh:mm:ss PM

12-hour format (0 to 11) hh:mm:ss am and hh:mm:ss pm

示例:

"指定format
FORM f_program_param2.
  DATA:lt_t005x TYPE TABLE OF t005x.
  DATA:ls_t005x LIKE LINE OF lt_t005x.
  DATA:lv_num TYPE P LENGTH 8 DECIMALS 4 VALUE '123456.6678'.
  DATA:lv_date TYPE D.
  DATA:lv_time TYPE T.
  DATA:lv_str TYPE string.
  lv_date = sy-datum.
  lv_time = sy-uzeit.

  "获取domain
  DATA:lt_fixvals TYPE ddfixvalues.
  DATA:ls_fixvals LIKE LINE OF lt_fixvals.
  DATA:lo_descr TYPE REF TO cl_abap_elemdescr.
  DATA:lv_index TYPE I.
  "获取Domain
  lo_descr ?= cl_abap_elemdescr=>describe_by_name( 'T005X-DATFM' ).
  lt_fixvals = lo_descr->get_ddic_fixed_values( p_langu = sy-langu ).
  LOOP AT lt_fixvals INTO ls_fixvals.
    CLEAR ls_t005x.
    ls_t005x-land = '@' && ls_fixvals-low.
    "数字格式有三种
    lv_index = sy-tabix.
    lv_index = lv_index MOD 3.
    CASE lv_index.
      WHEN 0.
        ls_t005x-xdezp = ''.
      WHEN 1.
        ls_t005x-xdezp = 'X'.
      WHEN 2.
        ls_t005x-xdezp = 'Y'.
    ENDCASE.
    "日期格式
    ls_t005x-datfm = ls_fixvals-low.
    "时间格式
    lv_index = sy-tabix.
    lv_index = lv_index MOD 5.
    CASE lv_index.
      WHEN 0.
        ls_t005x-timefm = '0'.
      WHEN 1.
        ls_t005x-timefm = '1'.
      WHEN 2.
        ls_t005x-timefm = '2'.
      WHEN 3.
        ls_t005x-timefm = '3'.
      WHEN 4.
        ls_t005x-timefm = '4'.
    ENDCASE.
    APPEND ls_t005x TO lt_t005x.
  ENDLOOP.
  "更新到数据库表
  MODIFY t005x FROM TABLE lt_t005x.

  "查询
  SELECT * FROM t005x INTO TABLE lt_t005x WHERE land LIKE '@%'.
  LOOP AT lt_t005x INTO ls_t005x.
   CLEAR lv_str.
   lv_str = 'Language:' && ls_t005x-land && '---'
    && |{ lv_num COUNTRY = ls_t005x-land }|.
   lv_str = lv_str && '---' && |{ lv_date COUNTRY = ls_t005x-land }|.
   lv_str = lv_str && '---' && |{ lv_time COUNTRY = ls_t005x-land }|.
   WRITE:/ lv_str.
  ENDLOOP.

  "删除添加记录
  DELETE FROM t005x WHERE land LIKE '@%'.
ENDFORM.