2019年8月13日星期二
WBS NETWORK ACTIVITY
FORM F_INS_WBS USING" AI_W_SALESORDER TYPE ZDWGG02
AI_V_PSPID TYPE PROJ-PSPID
AI_W_WBSELEMENT_LV2 TYPE PRPS-POSID
AI_W_WBSELEMENT_LV3 TYPE PRPS-POSID
AI_W_WBSELEMENT2 TYPE BAPI_BUS2054_DETAIL
AI_W_WBSELEMENT3 TYPE BAPI_BUS2054_DETAIL
AI_W_NETWORK TYPE BAPI_NETWORK_EXP
AI_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
CHANGING AO_V_NETWORK TYPE BAPI_NETWORK_EXP-NETWORK
AO_V_ACTIVITY_NO TYPE BAPI_NETWORK_ACTIVITY_EXP-ACTIVITY
AO_T_RETURN TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:
LT_WBS TYPE STANDARD TABLE OF BAPI_BUS2054_NEW,
LS_WBS TYPE BAPI_BUS2054_NEW,
LT_EXT_IN TYPE STANDARD TABLE OF BAPIPAREX,
LS_EXT_IN TYPE BAPIPAREX,
LS_WBS_EXT TYPE BAPI_TE_WBS_ELEMENT,
LT_EXT_OUT TYPE STANDARD TABLE OF BAPIPAREX,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LS_RETURN_STATUS TYPE BAPIRETURN1,
LS_STATUS TYPE BAPI_WBS_MNT_SYSTEM_STATUS,
LT_STATUS TYPE STANDARD TABLE OF BAPI_WBS_MNT_SYSTEM_STATUS,
LS_NETWORK_STATUS TYPE BAPI_SYSTEM_STATUS-SYSTEM_STATUS,
LS_NETWORK TYPE BAPI_BUS2002_NEW,
LV_NETWORK TYPE BAPI_NETWORK_LIST-NETWORK,
LS_ACTIVITY TYPE BAPI_BUS2002_ACT_NEW,
LT_ACTIVITY TYPE STANDARD TABLE OF BAPI_BUS2002_ACT_NEW,
LS_NETWORK_INFO TYPE BAPI_NETWORK_EXP,
LS_ACTIVITY_INFO TYPE BAPI_NETWORK_ACTIVITY_EXP,
LV_MRP_ERR TYPE CHAR01.
* LW_WBSNETWORK_DATE TYPE TYP_WBS_NETWORK_DATE.
CLEAR:
LT_WBS,
LS_WBS,
LT_EXT_IN,
LS_EXT_IN,
LT_EXT_OUT,
LS_NETWORK,
LV_NETWORK,
LS_ACTIVITY,
LT_ACTIVITY,
LS_WBS_EXT,
LS_NETWORK_INFO,
LS_ACTIVITY_INFO.
IF AI_W_WBSELEMENT2 IS INITIAL.
LS_WBS-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_WBS-DESCRIPTION = 'XXXX'. "AI_W_SALESWORDER-ZWORKTXT.
CLEAR LS_WBS-WBS_PLANNING_ELEMENT.
LS_WBS-WBS_ACCOUNT_ASSIGNMENT_ELEMENT = 'X'.
CLEAR LS_WBS-WBS_BILLING_ELEMENT.
LS_WBS-COMPANY_CODE = '1000'. "AI_W_SALESWORDER-BUKRS.
LS_WBS-PLANT = '1000'. "AI_W_SALESWORDER-WERKS.
* 利益センタ
LS_WBS-PROFIT_CTR = '1000'."AI_W_SALESWORDER-PRCTR.
* WBS要素:基本開始日付 (受注伝票日付)
LS_WBS-WBS_BASIC_START_DATE = '20190801'. "AI_W_SALESWORDER-AUDAT.
* WBS要素:基本終了日付 (納入日)
LS_WBS-WBS_BASIC_FINISH_DATE = '20190830'. "AI_W_SALESWORDER-EDATU.
LS_WBS-WBS_UP = AI_V_PSPID.
APPEND LS_WBS TO LT_WBS.
LS_EXT_IN-STRUCTURE = 'BAPI_TE_WBS_ELEMENT'.
LS_WBS_EXT-WBS_ELEMENT = AI_W_WBSELEMENT2.
* 見積管理No
* LS_WBS_EXT-ZZXXXX = AI_W_SALESWORDER-ZESTNO.
LS_EXT_IN-VALUEPART1 = LS_WBS_EXT.
APPEND LS_EXT_IN TO LT_EXT_IN.
ENDIF.
IF AI_W_WBSELEMENT3 IS INITIAL.
LS_WBS-WBS_ELEMENT = AI_W_WBSELEMENT_LV3.
* WBS名称 受注明細のテキスト
LS_WBS-DESCRIPTION = 'XXXX'. "AI_W_SALESWORDER-ZWORKTXT.
* 区分:計画要素
LS_WBS-WBS_PLANNING_ELEMENT = 'X'.
* 区分:勘定設定要素
LS_WBS-WBS_ACCOUNT_ASSIGNMENT_ELEMENT = 'X'.
* 区分:請求要素
LS_WBS-WBS_BILLING_ELEMENT = 'X'.
LS_WBS-COMPANY_CODE = '1000'. "AI_W_SALESWORDER-BUKRS.
LS_WBS-PLANT = '1000'. "AI_W_SALESWORDER-WERKS.
* 利益センタ
LS_WBS-PROFIT_CTR = '1000'."AI_W_SALESWORDER-PRCTR.
* WBS要素:基本開始日付 (受注伝票日付)
LS_WBS-WBS_BASIC_START_DATE = '20190801'. "AI_W_SALESWORDER-AUDAT.
* WBS要素:基本終了日付 (納入日)
LS_WBS-WBS_BASIC_FINISH_DATE = '20190830'. "AI_W_SALESWORDER-EDATU.
APPEND LS_WBS TO LT_WBS.
ENDIF.
IF LT_WBS IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
* Level2 Level3のWBS登録
CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI'
EXPORTING
I_PROJECT_DEFINITION = AI_V_PSPID
TABLES
IT_WBS_ELEMENT = LT_WBS
ET_RETURN = LT_RETURN
EXTENSIONIN = LT_EXT_IN
EXTENSIONOUT = LT_EXT_OUT.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CLEAR:
LS_STATUS,
LT_STATUS,
LS_RETURN_STATUS.
LS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_STATUS-SET_SYSTEM_STATUS = 'REL'.
APPEND LS_STATUS TO LT_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_STATUS.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
IF AI_W_NETWORK IS INITIAL.
LS_NETWORK-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_NETWORK-PROJECT_DEFINITION = AI_V_PSPID.
LS_NETWORK-SHORT_TEXT = 'AAAA'. "AI_W_SALESORDER-ZWORKTXT.
* MRP CONTROLLERは受注伝票のPSTYVよりADDONテーブルより取得
LS_NETWORK-MRP_CONTROLLER = 'ZZZ'.
* 開始日
LS_NETWORK-START_DATE = '20190801'. "AI_W_SALESORDER-AUDAT.
* 終了日(工場出荷予定日)
LS_NETWORK-FINISH_DATE = '20190830'. "AI_W_SALESORDER-MBDAT.
* プラント
LS_NETWORK-PLANT = '1000'. "AI_W_SALESORDER-WERKS
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2002_CREATE'
EXPORTING
I_NETWORK = LS_NETWORK
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
IF AI_W_NETWORK IS INITIAL.
* Network新規作成した場合、作成したNetwork番号取得
PERFORM F_GET_NETWORK
USING
AI_W_WBSELEMENT_LV2
AI_W_WBSELEMENT_LV3
CHANGING
LS_NETWORK_INFO
LS_ACTIVITY_INFO
AO_V_ACTIVITY_NO.
LV_NETWORK = LS_NETWORK_INFO-NETWORK.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR LS_RETURN_STATUS.
LS_NETWORK_STATUS = 'REL'.
CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'
EXPORTING
NUMBER = LV_NETWORK
SET_SYSTEM_STATUS = LS_NETWORK_STATUS
IMPORTING
RETURN = LS_RETURN_STATUS.
* エラーが発生した場合、ステータスのエラーロック解除する
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
LV_NETWORK = AI_W_NETWORK-NETWORK.
ENDIF.
AO_V_NETWORK = LV_NETWORK.
IF AI_W_ACTIVITY IS INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR: LT_ACTIVITY,
LS_ACTIVITY.
LS_ACTIVITY-PLANT = '1000'. "AI_W_SALESORDER-WERKS.
LS_ACTIVITY-DESCRIPTION = 'AAAAA'. "AI_W_SALESORDER-ARKTX.
LS_ACTIVITY-WBS_ELEMENT = AI_W_WBSELEMENT_LV3.
LS_ACTIVITY-ACTIVITY = AO_V_ACTIVITY_NO.
APPEND LS_ACTIVITY TO LT_ACTIVITY.
CALL FUNCTION 'BAPI_BUS2002_ACT_CREATE_MULTI'
EXPORTING
I_NUMBER = LV_NETWORK
TABLES
IT_ACTIVITY = LT_ACTIVITY
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDFORM.
FORM F_DEL_WBS USING AI_V_PSPID TYPE PROJ-PSPID
AI_W_WBSELEMENT2 TYPE BAPI_BUS2054_DETAIL
AI_W_WBSELEMENT3 TYPE BAPI_BUS2054_DETAIL
AI_W_NETWORK TYPE BAPI_NETWORK_EXP
AI_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
CHANGING AO_T_RETURN TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:
LT_ACTIVITY_STATUS TYPE STANDARD TABLE OF BAPI_ACT_MNT_SYSTEM_STATUS,
LS_ACTIVITY_STATUS TYPE BAPI_ACT_MNT_SYSTEM_STATUS,
LS_RETURN_STATUS TYPE BAPIRETURN1,
LT_WBS_STATUS TYPE STANDARD TABLE OF BAPI_WBS_MNT_SYSTEM_STATUS,
LS_WBS_STATUS TYPE BAPI_WBS_MNT_SYSTEM_STATUS,
LS_NETWORK_STATUS TYPE BAPI_SYSTEM_STATUS-SYSTEM_STATUS,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LV_WHERE TYPE STRING.
* LT_WBS_3 TYPE STANDARD TABLE OF TYP_PRPS,
* LS_WBS_3 TYPE TYP_PRPS,
* LW_WBSNETWORK_DATE TYPE TYP_WBS_NETWORK_DATE.
CLEAR: LT_RETURN.
IF AI_W_ACTIVITY IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
LS_ACTIVITY_STATUS-ACTIVITY = AI_W_ACTIVITY-ACTIVITY.
LS_ACTIVITY_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_ACTIVITY_STATUS TO LT_ACTIVITY_STATUS.
CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'
EXPORTING
NUMBER = AI_W_NETWORK-NETWORK
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_ACTIVITY_SYSTEM_STATUS = LT_ACTIVITY_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
IF AI_W_WBSELEMENT3 IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR:
LT_WBS_STATUS,
LS_WBS_STATUS,
LS_RETURN_STATUS.
LS_WBS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT3-WBS_ELEMENT.
LS_WBS_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_WBS_STATUS TO LT_WBS_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_WBS_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
IF AI_W_WBSELEMENT2 IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR:
LT_WBS_STATUS,
LS_WBS_STATUS,
LS_RETURN_STATUS.
LS_WBS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT2-WBS_ELEMENT.
LS_WBS_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_WBS_STATUS TO LT_WBS_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_WBS_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
ENDFORM.
FORM F_STATUS_ERROR_UNLOCK USING AI_W_ERROR TYPE BAPIRETURN1
CHANGING AO_T_ERROR TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:LS_ERROR TYPE BAPIRET2.
IF AI_W_ERROR-TYPE = 'E' OR
AI_W_ERROR-TYPE ='A'.
AO_V_ERRFLG = 'X'.
MOVE-CORRESPONDING AI_W_ERROR TO LS_ERROR.
APPEND LS_ERROR TO AO_T_ERROR.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ENDIF.
ENDFORM.
FORM F_GET_NETWORK USING AI_W_WBS_LV2 TYPE PRPS-POSID
AI_W_WBS_LV3 TYPE PRPS-POSID
CHANGING
AO_W_NETWORK TYPE BAPI_NETWORK_EXP
AO_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
AO_V_ACTIVITY_NO TYPE BAPI_NETWORK_ACTIVITY_EXP-ACTIVITY.
ENDFORM.
FORM F_ERROR_UNLOCK USING AI_T_ERROR TYPE BAPIRET2_T
AI_V_UNLOCK TYPE CHAR01
CHANGING AO_T_ERROR TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
FIELD-SYMBOLS:<FS_ERROR> TYPE BAPIRET2.
CLEAR AO_V_ERRFLG.
LOOP AT AI_T_ERROR ASSIGNING <FS_ERROR>
WHERE TYPE = 'E' AND
TYPE = 'A'.
AO_V_ERRFLG = 'X'.
APPEND <FS_ERROR> TO AO_T_ERROR.
ENDLOOP.
IF AO_V_ERRFLG IS NOT INITIAL AND
AI_V_UNLOCK IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDFORM.
*&-----------------------------------------------------------------------*
*& FORM F_UPDATE_GUID
*&-----------------------------------------------------------------------*
* GUIDの更新処理
*&-----------------------------------------------------------------------*
FORM F_UPDATE_GUID.
DATA:
LI_VBMOD_ALL TYPE STANDARD TABLE OF VBMOD,
LV_ENQDONE TYPE CHAR01,
LV_ENQKEY TYPE EQEUSEVB,
TH_OPCODE(1) TYPE X,
LV_VBKEY TYPE VBMOD-VBKEY,
LV_FUNCNM TYPE TFDIR-FUNCNAME,
LV_PNAME TYPE CHAR40,
BEGIN OF VBID,
TIMESTAMP LIKE VBMOD-VBKEY,
ID LIKE VBMOD-VBMODCNT,
END OF VBID.
FIELD-SYMBOLS:<FS_VBMOD> TYPE VBMOD.
CONSTANTS:C_GET_VB_KEY LIKE TH_OPCODE VALUE 2.
CALL 'ThVBCall' ID 'OPCODE' FIELD C_GET_VB_KEY
ID 'VBKEY' FIELD LV_VBKEY
ID 'ENQKEY' FIELD LV_ENQKEY
ID 'ENQDONE' FIELD LV_ENQDONE.
SELECT * FROM VBMOD INTO TABLE LI_VBMOD_ALL
WHERE VBKEY = LV_VBKEY.
SORT LI_VBMOD_ALL BY VBMODCNT ASCENDING.
LOOP AT LI_VBMOD_ALL ASSIGNING <FS_VBMOD>.
SELECT SINGLE PNAME INTO LV_PNAME FROM TFDIR WHERE FUNCNAME = <FS_VBMOD>-VBFUNC.
VBID-TIMESTAMP = <FS_VBMOD>-VBKEY.
VBID-ID = <FS_VBMOD>-VBMODCNT.
PERFORM (<FS_VBMOD>-VBFUNC) IN PROGRAM (LV_PNAME) USING VBID.
DELETE FROM VBMOD WHERE VBKEY = <FS_VBMOD>-VBKEY AND
VBMODCNT = <FS_VBMOD>-VBMODCNT.
DELETE FROM VBDATA WHERE VBKEY = <FS_VBMOD>-VBKEY AND
VBMODCNT = <FS_VBMOD>-VBMODCNT.
ENDLOOP.
ENDFORM.
2019年5月6日星期一
Add append fields to bapi BAPI_OUTB_DELIVERY_CHANGE
1.add apend fields to structure vbkok and vbpok
2.implement badi:SMOD_V50B0001 method EXIT_SAPLV50I_010
METHOD IF_EX_SMOD_V50B0001~EXIT_SAPLV50I_010.
CONSTANTS:
LC_VBKOK TYPE CHAR5 VALUE 'VBKOK', "出荷ヘッダ(拡張項目ZXX含まれる)
LC_VBPOK TYPE CHAR5 VALUE 'VBPOK', "出荷明細(拡張項目ZXX含まれる)
LC_CS_VBKOK TYPE CHAR8 VALUE 'CS_VBKOK'.
DATA:
LV_ITEM TYPE POSNR_VL,
LW_EXTENSION2 TYPE BAPIEXT.
FIELD-SYMBOLS:
<LFS_FIELDNAME> TYPE ANY,
<LFS_VBKOK> TYPE ANY,
<LFS_VBPOK> TYPE ANY.
LOOP AT EXTENSION2 INTO LW_EXTENSION2.
CASE LW_EXTENSION2-PARAM.
WHEN LC_VBKOK. "LIKPの拡張項目
ASSIGN (LC_CS_VBKOK) TO <LFS_VBKOK>.
IF <LFS_VBKOK> IS ASSIGNED.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBKOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
WHEN LC_VBPOK. "LIPSの拡張項目
MOVE LW_EXTENSION2-ROW TO LV_ITEM.
READ TABLE CT_VBPOK ASSIGNING <LFS_VBPOK> WITH KEY POSNR_VL = LV_ITEM.
IF SY-SUBRC = 0.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBPOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
ENDCASE.
2.implement badi:SMOD_V50B0001 method EXIT_SAPLV50I_010
METHOD IF_EX_SMOD_V50B0001~EXIT_SAPLV50I_010.
CONSTANTS:
LC_VBKOK TYPE CHAR5 VALUE 'VBKOK', "出荷ヘッダ(拡張項目ZXX含まれる)
LC_VBPOK TYPE CHAR5 VALUE 'VBPOK', "出荷明細(拡張項目ZXX含まれる)
LC_CS_VBKOK TYPE CHAR8 VALUE 'CS_VBKOK'.
DATA:
LV_ITEM TYPE POSNR_VL,
LW_EXTENSION2 TYPE BAPIEXT.
FIELD-SYMBOLS:
<LFS_FIELDNAME> TYPE ANY,
<LFS_VBKOK> TYPE ANY,
<LFS_VBPOK> TYPE ANY.
LOOP AT EXTENSION2 INTO LW_EXTENSION2.
CASE LW_EXTENSION2-PARAM.
WHEN LC_VBKOK. "LIKPの拡張項目
ASSIGN (LC_CS_VBKOK) TO <LFS_VBKOK>.
IF <LFS_VBKOK> IS ASSIGNED.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBKOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
WHEN LC_VBPOK. "LIPSの拡張項目
MOVE LW_EXTENSION2-ROW TO LV_ITEM.
READ TABLE CT_VBPOK ASSIGNING <LFS_VBPOK> WITH KEY POSNR_VL = LV_ITEM.
IF SY-SUBRC = 0.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBPOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
3. implement badi (enhancement spot) LE_SHP_DELIVERY_UPDATE
method IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_HEADER.
CS_LIKP-ZZ1_TEST_TOSS_NO_DLH = IS_VBKOK-ZZ2_TEST_TOSS_NO_DLH.
endmethod.
CS_LIKP-ZZ1_TEST_TOSS_NO_DLH = IS_VBKOK-ZZ2_TEST_TOSS_NO_DLH.
endmethod.
method IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM.
endmethod.
endmethod.
2019年3月16日星期六
dynamic call function
*&---------------------------------------------------------------------*
*& Report ZTOOLMAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTOOLMAT_DU.
DATA: LT_PTAB TYPE ABAP_FUNC_PARMBIND_TAB,
LS_PTAB TYPE ABAP_FUNC_PARMBIND.
TYPES: BEGIN OF TYP_DAT,
LINE TYPE STRING, " UP/DOWNLOAD行データ
END OF TYP_DAT.
TYPES: BEGIN OF TYP_HASHTABLE,
KEY TYPE STRING,
INX TYPE I,
END OF TYP_HASHTABLE.
TYPES: BEGIN OF TYP_RESULT,
INX TYPE I,
CODE TYPE MARA-MATNR,
RESULT TYPE STRING,
RESULT_TEXT TYPE STRING,
END OF TYP_RESULT.
* 内部テーブル
DATA:LT_HASH TYPE HASHED TABLE OF TYP_HASHTABLE WITH UNIQUE KEY KEY ,
L_HASH TYPE TYP_HASHTABLE.
DATA:TBL_DAT TYPE TABLE OF TYP_DAT.
DATA:LINE_DAT TYPE TYP_DAT.
DATA:TBL_STRING TYPE TABLE OF STRING.
DATA:L_VALUE TYPE STRING.
DATA:RE TYPE ABAP_FUNC_PARMBIND,
RE_MSG TYPE ABAP_FUNC_PARMBIND.
DATA L_RE TYPE YERESULTSIGN.
DATA L_MSG TYPE NATXT.
DATA:NORL_COUNT TYPE I VALUE 0,
ER_COUNT TYPE I VALUE 0.
DATA L_H_TBL_RETURN TYPE BAPIRET2.
DATA ER_FLG TYPE C.
DATA:LT_RESULT TYPE TABLE OF TYP_RESULT,
LH_RESULT TYPE TYP_RESULT.
FIELD-SYMBOLS : <FS_STRC> TYPE ABAP_FUNC_PARMBIND,
<FS_VALUE> TYPE ANY,
<FS2> TYPE ANY,
<FS_RET> TYPE YERESULTSIGN,
<FS_REMSG> TYPE NATXT.
DATA OREF TYPE REF TO CX_ROOT.
*画面項目
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETERS P_FILEU1 TYPE RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_CKBOX AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(40) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL1.
*ファイル項目
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILEU1.
PERFORM GET_FILENAME CHANGING P_FILEU1.
INITIALIZATION.
*実行処理
START-OF-SELECTION.
*
* ファイル入力
PERFORM UPLOAD_FILE USING P_FILEU1 TBL_DAT.
PERFORM F_MAIN_PROC CHANGING LT_RESULT.
END-OF-SELECTION.
IF ER_FLG IS NOT INITIAL.
RETURN.
ENDIF.
WRITE: 'No' ,
5(20) '品目コード' ,
25(15) '結果サイン' ,
40 'メッセージテキスト' ,
/.
LOOP AT LT_RESULT INTO LH_RESULT .
WRITE:/(4) LH_RESULT-INX,
5(20) LH_RESULT-CODE ,
25(15) LH_RESULT-RESULT ,
40 LH_RESULT-RESULT_TEXT.
IF LH_RESULT-RESULT = 'ER:エラー' .
ADD 1 TO ER_COUNT .
ELSEIF LH_RESULT-RESULT = 'CR:登録' OR LH_RESULT-RESULT = 'CH:変更' OR LH_RESULT-RESULT = 'EX:拡張登録' .
ADD 1 TO NORL_COUNT .
ENDIF.
ENDLOOP.
WRITE: /'正常件数:', NORL_COUNT,'件' , 'エラー件数:', ER_COUNT,'件' .
*&---------------------------------------------------------------------*
*& Form GET_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EX_FILE text
*----------------------------------------------------------------------*
FORM GET_FILENAME CHANGING EX_FILE TYPE RLGRAP-FILENAME.
* ローカル定義
DATA :
L_TITLE TYPE STRING, " ダイアログの表題
L_FILTER TYPE STRING, " ファイル拡張フィルタストリング
L_RC TYPE SY-SUBRC, " リターンコード
L_I_FILE TYPE FILETABLE. " 選択されたファイル
* テキスト設定
L_TITLE = 'TAB区切りファイル指定'.
L_FILTER = 'TAB区切りファイル (*.txt)|*.txt'.
* ファイルを開くダイアログを表示
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = L_TITLE
FILE_FILTER = L_FILTER
CHANGING
FILE_TABLE = L_I_FILE
RC = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC = 0.
READ TABLE L_I_FILE INDEX 1 INTO EX_FILE.
ENDIF.
ENDFORM. " GET_FILENAME
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IM_FILE text
* -->IM_TABLE text
*----------------------------------------------------------------------*
FORM UPLOAD_FILE USING IM_FILE TYPE RLGRAP-FILENAME
IM_TABLE TYPE STANDARD TABLE.
* ローカル定義
DATA :
L_FILENAME TYPE STRING. "ファイル名
* ファイルパス設定
L_FILENAME = IM_FILE.
* UPLOADファイル
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = ''
TABLES
DATA_TAB = IM_TABLE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE SY-MSGTY
NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Form F_MAIN_PROC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F_MAIN_PROC CHANGING INPUT LIKE LT_RESULT.
DATA: LT_INTERFACE TYPE RSFBINTFV,
LS_IMPORT_PARA TYPE RSFBPARA,
REF_WA TYPE REF TO DATA,
REF_WB TYPE REF TO DATA,
L_MATERIAL_CD TYPE STRING.
CLEAR LT_RESULT.
*->呼び出す先モジュールのIMPORT パラメータ情報取得
CALL METHOD CL_FB_FUNCTION_UTILITY=>METH_GET_INTERFACE
EXPORTING
IM_NAME = 'Y_MD_UPDATE_MAT_MASTER' "FM name
IMPORTING
EX_INTERFACE = LT_INTERFACE
EXCEPTIONS
ERROR_OCCURED = 1
OBJECT_NOT_EXISTING = 2
OTHERS = 3.
*->2行目の項目IDを取得する
LOOP AT TBL_DAT INTO LINE_DAT FROM 2 TO 2.
SPLIT LINE_DAT-LINE AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE TBL_STRING.
LOOP AT TBL_STRING INTO L_VALUE .
*->IMPORT パラメータ情報に入力ファイル内項目の存在チェック
READ TABLE LT_INTERFACE-IMPORT INTO LS_IMPORT_PARA WITH KEY PARAMETER = L_VALUE.
IF SY-SUBRC <> 0.
WRITE : /'項目ID「',L_VALUE,'」がインポートパラメータにありません。'.
ER_FLG = 'X'.
ENDIF.
*->IMPORTパラーメタテーブルに項目属性を追加する
CLEAR: LS_PTAB,L_HASH.
MOVE L_VALUE TO LS_PTAB-NAME.
MOVE ABAP_FUNC_EXPORTING TO LS_PTAB-KIND.
INSERT LS_PTAB INTO TABLE LT_PTAB.
*->入力ファイル内項目に対応する値のINDEXをハッシュテーブルに格納する
MOVE L_VALUE TO L_HASH-KEY.
MOVE SY-TABIX TO L_HASH-INX.
INSERT L_HASH INTO TABLE LT_HASH.
ENDLOOP.
*->項目エラーが場合、リターンする
IF ER_FLG = 'X'.
RETURN.
ENDIF.
ENDLOOP.
*->呼び出す先モジュールのEXPORTパラメータを追加する
MOVE 'E_RESULT' TO LS_PTAB-NAME.
MOVE ABAP_FUNC_IMPORTING TO LS_PTAB-KIND.
GET REFERENCE OF L_RE INTO LS_PTAB-VALUE.
INSERT LS_PTAB INTO TABLE LT_PTAB.
*
MOVE 'E_ERMSG' TO LS_PTAB-NAME.
MOVE ABAP_FUNC_IMPORTING TO LS_PTAB-KIND.
GET REFERENCE OF L_MSG INTO LS_PTAB-VALUE.
INSERT LS_PTAB INTO TABLE LT_PTAB.
CLEAR: LS_PTAB,TBL_STRING.
*->汎用パラメータテーブルに値を格納する
LOOP AT TBL_DAT INTO LINE_DAT FROM 3.
SPLIT LINE_DAT-LINE AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE TBL_STRING.
LOOP AT LT_PTAB ASSIGNING <FS_STRC> .
CLEAR L_HASH.
READ TABLE LT_HASH INTO L_HASH WITH TABLE KEY KEY = <FS_STRC>-NAME.
IF SY-SUBRC <> 0 .
CONTINUE.
ENDIF.
READ TABLE LT_INTERFACE-IMPORT INTO LS_IMPORT_PARA WITH KEY PARAMETER = <FS_STRC>-NAME.
CREATE DATA REF_WA TYPE (LS_IMPORT_PARA-STRUCTURE).
ASSIGN REF_WA->* TO <FS2>.
READ TABLE TBL_STRING ASSIGNING <FS_VALUE> INDEX L_HASH-INX .
<FS2> = <FS_VALUE>.
UNASSIGN <FS2>.
IF <FS_STRC>-NAME = 'I_MATERIAL'.
L_MATERIAL_CD = <FS_VALUE>.
ENDIF.
*品目コード
IF SY-SUBRC = 0 AND REF_WA IS NOT INITIAL .
<FS_STRC>-VALUE = REF_WA.
ELSE.
GET REFERENCE OF SPACE INTO <FS_STRC>-VALUE.
ENDIF.
ENDLOOP.
TRY.
*FUNCTIONを呼び出し
CALL FUNCTION 'Y_MD_UPDATE_MAT_MASTER'
PARAMETER-TABLE LT_PTAB.
LH_RESULT-CODE = L_MATERIAL_CD.
*リターン結果
READ TABLE LT_PTAB INTO RE WITH KEY NAME = 'E_RESULT'.
ASSIGN RE-VALUE->* TO <FS_RET>.
CASE <FS_RET>.
WHEN 'CR'.
LH_RESULT-RESULT = 'CR:登録'.
WHEN 'CH'.
LH_RESULT-RESULT = 'CH:変更'.
WHEN 'EX'.
LH_RESULT-RESULT = 'EX:拡張登録'.
WHEN 'ER'.
LH_RESULT-RESULT = 'ER:エラー'.
WHEN 'NO'.
LH_RESULT-RESULT = 'NO:変更なし'.
WHEN ''.
LH_RESULT-RESULT = '他(想定なし)'.
ENDCASE.
*ERメッセージ
READ TABLE LT_PTAB INTO RE_MSG WITH KEY NAME = 'E_ERMSG'.
ASSIGN RE_MSG-VALUE->* TO <FS_REMSG>.
LH_RESULT-RESULT_TEXT = <FS_REMSG>.
*INDEX
LH_RESULT-INX = LH_RESULT-INX + 1.
APPEND LH_RESULT TO LT_RESULT.
CATCH CX_ROOT INTO OREF.
CONTINUE.
ENDTRY.
IF P_CKBOX IS INITIAL.
**-> Commit work
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = L_H_TBL_RETURN.
ELSE.
** -> Rollback work
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDLOOP.
ENDFORM.
*& Report ZTOOLMAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTOOLMAT_DU.
DATA: LT_PTAB TYPE ABAP_FUNC_PARMBIND_TAB,
LS_PTAB TYPE ABAP_FUNC_PARMBIND.
TYPES: BEGIN OF TYP_DAT,
LINE TYPE STRING, " UP/DOWNLOAD行データ
END OF TYP_DAT.
TYPES: BEGIN OF TYP_HASHTABLE,
KEY TYPE STRING,
INX TYPE I,
END OF TYP_HASHTABLE.
TYPES: BEGIN OF TYP_RESULT,
INX TYPE I,
CODE TYPE MARA-MATNR,
RESULT TYPE STRING,
RESULT_TEXT TYPE STRING,
END OF TYP_RESULT.
* 内部テーブル
DATA:LT_HASH TYPE HASHED TABLE OF TYP_HASHTABLE WITH UNIQUE KEY KEY ,
L_HASH TYPE TYP_HASHTABLE.
DATA:TBL_DAT TYPE TABLE OF TYP_DAT.
DATA:LINE_DAT TYPE TYP_DAT.
DATA:TBL_STRING TYPE TABLE OF STRING.
DATA:L_VALUE TYPE STRING.
DATA:RE TYPE ABAP_FUNC_PARMBIND,
RE_MSG TYPE ABAP_FUNC_PARMBIND.
DATA L_RE TYPE YERESULTSIGN.
DATA L_MSG TYPE NATXT.
DATA:NORL_COUNT TYPE I VALUE 0,
ER_COUNT TYPE I VALUE 0.
DATA L_H_TBL_RETURN TYPE BAPIRET2.
DATA ER_FLG TYPE C.
DATA:LT_RESULT TYPE TABLE OF TYP_RESULT,
LH_RESULT TYPE TYP_RESULT.
FIELD-SYMBOLS : <FS_STRC> TYPE ABAP_FUNC_PARMBIND,
<FS_VALUE> TYPE ANY,
<FS2> TYPE ANY,
<FS_RET> TYPE YERESULTSIGN,
<FS_REMSG> TYPE NATXT.
DATA OREF TYPE REF TO CX_ROOT.
*画面項目
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETERS P_FILEU1 TYPE RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_CKBOX AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(40) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL1.
*ファイル項目
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILEU1.
PERFORM GET_FILENAME CHANGING P_FILEU1.
INITIALIZATION.
*実行処理
START-OF-SELECTION.
*
* ファイル入力
PERFORM UPLOAD_FILE USING P_FILEU1 TBL_DAT.
PERFORM F_MAIN_PROC CHANGING LT_RESULT.
END-OF-SELECTION.
IF ER_FLG IS NOT INITIAL.
RETURN.
ENDIF.
WRITE: 'No' ,
5(20) '品目コード' ,
25(15) '結果サイン' ,
40 'メッセージテキスト' ,
/.
LOOP AT LT_RESULT INTO LH_RESULT .
WRITE:/(4) LH_RESULT-INX,
5(20) LH_RESULT-CODE ,
25(15) LH_RESULT-RESULT ,
40 LH_RESULT-RESULT_TEXT.
IF LH_RESULT-RESULT = 'ER:エラー' .
ADD 1 TO ER_COUNT .
ELSEIF LH_RESULT-RESULT = 'CR:登録' OR LH_RESULT-RESULT = 'CH:変更' OR LH_RESULT-RESULT = 'EX:拡張登録' .
ADD 1 TO NORL_COUNT .
ENDIF.
ENDLOOP.
WRITE: /'正常件数:', NORL_COUNT,'件' , 'エラー件数:', ER_COUNT,'件' .
*&---------------------------------------------------------------------*
*& Form GET_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EX_FILE text
*----------------------------------------------------------------------*
FORM GET_FILENAME CHANGING EX_FILE TYPE RLGRAP-FILENAME.
* ローカル定義
DATA :
L_TITLE TYPE STRING, " ダイアログの表題
L_FILTER TYPE STRING, " ファイル拡張フィルタストリング
L_RC TYPE SY-SUBRC, " リターンコード
L_I_FILE TYPE FILETABLE. " 選択されたファイル
* テキスト設定
L_TITLE = 'TAB区切りファイル指定'.
L_FILTER = 'TAB区切りファイル (*.txt)|*.txt'.
* ファイルを開くダイアログを表示
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = L_TITLE
FILE_FILTER = L_FILTER
CHANGING
FILE_TABLE = L_I_FILE
RC = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC = 0.
READ TABLE L_I_FILE INDEX 1 INTO EX_FILE.
ENDIF.
ENDFORM. " GET_FILENAME
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IM_FILE text
* -->IM_TABLE text
*----------------------------------------------------------------------*
FORM UPLOAD_FILE USING IM_FILE TYPE RLGRAP-FILENAME
IM_TABLE TYPE STANDARD TABLE.
* ローカル定義
DATA :
L_FILENAME TYPE STRING. "ファイル名
* ファイルパス設定
L_FILENAME = IM_FILE.
* UPLOADファイル
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = ''
TABLES
DATA_TAB = IM_TABLE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE SY-MSGTY
NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Form F_MAIN_PROC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM F_MAIN_PROC CHANGING INPUT LIKE LT_RESULT.
DATA: LT_INTERFACE TYPE RSFBINTFV,
LS_IMPORT_PARA TYPE RSFBPARA,
REF_WA TYPE REF TO DATA,
REF_WB TYPE REF TO DATA,
L_MATERIAL_CD TYPE STRING.
CLEAR LT_RESULT.
*->呼び出す先モジュールのIMPORT パラメータ情報取得
CALL METHOD CL_FB_FUNCTION_UTILITY=>METH_GET_INTERFACE
EXPORTING
IM_NAME = 'Y_MD_UPDATE_MAT_MASTER' "FM name
IMPORTING
EX_INTERFACE = LT_INTERFACE
EXCEPTIONS
ERROR_OCCURED = 1
OBJECT_NOT_EXISTING = 2
OTHERS = 3.
*->2行目の項目IDを取得する
LOOP AT TBL_DAT INTO LINE_DAT FROM 2 TO 2.
SPLIT LINE_DAT-LINE AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE TBL_STRING.
LOOP AT TBL_STRING INTO L_VALUE .
*->IMPORT パラメータ情報に入力ファイル内項目の存在チェック
READ TABLE LT_INTERFACE-IMPORT INTO LS_IMPORT_PARA WITH KEY PARAMETER = L_VALUE.
IF SY-SUBRC <> 0.
WRITE : /'項目ID「',L_VALUE,'」がインポートパラメータにありません。'.
ER_FLG = 'X'.
ENDIF.
*->IMPORTパラーメタテーブルに項目属性を追加する
CLEAR: LS_PTAB,L_HASH.
MOVE L_VALUE TO LS_PTAB-NAME.
MOVE ABAP_FUNC_EXPORTING TO LS_PTAB-KIND.
INSERT LS_PTAB INTO TABLE LT_PTAB.
*->入力ファイル内項目に対応する値のINDEXをハッシュテーブルに格納する
MOVE L_VALUE TO L_HASH-KEY.
MOVE SY-TABIX TO L_HASH-INX.
INSERT L_HASH INTO TABLE LT_HASH.
ENDLOOP.
*->項目エラーが場合、リターンする
IF ER_FLG = 'X'.
RETURN.
ENDIF.
ENDLOOP.
*->呼び出す先モジュールのEXPORTパラメータを追加する
MOVE 'E_RESULT' TO LS_PTAB-NAME.
MOVE ABAP_FUNC_IMPORTING TO LS_PTAB-KIND.
GET REFERENCE OF L_RE INTO LS_PTAB-VALUE.
INSERT LS_PTAB INTO TABLE LT_PTAB.
*
MOVE 'E_ERMSG' TO LS_PTAB-NAME.
MOVE ABAP_FUNC_IMPORTING TO LS_PTAB-KIND.
GET REFERENCE OF L_MSG INTO LS_PTAB-VALUE.
INSERT LS_PTAB INTO TABLE LT_PTAB.
CLEAR: LS_PTAB,TBL_STRING.
*->汎用パラメータテーブルに値を格納する
LOOP AT TBL_DAT INTO LINE_DAT FROM 3.
SPLIT LINE_DAT-LINE AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE TBL_STRING.
LOOP AT LT_PTAB ASSIGNING <FS_STRC> .
CLEAR L_HASH.
READ TABLE LT_HASH INTO L_HASH WITH TABLE KEY KEY = <FS_STRC>-NAME.
IF SY-SUBRC <> 0 .
CONTINUE.
ENDIF.
READ TABLE LT_INTERFACE-IMPORT INTO LS_IMPORT_PARA WITH KEY PARAMETER = <FS_STRC>-NAME.
CREATE DATA REF_WA TYPE (LS_IMPORT_PARA-STRUCTURE).
ASSIGN REF_WA->* TO <FS2>.
READ TABLE TBL_STRING ASSIGNING <FS_VALUE> INDEX L_HASH-INX .
<FS2> = <FS_VALUE>.
UNASSIGN <FS2>.
IF <FS_STRC>-NAME = 'I_MATERIAL'.
L_MATERIAL_CD = <FS_VALUE>.
ENDIF.
*品目コード
IF SY-SUBRC = 0 AND REF_WA IS NOT INITIAL .
<FS_STRC>-VALUE = REF_WA.
ELSE.
GET REFERENCE OF SPACE INTO <FS_STRC>-VALUE.
ENDIF.
ENDLOOP.
TRY.
*FUNCTIONを呼び出し
CALL FUNCTION 'Y_MD_UPDATE_MAT_MASTER'
PARAMETER-TABLE LT_PTAB.
LH_RESULT-CODE = L_MATERIAL_CD.
*リターン結果
READ TABLE LT_PTAB INTO RE WITH KEY NAME = 'E_RESULT'.
ASSIGN RE-VALUE->* TO <FS_RET>.
CASE <FS_RET>.
WHEN 'CR'.
LH_RESULT-RESULT = 'CR:登録'.
WHEN 'CH'.
LH_RESULT-RESULT = 'CH:変更'.
WHEN 'EX'.
LH_RESULT-RESULT = 'EX:拡張登録'.
WHEN 'ER'.
LH_RESULT-RESULT = 'ER:エラー'.
WHEN 'NO'.
LH_RESULT-RESULT = 'NO:変更なし'.
WHEN ''.
LH_RESULT-RESULT = '他(想定なし)'.
ENDCASE.
*ERメッセージ
READ TABLE LT_PTAB INTO RE_MSG WITH KEY NAME = 'E_ERMSG'.
ASSIGN RE_MSG-VALUE->* TO <FS_REMSG>.
LH_RESULT-RESULT_TEXT = <FS_REMSG>.
*INDEX
LH_RESULT-INX = LH_RESULT-INX + 1.
APPEND LH_RESULT TO LT_RESULT.
CATCH CX_ROOT INTO OREF.
CONTINUE.
ENDTRY.
IF P_CKBOX IS INITIAL.
**-> Commit work
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = L_H_TBL_RETURN.
ELSE.
** -> Rollback work
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDLOOP.
ENDFORM.
订阅:
博文 (Atom)
Customer Characteristic
Characteristic Descriptions are stored in the table - CABNT - Language - SPRAS - Characteristic description - ATBEZ Characteristic Values ...
-
REPORT ZBPADD2 . DATA : L_PARTN_CAT TYPE BAPIBUS1006_HEAD - PARTN_CAT , LS_CENTRAL TYPE BAPIBUS1006_CENTRAL , ...
-
HEADER: ADD Customer Fields to structure of IMKPF and BAPI_TE_XMKPF. Items: ADD Customer Fields to structure of IMSEG and BAPI_TE_XMSEG....
-
FUNCTION:SD_SALESDOCUMENT_CREATE Append fiels to Structure below. BAPE_VBAP BAPE_VBAPX VBAPKOZ VBAPKOZX No need to append fields to Struc...
