编程实现标准挂附件功能

在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

[@more@]

函数如下:

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.
*"----------------------------------------------------------------------
* --&gt I_AKTYP := {H,V,A}
* --&gt I_IWERK
* --&gt I_OBJART := {YO}
* --&gt I_OBJTYP
* --&gt 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
*----------------------------------------------------------------------*
* --&gtP_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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值