在PBO 程序调用如下函数:
MODULE D200_OBJECT_SERVICE OUTPUT.
CALL FUNCTION 'YWCM_GOS_PUBLISH'
EXPORTING
I_AKTYP = GOS_AKTYP
I_IWERK = YWCAHS-IWERK
I_OBJART = 'YO'
I_OBJTYP = 'Y'
I_OBJKEY = YWCAHS-TASK_NUM
EXCEPTIONS
ERROR = 1
OTHERS = 2.
PERFORM LWCFWF01_EXCEPTION_SHOW IN PROGRAM SAPLWCFW
USING
SY-SUBRC
'YWCM_GOS_PUBLISH'.
ENDMODULE. " D200_OBJECT_SERVICE OUTPUT
函数如下:
FUNCTION YWCM_GOS_PUBLISH.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_AKTYP) TYPE WCTP1_AKTYP_TYPE
*" REFERENCE(I_IWERK) TYPE WCTP1_IWERK_TYPE
*" REFERENCE(I_OBJART) TYPE WCTP1_OBJART_TYPE
*" REFERENCE(I_OBJTYP) TYPE WCTP1_OBJTYP_TYPE
*" REFERENCE(I_OBJKEY) TYPE WCTP1_OBJKEY_TYPE
*"----------------------------------------------------------------------
* Purpose: publish a WCM object (for generic object services) by
* - creating instance for general object service class CL_GOS_MANAGER
* - creating instance for local event handler class LCL_GOS_HANDLER
* note that publishing will only be triggered once.
*"----------------------------------------------------------------------
* --> I_AKTYP := {H,V,A}
* --> I_IWERK
* --> I_OBJART := {YO}
* --> I_OBJTYP
* --> I_OBJKEY
*-----------------------------------------------------------------------
* local data -----------------------------------------------------------
* constants
* data declaration
* main part ------------------------------------------------------------
IF ( GOS_OBJECT_FLG EQ WCTP1_UNMARKED ).
* => object service handling still undone
* handling will only be done once
GOS_OBJECT_FLG = WCTP1_MARKED.
* create object service instance
PERFORM LYWCM_GOS_OBJECT_CREATE
USING
I_AKTYP
I_IWERK
I_OBJART
I_OBJTYP
I_OBJKEY.
IF ( GOS_OBJECT_REF IS NOT INITIAL ).
* => object service instance successfully created
* create event handler instance
PERFORM LYWCM_GOS_HANDLER_CREATE
USING
I_OBJKEY.
ENDIF.
* check both instances
IF ( ( GOS_OBJECT_REF IS INITIAL ) OR
( GOS_HANDLER_REF IS INITIAL ) ).
MESSAGE I740.
* Die generischen Objektdienste sind nicht verfügbar
ENDIF.
ENDIF.
ENDFUNCTION.
函数调用的FORM 如下:
DATA: GOS_OBJECT_FLG TYPE WCTP1_FLG_TYPE VALUE WCTP1_UNMARKED.
DATA: GOS_OBJECT_REF TYPE REF TO CL_GOS_MANAGER.
DATA: GOS_HANDLER_REF TYPE REF TO LCL_GOS_HANDLER.
DATA: GOS_AKTYP TYPE WCTP1_AKTYP_TYPE.
FORM LYWCM_GOS_OBJECT_CREATE
USING
VALUE(I_AKTYP) TYPE WCTP1_AKTYP_TYPE
VALUE(I_IWERK) TYPE WCTP1_IWERK_TYPE
VALUE(I_OBJART) TYPE WCTP1_OBJART_TYPE
VALUE(I_OBJTYP) TYPE WCTP1_OBJTYP_TYPE
VALUE(I_NUMBER) TYPE WCTP1_OBJKEY_TYPE.
* local data -----------------------------------------------------------
* constants
* data declaration
DATA: L_OBJECT TYPE BORIDENT.
DATA: L_NO_INSTANCE_FLG TYPE WCTP1_FLG_TYPE VALUE WCTP1_UNMARKED.
DATA: L_IP_MODE TYPE SGS_RWMOD.
* main part ------------------------------------------------------------
* initialize global object service instance
CLEAR: GOS_OBJECT_REF.
* determine BOR object identifier
CLEAR:L_OBJECT.
L_OBJECT-OBJKEY = I_NUMBER.
L_OBJECT-OBJTYPE = 'YOP'.
IF ( L_OBJECT IS NOT INITIAL ).
* => BOR identifier determined
IF ( L_OBJECT-OBJKEY IS INITIAL ).
* => BOR instance (= WCM object ID) not yet known (to be drawn later)
L_NO_INSTANCE_FLG = WCTP1_MARKED.
ENDIF.
* object service instance to be created in ...
CASE I_AKTYP.
WHEN WCTP1_AKTYP_H OR
WCTP1_AKTYP_V.
* => create/change mode (=> write mode)
L_IP_MODE = CL_GOS_SERVICE=>MP_MODE_WRITE.
WHEN WCTP1_AKTYP_A.
* => display mode (=> read-only mode)
L_IP_MODE = CL_GOS_SERVICE=>MP_MODE_READ.
WHEN OTHERS.
* => bug
MESSAGE A707 WITH I_AKTYP.
* Aktionstyp (&) ist nicht definiert
ENDCASE.
* create object service instance
CREATE OBJECT GOS_OBJECT_REF
EXPORTING
IS_OBJECT = L_OBJECT
IP_NO_INSTANCE = L_NO_INSTANCE_FLG
IP_NO_COMMIT = WCTP1_MARKED
IP_MODE = L_IP_MODE
EXCEPTIONS
OTHERS = 0.
ELSE. "#EC NEEDED
* => BOR identifier not determined (GOS_OBJECT_REF remains initial)
ENDIF.
ENDFORM. " LYWCM_GOS_OBJECT_CREATE
*&---------------------------------------------------------------------*
*& Form LYWCM_GOS_HANDLER_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_OBJKEY text
*----------------------------------------------------------------------*
FORM LYWCM_GOS_HANDLER_CREATE
USING
VALUE(I_OBJKEY) TYPE WCTP1_OBJKEY_TYPE.
* local data -----------------------------------------------------------
* constants
* data declaration
* main part ------------------------------------------------------------
* initialize global event handler instance
CLEAR: GOS_HANDLER_REF.
* create event handler instance
CREATE OBJECT GOS_HANDLER_REF.
IF ( GOS_HANDLER_REF IS NOT INITIAL ).
* initialize instance attributes
GOS_HANDLER_REF->OBJKEY_INITIAL = WCTP1_UNMARKED.
GOS_HANDLER_REF->COMMIT_REQUIRED = WCTP1_UNMARKED.
IF ( I_OBJKEY IS INITIAL ).
GOS_HANDLER_REF->OBJKEY_INITIAL = WCTP1_MARKED.
ENDIF.
* register instance event handler for commit events
SET HANDLER GOS_HANDLER_REF->ON_COMMIT_REQUIRED
FOR ALL INSTANCES.
ENDIF.
ENDFORM. " LYWCM_GOS_HANDLER_CREATE
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/73630/viewspace-1008587/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/73630/viewspace-1008587/