FUNCTION-POOL ZMMP008. "MESSAGE-ID ..
* 画面用TABLES定義
TABLES :
ZMM0S0130, " ヘッダ
ZMM0S0131. " 明細
CONSTANTS CNS_NRRANGENR TYPE INRI-NRRANGENR VALUE '01'. "番号範囲番号
CONSTANTS CNS_OBJECT TYPE INRI-OBJECT VALUE 'ZCM001'. "番号範囲OBJ
CONSTANTS CNS_ZZNYUROKBN TYPE ZENYUROKBN VALUE 'SA'. "入力ルート区分
*----------------------------------------------------------------------*
* 変数宣言(DATA)
*----------------------------------------------------------------------*
DATA : OK-CODE TYPE SY-UCOMM. " INCLUDE LMEVIEWSF01用 OKCODE
DATA W_ZZKRENO TYPE ZEKRENO. "関連No
INCLUDE LMEVIEWSF01. " 標準部品
汎用モジュールの実装箇所
ステップ3
SE18で拡張BADI(ME_GUI_PO_CUST)実装、拡張画面項目値の引渡メソッドを実装する
変数定義
CNS_APPL Constant Private Type STRING40 'PO'
CNS_ELEMENT_HEAD Constant Private Type STRING40 shmtable_s 内の 40 文字文字列 'HEADER'
CNS_ELEMENT_ITEM Constant Private Type STRING40 shmtable_s 内の 40 文字文字列 'ITEM'
CNS_SCNAME_HEAD Constant Private Type MEPO_SUBSCRIBERS-NAME 'HEADERSCREEN01'
CNS_SCNAME_ITEM Constant Private Type MEPO_SUBSCRIBERS-NAME 'ITEMSCREEN01'
CNS_PROGRAM Constant Private Type MEPO_SUBSCRIBERS-PROGRAM 'SAPLZMMP008'
CNS_DYNPRO_HEAD Constant Private Type MEPO_SUBSCRIBERS-DYNPRO '9000'
CNS_DYNPRO_ITEM Constant Private Type MEPO_SUBSCRIBERS-DYNPRO '9010'
CNS_STRUCT_HEAD Constant Private Type MEPO_SUBSCRIBERS-STRUCT_NAME 'ZMM0S0130'
CNS_STRUCT_ITEM Constant Private Type MEPO_SUBSCRIBERS-STRUCT_NAME 'ZMM0S0131'
CNS_POSITION_HEAD Constant Private Type MEPO_SUBSCRIBERS-POSITION 11
CNS_POSITION_ITEM Constant Private Type MEPO_SUBSCRIBERS-POSITION 99
CNS_HEIGHT_HEAD Constant Private Type MEPO_SUBSCRIBERS-HEIGHT 7
CNS_HEIGHT_ITEM Constant Private Type MEPO_SUBSCRIBERS-HEIGHT 7
STR_ZMM0S0130 Instance Attribute Private Type ZMM0S0130
STR_ZMM0S0131 Instance Attribute Private Type ZMM0S0131
STR_ZMM0S0130_PBO Instance Attribute Private Type ZMM0S0130
STR_ZMM0S0130_PAI Instance Attribute Private Type ZMM0S0130
STR_ZMM0S0131_PBO Instance Attribute Private Type ZMM0S0131
STR_ZMM0S0131_PAI Instance Attribute Private Type ZMM0S0131
メソッドソースコード
*======================================================================================
*画面を開く
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~SUBSCRIBE.
DATA: L_STR_SUBSCRIBER LIKE LINE OF RE_SUBSCRIBERS. " MEPO: 独自の画面の公開
* APPLICATIONがPOの場合のみ処理を行う
CHECK IM_APPLICATION = CNS_APPL.
* 画面設定判定
CASE IM_ELEMENT.
WHEN CNS_ELEMENT_HEAD. " ヘッダ
* ヘッダ画面設定
CLEAR RE_SUBSCRIBERS[].
L_STR_SUBSCRIBER-NAME = CNS_SCNAME_HEAD. " ビュー名
L_STR_SUBSCRIBER-DYNPRO = CNS_DYNPRO_HEAD. " DYNPRO
L_STR_SUBSCRIBER-PROGRAM = CNS_PROGRAM. " プログラム名
L_STR_SUBSCRIBER-STRUCT_NAME = CNS_STRUCT_HEAD. " テーブル名
L_STR_SUBSCRIBER-LABEL = TEXT-001. " ラベル=ヘッダ
L_STR_SUBSCRIBER-POSITION = CNS_POSITION_HEAD. " ポジション(タブの位置)
L_STR_SUBSCRIBER-HEIGHT = CNS_HEIGHT_HEAD. " 高さ
WHEN CNS_ELEMENT_ITEM. " 明細
* 明細画面設定
L_STR_SUBSCRIBER-NAME = CNS_SCNAME_ITEM. " ビュー名
L_STR_SUBSCRIBER-DYNPRO = CNS_DYNPRO_ITEM. " DYNPRO
L_STR_SUBSCRIBER-PROGRAM = CNS_PROGRAM. " プログラム名
L_STR_SUBSCRIBER-STRUCT_NAME = CNS_STRUCT_ITEM. " テーブル名
L_STR_SUBSCRIBER-LABEL = TEXT-002. " ラベル=明細
L_STR_SUBSCRIBER-POSITION = CNS_POSITION_ITEM. " ポジション(タブの位置)
L_STR_SUBSCRIBER-HEIGHT = CNS_HEIGHT_ITEM. " 高さ
WHEN OTHERS.
" 処理なし
ENDCASE.
APPEND L_STR_SUBSCRIBER TO RE_SUBSCRIBERS.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~SUBSCRIBE
*======================================================================================
*支払条件の制御
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS.
CONSTANTS L_CNS_ZZMETA TYPE C LENGTH 2 VALUE 'ZZ'. " FIELDNAME(頭2桁) アドオン項目判定用
DATA L_STR_MAPPING LIKE LINE OF CH_MAPPING.
* 項目カタログのFIELDNAME頭2桁が"ZZ"の場合、支払条件のメタ項目を設定する
LOOP AT CH_MAPPING[] INTO L_STR_MAPPING.
IF L_STR_MAPPING-FIELDNAME+000(002) = L_CNS_ZZMETA.
L_STR_MAPPING-METAFIELD = MMMFD_PMNTTRMS. " 支払条件(METAFIELD)
MODIFY CH_MAPPING[] FROM L_STR_MAPPING.
ENDIF.
ENDLOOP.
* ソートテーブルCH_MAPPING[]の最初の1件目に強制カーソル指定されるため1件目にダミーレコードを挿入
CLEAR L_STR_MAPPING.
L_STR_MAPPING-METAFIELD = MMMFD_PMNTTRMS. " 支払条件(METAFIELD)
INSERT L_STR_MAPPING INTO CH_MAPPING[] INDEX 1.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS
*======================================================================================
*DBデータ=>モデル
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL.
DATA L_REF_PO_HEAD TYPE REF TO IF_PURCHASE_ORDER_MM. " 参照変数(IF_PURCHASE_ORDER_MM)
DATA L_STR_MEPOHEADER TYPE MEPOHEADER. " GET_DATA用 MEPOHEADER
DATA L_REF_PO_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM. " 参照変数(IF_PURCHASE_ORDER_ITEM_MM)
DATA L_STR_MEPOITEM TYPE MEPOITEM. " GET_DATA用 MEPOITEM
CASE IM_NAME.
* ヘッダ
WHEN CNS_SCNAME_HEAD.
L_REF_PO_HEAD ?= IM_MODEL. " IM_MODELをCAST
L_STR_MEPOHEADER = L_REF_PO_HEAD->GET_DATA( ). " IF_PURCHASE_ORDER_MM~GET_DATAでヘッダ項目取得
MOVE-CORRESPONDING L_STR_MEPOHEADER TO STR_ZMM0S0130_PBO. " 拡張画面用構造に設定
STR_ZMM0S0130_PBO-WAERS_W = L_STR_MEPOHEADER-WAERS.
* 明細
WHEN CNS_SCNAME_ITEM.
L_REF_PO_ITEM ?= IM_MODEL. " IM_MODELをCAST
L_STR_MEPOITEM = L_REF_PO_ITEM->GET_DATA( ). " IF_PURCHASE_ORDER_MM~GET_DATAでヘッダ項目取得
MOVE-CORRESPONDING L_STR_MEPOITEM TO STR_ZMM0S0131_PBO. " 拡張画面用構造に設定
*
WHEN OTHERS.
" 処理なし
ENDCASE.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL
*======================================================================================
*モデル=>DBデータ
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL.
DATA :
L_REF_PO_HEAD TYPE REF TO IF_PURCHASE_ORDER_MM, " 参照変数(IF_PURCHASE_ORDER_MM)
L_STR_MEPOHEADER TYPE MEPOHEADER, " GET_DATA用 MEPOHEADER
L_REF_PO_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM, " 参照変数(IF_PURCHASE_ORDER_ITEM_MM)
L_STR_MEPOITEM TYPE MEPOITEM. " GET_DATA用 MEPOITEM
CASE IM_NAME.
* ヘッダ
WHEN CNS_SCNAME_HEAD.
L_REF_PO_HEAD ?= IM_MODEL. " IM_MODELをCAST
L_STR_MEPOHEADER = L_REF_PO_HEAD->GET_DATA( ). " IF_PURCHASE_ORDER_MM~GET_DATAでヘッダ項目取得
MOVE-CORRESPONDING STR_ZMM0S0130 TO L_STR_MEPOHEADER. " 拡張画面用構造の値を設定
CALL METHOD L_REF_PO_HEAD->SET_DATA( L_STR_MEPOHEADER ). " IF_PURCHASE_ORDER_MM~GET_DATAでヘッダ値更新
* 明細
WHEN CNS_SCNAME_ITEM.
L_REF_PO_ITEM ?= IM_MODEL. " IM_MODELをCAST
L_STR_MEPOITEM = L_REF_PO_ITEM->GET_DATA( ). " IF_PURCHASE_ORDER_ITEM_MM~GET_DATAでヘッダ項目取得
MOVE-CORRESPONDING STR_ZMM0S0131 TO L_STR_MEPOITEM. " 拡張画面用構造の値を設定
CALL METHOD L_REF_PO_ITEM->SET_DATA( L_STR_MEPOITEM ). " IF_PURCHASE_ORDER_ITEM_MM~GET_DATAでヘッダ値更新
WHEN OTHERS.
" 処理なし
ENDCASE.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL
*======================================================================================
*拡張画面=>モデル
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
DATA :
L_REF_PO_HEAD TYPE REF TO IF_PURCHASE_ORDER_MM, " 参照変数(IF_PURCHASE_ORDER_MM)
L_STR_MEPOHEADER TYPE MEPOHEADER, " GET_DATA用 MEPOHEADER
L_REF_PO_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM, " 参照変数(IF_PURCHASE_ORDER_ITEM_MM)
L_STR_MEPOITEM TYPE MEPOITEM. " GET_DATA用 MEPOITEM
CASE IM_NAME.
* ヘッダ
WHEN CNS_SCNAME_HEAD.
* PAI値受取(ヘッダ)
CALL FUNCTION 'Z_MMP008_HEAD01_POP'
IMPORTING
F_EP_ZMM0S0130 = STR_ZMM0S0130_PAI. "拡張画面WORK→標準WORKに取得
* PBO≠PAIの場合、RE_CHANGED(変更あり)を設定
IF STR_ZMM0S0130_PAI <> STR_ZMM0S0130_PBO.
STR_ZMM0S0130 = STR_ZMM0S0130_PAI.
RE_CHANGED = MMPUR_YES.
ELSE.
" 処理なし
ENDIF.
* 明細
WHEN CNS_SCNAME_ITEM.
* PAI値受取(明細)
CALL FUNCTION 'Z_MMP008_ITEM01_POP'
IMPORTING
F_EP_ZMM0S0131 = STR_ZMM0S0131_PAI.
* PBO≠PAIの場合、RE_CHANGED(変更あり)を設定
IF STR_ZMM0S0131_PAI <> STR_ZMM0S0131_PBO.
STR_ZMM0S0131 = STR_ZMM0S0131_PAI.
RE_CHANGED = MMPUR_YES.
ELSE.
" 処理なし
ENDIF.
WHEN OTHERS.
" 処理なし
ENDCASE.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP
*======================================================================================
*モデル=>拡張画面
*======================================================================================
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
* 画面判定
CASE IM_NAME.
WHEN CNS_SCNAME_HEAD. " ヘッダ
* PBO値受渡(ヘッダ)
CALL FUNCTION 'Z_MMP008_HEAD01_PUSH'
EXPORTING
F_IP_ZMM0S0130 = STR_ZMM0S0130_PBO. "標準WORK→拡張画面WORK
WHEN CNS_SCNAME_ITEM. " 明細
* PBO値受渡(明細)
CALL FUNCTION 'Z_MMP008_ITEM01_PUSH'
EXPORTING
F_IP_ZMM0S0131 = STR_ZMM0S0131_PBO.
WHEN OTHERS.
" 処理なし
ENDCASE.
ENDMETHOD. "IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP