使用计划功能**数据片
BPS里的DATASLICE,用来锁定指定条件的计划数据。
本代码大部分来源于网上资料,做了简化,重点是参考其中对BUFFER的处理。
计划功能出口调用的SE37函数,标准的导入导出参数几乎是固定的几个,如果你需要对计划数据进行读写,那还得加一个XTH_DATA的Changing参数。
具体概念看看计划功能出口的标准F1帮助也能了解大概了。
实现的功能:通过执行计划功能,实现对数据片的**或取消**。
工作内容:
1,配置计划功能
2,写ABAP函数
---------------------------------------------------------------------------------
计划功能 这里定义好要调用的Function,要给Function传递哪些自定义参数 包括:计划范围,数据片的名字,**/取消**
参数组,定义具体的参数值 ,我指定A表示**,D表示取消**。
ABAP函数
-----------------------------------------------
FUNCTION Z_BPS_DATASLICE_ACTIVE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_AREA) TYPE UPC_Y_AREA
*" REFERENCE(I_PLEVEL) TYPE UPC_Y_PLEVEL
*" REFERENCE(I_PACKAGE) TYPE UPC_Y_PACKAGE
*" REFERENCE(I_METHOD) TYPE UPC_Y_METHOD
*" REFERENCE(I_PARAM) TYPE UPC_Y_PARAM
*" REFERENCE(IT_EXITP) TYPE UPF_YT_EXITP
*" REFERENCE(ITO_CHASEL) TYPE UPC_YTO_CHASEL
*" REFERENCE(ITO_CHA) TYPE UPC_YTO_CHA
*" REFERENCE(ITO_KYF) TYPE UPC_YTO_KYF
*" EXPORTING
*" REFERENCE(ET_MESG) TYPE UPC_YT_MESG
*"----------------------------------------------------------------------
DATA: tb_UPC_DATASLICET TYPE UPC_DATASLICET OCCURS 0.
DATA: wa_UPC_DATASLICET LIKE LINE OF tb_UPC_DATASLICET.
DATA: wa_UPC_DATASLICE TYPE UPC_DATASLICE.
TYPES: BEGIN OF YS_SLICE,
SORT TYPE UPC_DATASLICE-SORT,
GUID TYPE UPC_DATASLICE-GUID,
INACTIVE TYPE UPC_DATASLICE-INACTIVE,
TEXT TYPE UPC_DATASLICET-TEXT,
T_OPTIOS TYPE UPC_YT_OPTIOS,
R_CHASEL TYPE REF TO IF_SEM_CHASEL,
STATUS(1) TYPE C,
END OF YS_SLICE.
DATA: wa_SLICE TYPE YS_SLICE.
TYPES: YTO_SLICE TYPE SORTED TABLE OF YS_SLICE WITH UNIQUE KEY SORT.
TYPES: BEGIN OF YS_AREA_SLICE,
AREA TYPE UPC_Y_AREA,
TO_SLICE TYPE YTO_SLICE,
ENQMODE TYPE ENQMODE,
END OF YS_AREA_SLICE.
DATA: ES_AREA_SLICE TYPE YS_AREA_SLICE.
DATA: wa_et_mesg TYPE upc_ys_mesg.
* Parameters of Parameters Group
DATA: wa_INACTIVE TYPE C.
DATA: wa_AREA TYPE UPC_Y_AREA.
DATA: wa_PATH TYPE UPC_Y_DATASLICETXT.
DATA: ls_exitp TYPE upf_ys_exitp.
* Get State / Param of DataSlices
READ TABLE it_exitp INTO ls_exitp WITH KEY parnm = 'DS_STATE'.
IF sy-subrc = 0.
CASE ls_exitp-chavl.
WHEN 'A'. " DataSlices must be Activated.
wa_INACTIVE = ''.
WHEN 'D'. " DataSlices must be DE-Activated.
wa_INACTIVE = 'X'.
ENDCASE.
ENDIF.
READ TABLE it_exitp INTO ls_exitp WITH KEY parnm = 'DS_AREA'.
IF sy-subrc = 0.
wa_AREA = ls_exitp-chavl.
ENDIF.
READ TABLE it_exitp INTO ls_exitp WITH KEY parnm = 'DS_PATH'.
IF sy-subrc = 0.
wa_PATH = ls_exitp-chavl.
ENDIF.
SELECT SINGLE * FROM UPC_DATASLICET
INTO wa_UPC_DATASLICET
WHERE AREA EQ wa_AREA
AND TEXT EQ wa_PATH .
SELECT SINGLE * INTO wa_UPC_DATASLICE
FROM UPC_DATASLICE
WHERE AREA EQ wa_AREA
AND SORT EQ wa_UPC_DATASLICET-SORT.
PERFORM BUFFER_DATASLICE_GET IN PROGRAM SAPLUPC_DATASLICE
USING wa_UPC_DATASLICE-AREA 'E'
CHANGING ES_AREA_SLICE.
LOOP AT ES_AREA_SLICE-TO_SLICE INTO wa_SLICE
WHERE SORT = wa_UPC_DATASLICE-SORT AND GUID = wa_UPC_DATASLICE-GUID.
wa_SLICE-INACTIVE = wa_INACTIVE.
wa_SLICE-STATUS = 'M'.
MODIFY ES_AREA_SLICE-TO_SLICE FROM wa_SLICE.
ENDLOOP.
PERFORM BUFFER_DATASLICE_UPDATE IN PROGRAM SAPLUPC_DATASLICE
CHANGING ES_AREA_SLICE.
CALL FUNCTION 'UPC_DATASLICE_COMMIT'.
CALL FUNCTION 'UPC_DATASLICE_SAVE'.
CLEAR ES_AREA_SLICE.
wa_et_mesg-MSGID = 'UPC_FW'.
wa_et_mesg-MSGTY = 'I'.
wa_et_mesg-MSGNO = '001'.
wa_et_mesg-MSGV1 = wa_UPC_DATASLICET-TEXT.
wa_et_mesg-MSGV2 = wa_UPC_DATASLICET-AREA.
wa_et_mesg-MSGV3 = wa_INACTIVE.
append wa_et_mesg to et_mesg.
ENDFUNCTION.
计划文件夹中的效果
点击取消**按钮(e) ,数据片变为不活动,锁定取消,数据可编辑
点击**按钮(i) ,数据片变为活动,数据锁定,不可编辑