Code Tips
文字列の比較
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABAP Objects'.
str2 = 'Objects'.
IF str1 CS str2.
WRITE: / str2, 'is contained from position', sy-fdpos, 'in', str1.
ENDIF.
通貨データ内部形式⇔外部形式変換
REPORT ysz_currency_test01.
* bseg-wrbtr : 会計伝票明細-伝票通貨額(CURR 13.2)
DATA : int_price TYPE bseg-wrbtr. " 内部形式用変数
DATA : ext_price TYPE bapicurr-bapicurr. " 外部形式用変数
DATA : ret TYPE bapireturn.
* 内部形式 : 100,000円
int_price = '1000.00'.
* 内部形式 ⇒ 外部形式
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
currency = 'JPY'
amount_internal = int_price
IMPORTING
amount_external = ext_price.
WRITE: / int_price, ' => ', ext_price. " 1,000.00 => 100,000.0000
* 外部形式 ⇒ 内部形式
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTING
currency = 'JPY'
amount_external = ext_price
max_number_of_digits = '13'
IMPORTING
amount_internal = int_price
return = ret.
WRITE: / ext_price, ' => ', int_price. " 100,000.0000 => 1,000.00
ファイルからの読み込み
DATA f TYPE string.
DATA l TYPE string.
f = '/usr/test.txt'.
OPEN DATASET f FOR INPUT
IN TEXT MODE.
DO.
READ DATASET f INTO l.
IF sy-subrc NE 0.
EXIT.
ENDIF.
WRITE / l.
ENDDO.
CLOSE DATASET f.
millisecondまで含むタイムスタンプの出力
DATA:
* 長形式(長さ11の小数点以下桁数7のデータタイプp)
l_st TYPE timestampl.
DATA: time_char(32) TYPE c.
GET TIME STAMP FIELD l_st.
MOVE l_st TO time_char.
* 頭のスペースを取り除く
CONDENSE time_char.
WRITE:/ 'TIME STAMP : ' , time_char.
WRITE:/ 'YYYYMMDD : ', time_char+0(8). " show date
WRITE:/ 'HHMMSS : ', time_char+8(6). " show time
WRITE:/ 'mmm : ', time_char+15(3). " show milliseconds
結果
TIME STAMP : 20061127024720.6008920
YYYYMMDD : 20061127
HHMMSS : 024720
mmm : 600
Lock Object利用によるロック
PARAMETER param TYPE c LENGTH 10 LOWER CASE DEFAULT 'test'.
PARAMETER p1 TYPE YSZTEST01-MANDT DEFAULT '200'.
START-OF-SELECTION.
CALL FUNCTION 'ENQUEUE_EZ_YSZTEST01'
EXPORTING
mode_ysztest01 = 'E'
mandt = p1
col1 = 'TEST'
* X_KEYFIELD1 = ' '
* X_KEYFIELD2 = ' '
* X_KEYFIELD3 = ' '
_SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
* If exceptions are not used, message is displayed within FM
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Retrieve message displayed within Function Module
MESSAGE ID sy-msgid
TYPE 'I'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
else.
write:/ 'ロックかけちゃいました。SM12で確認してください。'.
ENDIF.
Application Log出力サンプル
REPORT ysz_aplog01.
*----- ローカル変数定義
DATA : lds_islog TYPE bal_s_log, "BAL_LOG_CREATE用
lds_ismsg TYPE bal_s_msg, "BAL_LOG_MSG_ADD用
* LDF_IINUPDATETASK TYPE BOOLEAN, "BAL_DB_SAVE用
ldt_loghandle TYPE bal_t_logh, "BAL_DB_SAVE用(ログハンドルテーブル)
ldf_save_all TYPE boolean, "BAL_DB_SAVE用
ldf_loghandle TYPE balloghndl, "ログハンドル
ldf_text(100) TYPE c.
*----- OBJECT, SUBOBJECT定義:SLG0にて定義済みの値
CONSTANTS : lcf_object(4) TYPE c VALUE 'Z_SZ',
lcf_subobject(4) TYPE c VALUE 'Z_SZ'.
*----- ローカル変数初期化
CLEAR: lds_islog,
lds_ismsg,
ldf_save_all,
ldf_loghandle.
*----- ログヘッダ作成
* ログヘッダ情報設定
lds_islog-object = lcf_object.
lds_islog-subobject = lcf_subobject.
lds_islog-aluser = sy-uname.
lds_islog-alprog = sy-repid.
* ログヘッダ作成
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = lds_islog
IMPORTING
e_log_handle = ldf_loghandle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
* 出力するメッセージ
ldf_text = 'テストメッセージ'.
lds_ismsg-msgty = 'I'.
lds_ismsg-msgid = 'YMAZ02'.
lds_ismsg-msgno = '001'.
lds_ismsg-msgv1 = ldf_text.
lds_ismsg-probclass = '4'.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = ldf_loghandle
i_s_msg = lds_ismsg
* IMPORTING
* E_S_MSG_HANDLE =
* E_MSG_WAS_LOGGED =
* E_MSG_WAS_DISPLAYED =
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
* ログハンドルをログハンドルテーブルに追加
APPEND ldf_loghandle TO ldt_loghandle.
*----- アプリケーションログを保存
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_save_all = 'X'
i_t_log_handle = ldt_loghandle
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
WRITE:/ 'Finished'.
ABAP Classサンプル
ABAP Object作成例
REPORT zz_cl_employee.
*---------------------------------------------------------------------*
* CLASS employee DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS zz_employee DEFINITION.
PUBLIC SECTION.
METHODS: constructor IMPORTING pernr1 TYPE persno,
display_name.
PRIVATE SECTION.
DATA: pernr TYPE persno.
ENDCLASS. "employee DEFINITION
*---------------------------------------------------------------------*
* CLASS employee IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS zz_employee IMPLEMENTATION.
METHOD constructor.
me->pernr = pernr1.
ENDMETHOD. "constructor
METHOD display_name.
DATA: firstname TYPE vorna,
lastname TYPE nachn.
SELECT SINGLE vorna nachn
INTO (firstname, lastname)
FROM pa0002 WHERE pernr EQ me->pernr.
WRITE:/ me->pernr, firstname, lastname.
ENDMETHOD. "display_name
ENDCLASS. "employee IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS zz_employeeを利用
*---------------------------------------------------------------------*
DATA: emp1 TYPE REF TO zz_employee.
PARAMETERS empno TYPE persno.
START-OF-SELECTION.
CREATE OBJECT emp1 EXPORTING pernr1 = empno.
CALL METHOD emp1->display_name.
END-OF-SELECTION.