项目上很少用到此功能,记录一下。
PK01 创建BAPI BAPI_KANBANCC_CREATE
PK02 修改BAPI BAPI_KANBANCC_CHANGE
代码实例如下:
FORM FRM_EXPORT .
DATA LS_BAPI1172_CREATE TYPE BAPI1172_CREATE .
DATA LT_RETURN TYPE TABLE OF BAPIRET2 .
DATA LS_RETURN TYPE BAPIRET2 .
DATA LS_BAPI1172 TYPE BAPI1172_CONTROLCYCLE_CHANGE.
DATA LS_BAPI1172X TYPE BAPI1172_CONTROLCYCLE_CHANGEX.
DATA LV_MSG TYPE BAPI_MSG .
DATA LV_KANBANCONTROLCYCLE TYPE BAPI1172_LIST_ALL-KANBANCONTROLCYCLE .
READ TABLE GT_ALV TRANSPORTING NO FIELDS WITH KEY LIGHT = GC_RED .
IF SY-SUBRC = 0 .
MESSAGE S012(ZPP_001) DISPLAY LIKE 'E' ."请先处理错误数据!
RETURN .
ENDIF .
BREAK SUNHAO .
LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<FS_ALV>).
CLEAR: <FS_ALV>-MESSAGE,LS_BAPI1172_CREATE,LT_RETURN,LS_BAPI1172,
LS_BAPI1172X,LV_MSG .
IF <FS_ALV>-LIGHT <> GC_YELLOW .
LS_BAPI1172_CREATE-MATERIAL = <FS_ALV>-MATNR .
LS_BAPI1172_CREATE-PLANT = <FS_ALV>-WERKS .
LS_BAPI1172_CREATE-SUPPLYAREA = <FS_ALV>-PRVBE .
LS_BAPI1172_CREATE-KANBAN_CT = <FS_ALV>-BEHAZ .
LS_BAPI1172_CREATE-KANBAN_QTY = <FS_ALV>-BEHMG .
LS_BAPI1172_CREATE-WHSENUMBER = <FS_ALV>-LGNUM .
LS_BAPI1172_CREATE-STGE_TYPE = <FS_ALV>-LGTYP .
LS_BAPI1172_CREATE-STGE_BIN = <FS_ALV>-LGPLA .
LS_BAPI1172_CREATE-STGE_LOC = <FS_ALV>-LGORT .
LS_BAPI1172_CREATE-STRATEGY_STOCK_TRANSF = <FS_ALV>-PKSTU .
LS_BAPI1172_CREATE-CC_STATUS = 'K' .
CALL FUNCTION 'BAPI_KANBANCC_CREATE'
EXPORTING
* TESTRUN =
CONTROLCYCLENEW = LS_BAPI1172_CREATE
TABLES
* EXTENSIONIN =
RETURN = LT_RETURN.
ELSE .
LS_BAPI1172-SUPPLYAREA = <FS_ALV>-PRVBE .
LS_BAPI1172-KANBAN_CT = <FS_ALV>-BEHAZ .
LS_BAPI1172-KANBAN_QTY = <FS_ALV>-BEHMG .
LS_BAPI1172-WHSENUMBER = <FS_ALV>-LGNUM .
LS_BAPI1172-STGE_TYPE = <FS_ALV>-LGTYP .
LS_BAPI1172-STGE_BIN = <FS_ALV>-LGPLA .
LS_BAPI1172-STRATEGY_STOCK_TRANSF = <FS_ALV>-PKSTU .
LS_BAPI1172-STGE_LOC = <FS_ALV>-LGORT .
LS_BAPI1172X-SUPPLYAREA = 'X' .
LS_BAPI1172X-KANBAN_CT = 'X' .
LS_BAPI1172X-KANBAN_QTY = 'X' .
LS_BAPI1172X-WHSENUMBER = 'X' .
LS_BAPI1172X-STGE_TYPE = 'X' .
LS_BAPI1172X-STGE_BIN = 'X' .
LS_BAPI1172X-STRATEGY_STOCK_TRANSF = 'X' .
LS_BAPI1172X-STGE_LOC = 'X' .
CALL FUNCTION 'BAPI_KANBANCC_CHANGE'
EXPORTING
* TESTRUN =
* CONTROLCYCLE_NUMBER = LV_KANBANCONTROLCYCLE
MATERIAL = <FS_ALV>-MATNR
PLANT = <FS_ALV>-WERKS
SUPPLYAREA = <FS_ALV>-PRVBE
CONTROL_CYCLE_CHANGE = LS_BAPI1172
CONTROL_CYCLE_CHANGEX = LS_BAPI1172X
* MATERIAL_EVG =
TABLES
RETURN = LT_RETURN
* EXTENSIONIN =
* EXTENSIONOUT =
* CONTROLCYCLE_IN_TRIGGER_GROUP =.
.
ENDIF .
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
EXIT .
ENDLOOP.
IF SY-SUBRC <> 0 .
* IF <FS_ALV>-LIGHT = GC_YELLOW .
* UPDATE PKHD SET BEHAZ = <FS_ALV>-BEHAZ WHERE PKNUM = <FS_ALV>-PKNUM .
* ENDIF .
<FS_ALV>-LIGHT = GC_GREEN .
<FS_ALV>-MESSAGE = '导入成功!' .
COMMIT WORK.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE .
<FS_ALV>-MESSAGE = '导入失败!' .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX' .
LV_MSG = LV_MSG && LS_RETURN-MESSAGE .
ENDLOOP.
<FS_ALV>-MESSAGE = '导入失败!' && LV_MSG.
<FS_ALV>-LIGHT = GC_RED .
ENDIF .
ENDLOOP .
ENDFORM.
问题: 在使用BAPI BAPI_KANBANCC_CHANGE得时候,发现看字段BEHAZ板容器数 无法修改,本来想直接更新表,测试无法通过,后来跟到BAPI源代码中,SAP注释告诉我说要激活一个开关( following fields can only be changed if , EHP5E-switch is on.)
但我不知道是啥,PP业务也不知道是啥,为了实现功能,我直接加了个隐式增强。实现了字段BEHAZ的修改,增强位置如下图