iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0

Hi 大家好

今天來介紹ABAP中的MACRO
宏(Macro)通常是用來封裝一個或多個語句的,這樣可以簡化長或重複的代碼,宏定義後,可以在 ABAP 程序中多次調用。

如何定義宏

定義宏的語法是Define

DEFINE macro_name.
   " 宏的內容
   " 可以是多行 ABAP 語句
END-OF-DEFINITION.

帶參數的宏

用&來傳參數

DEFINE display_parameters.
  WRITE: / 'Parameter 1:', &1, 'Parameter 2:', &2.
END-OF-DEFINITION.

display_parameters 'Hello' 'World'.  "代表第一個參數為Hello 第二個參數為World

輸出來就會長這樣
Parameter 1: Hello Parameter 2: World

實際運用

前面有提到宏是為了解決重複的代碼
像是定義alv欄位也可以用宏解決

data:fields_tb type slis_t_fieldcat_alv with header line.
define: set_alv_field.
  clear: fields_tb.
  fields_tb-fieldname = &1.
  fields_tb-ref_fieldname = &2.
  fields_tb-ref_tabname   = &3.
  fields_tb-no_out        = &4.
  fields_tb-no_zero        = &5.
  if &5 = 'X'.
    fields_tb-decimals_out        = 0.
  endif.
  fields_tb-no_zero        = &5.
  fields_tb-fix_column = &6 .
  fields_tb-outputlen = &7.
  fields_tb-seltext_l = &8.
  fields_tb-seltext_m = &8.
  fields_tb-seltext_s = &8.
  fields_tb-emphasize = 'C300'.

  append fields_tb.
end-of-definition.

定義一個內表fields_tb,結構參照slis_t_fieldcat_alv用來定義欄位屬性

調用宏

  set_alv_field 'MATNR' '' '' '' '' '' '18' 'Material'.
  set_alv_field 'WERKS' '' '' '' '' '' '4' 'Plant'.
  set_alv_field 'MAKTX' '' '' '' '' '' '40' 'Description'.

這樣就可以一次定義多個欄位屬性

以上就是今天的分享
下次如果有遇到code要重複很多次的話
不彷試試看能不能用宏解決吧


上一篇
Day 28 使用ABAP連接外部Data base
下一篇
Day 30 SAP職涯分享
系列文
從0開始的ABAP之旅 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言