SAP GOS 增强

GOS 即 Generic Object Services,GOS是一个工具栏,提供不同的功能,如添加附件、创建文档链接、显示所有附件等,非常实用的附件管理工具。

目前,在系统中GOS工具栏默认情况下仅对某些SAP对象可用,可以使用类CL_GOS_MANAGER激活GOS工具栏。

如下图:(标准采购订单默认激活GOS功能)

GOS常用标准事务信息如下: 

事务码 描述对象类型增强地点
ME21N/ME22N/ME23N采购订单BUS2012
VA01 / VA02 / VA03销售订单BUS2032

用户账号参数设置即可

SD_SWU_ACTIVE = ‘X’ 

VL01N / VL02N / VL03N交货单LIKP
VF01 / VF02 / VF03销售发票VBRK
MIRO采购发票BUS2081
FB01 / FB02 / FB03会计凭证BUS6035
QA01 / QA02 / QA03检验批BUS2045

CS01 / CS02 / CS03物料BOMBUS1080LCSDIFCD
VD51 / VD52 / VD53客户 物料信息记录BUS3033MV10AF0T_TEXT_SAPSC_ZAEHLEN
QP01 / QP02 / QP03检验计划BUS1191LCPDIFH1
C201 / C202 / C203主配方BUS1041LCPDIFH1
QF11 / QF21 / QF31特性缺陷BUS2045

MQFFEF10

另外,还可以查看表:

TOJTB - 事务对象储存处: 基础数据

TOJTT - 对象类型文本表

SRGBTBREL - 查看已上传的附件信息

主要应用场景:

1、扩展不支持的事务码(以 物料BOM CS01/ CS02/ CS03 为例)

在 LCSDIFCD 最后新增隐式增强,完成增强后前端自动显示按钮

ENHANCEMENT 1  ZPP_BOM_ENH_GOS.    "active version
*&GOS Enhancement for Material BOM (CS01\CS92\CS03)  20220419 Begin
*Refer to: blogs.sap.com/2012/11/21/activating-generic-object-services-toolbar-in-sap-objects/
DATA: LR_GOS_MANAGER TYPE REF TO CL_GOS_MANAGER,
      LS_BORIDENT TYPE BORIDENT.

CLEAR:LS_BORIDENT.
LS_BORIDENT-OBJTYPE = 'BUS1080'.
IF RC29N-MATNR is NOT INITIAL.
  LS_BORIDENT-OBJKEY = |{ RC29N-MATNR }{ RC29N-WERKS }{ RC29N-STLAN }|.

  CREATE OBJECT LR_GOS_MANAGER
    EXPORTING
      IS_OBJECT    = LS_BORIDENT
      IP_NO_COMMIT = ''
    EXCEPTIONS
      OBJECT_INVALID = 1.
ENDIF.
**&GOS Enhancement for Material BOM (CS01\CS92\CS03)  20220419 End
ENDENHANCEMENT.

注意:OBJKEY 主要是执行事务码所必须的字段组合。 

也可以通过一下方法检查:

a. 事务码 SWO1 - 业务对象构建器

b.显示对应对象,并检查对应关键字段信息

2、GOS 上传(程序)

(以采购订单 - BUS2012 为例)

PERFORM gos_upload USING 'BUS2012'                        "对象
                         '4100001735'                     "Key
                         'C:\Users\XXXX\Desktop\XXXX.txt'."文件路径
*&---------------------------------------------------------------------*
*&      Form  GOS_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*      <--P_SY_SUBRC  text
*----------------------------------------------------------------------*
FORM gos_upload  USING    p_objtype
                          p_objkey
                          p_filestr.

  DATA : obj_roleb    TYPE borident,
         obj_rolea    TYPE borident,
         document     LIKE sood4,
         folder_id    LIKE soodk,
         header_data  LIKE sood2,
         folmem_data  LIKE sofm2,
         receive_data LIKE soos6.

  DATA : BEGIN OF lt_files OCCURS 0,
           filename(128),
         END OF lt_files.

*** 获取文件夹根ID
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      owner                 = ' '
      region                = 'B'
    IMPORTING
      folder_id             = folder_id
    EXCEPTIONS
      communication_failure = 1
      owner_not_exist       = 2
      system_failure        = 3
      x_error               = 4.

  CLEAR lt_files[].
  APPEND p_filestr TO lt_files.

*** 取上传文件的标题作为附件的剪短描述
  CALL FUNCTION 'J_3RVATD_SPLIT_FILENAME'
    EXPORTING
      iv_long_filename = p_filestr
    IMPORTING
      ev_pure_filename = header_data-objdes
*     EV_PURE_EXTENSION       =
    .

*** 对象文件夹:来自 ID 的对象类型
  document-foltp = folder_id-objtp.
*** 对象文件夹:来自 ID 的年
  document-folyr = folder_id-objyr.
*** 对象文件夹:来自 ID 的编号
  document-folno = folder_id-objno.
*** 内容的简短描述
  document-objdes = header_data-objdes.
*** 文档,文件夹或分配清单的名称
  document-objnam = header_data-objdes.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      method       = 'IMPORTFROMPC'
*     OFFICE_USER  =
*     REF_DOCUMENT =
*     NEW_PARENT   =
*   IMPORTING
*     AUTHORITY    =
*     RCODE        =
    TABLES
*     OBJCONT      =
*     OBJHEAD      =
*     OBJPARA      =
*     OBJPARB      =
*     RECIPIENTS   =
*     ATTACHMENTS  =
*     REFERENCES   =
      files        = lt_files[]
    CHANGING
      document     = document
      header_data  = header_data
      folmem_data  = folmem_data
      receive_data = receive_data.

  IF document-okcode = 'CREA' OR document-okcode = 'CHNG'.

*** 对象关键字
    obj_rolea-objkey = p_objkey.
*** 对象类型
    obj_rolea-objtype = p_objtype.

*** 对象类型
    obj_roleb-objtype = 'MESSAGE'.
*** 对象关键字
    obj_roleb-objkey = document(34).

    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = obj_rolea
        obj_roleb      = obj_roleb
        relationtype   = 'ATTA'
*   IMPORTING
*       BINREL         =
*   TABLES
*       BINREL_ATTRIB  =
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3.
    IF sy-subrc = 0.
      WRITE : 'Upload success.'.
    ELSE.
      WRITE : 'Upload fail.'.
    ENDIF.
  ELSE.
    WRITE : 'Create fail.'.
  ENDIF.
ENDFORM.                    " GOS_UPLOAD

 3、GOS 下载(程序)

(以 采购订单 - BUS2012 为例)

PERFORM gos_download USING 'BUS2012'                "对象
                           '4100001735'             "key
                           'C:\Users\XXXX\Desktop\XXXX.txt'."文件路径
*&---------------------------------------------------------------------*
*&      Form  GOS_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*----------------------------------------------------------------------*
FORM gos_download  USING    p_classname
                            p_ebeln
                            p_filestr.

  DATA : BEGIN OF itab_srgb OCCURS 0.
           INCLUDE STRUCTURE srgbtbrel.
  DATA : filename(200),
         END OF itab_srgb.
  DATA : objcont            TYPE TABLE OF soli,
         folder_id          LIKE soodk,
         object_id          LIKE soodk,
         loio_object        LIKE sdokobject,
         context            LIKE sdokpropty OCCURS 0 WITH HEADER LINE,
         phio_object        LIKE sdokobject,
         file_access_info   LIKE sdokfilaci OCCURS 0 WITH HEADER LINE,
         file_content_ascii LIKE sdokcntasc OCCURS 0 WITH HEADER LINE,
         cont_bin           LIKE sdokcntbin OCCURS 0 WITH HEADER LINE.

  SELECT * FROM srgbtbrel
    INTO TABLE itab_srgb
    WHERE instid_a = p_ebeln
      AND typeid_a = p_classname
      AND catid_a = 'BO'
      AND reltype = 'ATTA'
      AND logsys_a = ''.

  READ TABLE itab_srgb INDEX 1.
  folder_id = itab_srgb-instid_b+0(17).
  object_id = itab_srgb-instid_b+17(17).

  CALL FUNCTION 'SO_OBJECT_READ'
    EXPORTING
      folder_id                  = folder_id
      object_id                  = object_id
    TABLES
      objcont                    = objcont
    EXCEPTIONS
      active_user_not_exist      = 1
      communication_failure      = 2
      component_not_available    = 3
      folder_not_exist           = 4
      folder_no_authorization    = 5
      object_not_exist           = 6
      object_no_authorization    = 7
      operation_no_authorization = 8
      owner_not_exist            = 9
      parameter_error            = 10
      substitute_not_active      = 11
      substitute_not_defined     = 12
      system_failure             = 13
      x_error                    = 14.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
    IMPORTING
      loio_object       = loio_object
    TABLES
      objcont           = objcont
      context           = context
    EXCEPTIONS
      missing_kpro_data = 1.

  IF sy-subrc = 0 .
    CALL FUNCTION 'SO_LOIO_PHIO_GET'
      EXPORTING
        loio_object        = loio_object
      IMPORTING
        phio_object        = phio_object
      TABLES
        context            = context
      EXCEPTIONS
        kpro_inconsistency = 1
        x_error            = 2.
    CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
      EXPORTING
        object_id           = phio_object
        text_as_stream      = 'X'
      TABLES
        file_access_info    = file_access_info
        file_content_ascii  = file_content_ascii
        file_content_binary = cont_bin
      EXCEPTIONS
        not_existing        = 1
        not_authorized      = 2
        no_content          = 3
        bad_storage_type    = 4.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = p_filestr
        filetype                = 'BIN'
      TABLES
        data_tab                = cont_bin
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21.
  ELSE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = p_filestr
        filetype                = 'ASC'
      TABLES
        data_tab                = objcont
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21.

  ENDIF.

  IF sy-subrc = 0 .
    WRITE : 'Download success.'.
  ELSE.
    WRITE : 'Download fail.'.
  ENDIF.
ENDFORM.                    " GOS_DOWNLOAD

4、GOS 附件读取

(以采购订单为例)

PARAMETERS:p_ebeln TYPE ekko-ebeln.
 
DATA:lv_logical_system  LIKE  bapibds01-log_system,
     classname          LIKE  bapibds01-classname,
     gos_objkey         LIKE  swotobjid-objkey,
     lt_gos_connections LIKE bdn_con OCCURS 1 WITH HEADER LINE.
DATA:lv_id             TYPE sofolenti1-doc_id,
     ls_doc_data       TYPE sofolenti1,
     lt_object_header  TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
     lt_object_content TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
     lt_hex            TYPE STANDARD TABLE OF solix WITH HEADER LINE.
 
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
  IMPORTING
    own_logical_system                = lv_logical_system
  EXCEPTIONS
    own_lv_logical_system_not_defined = 1
    OTHERS                            = 2.
.
gos_objkey = p_ebeln. "采购订单
 
CALL FUNCTION 'BDS_GOS_CONNECTIONS_GET'
  EXPORTING
    logical_system     = lv_logical_system
    classname          = 'BUS2012'  "用来标识采购订单
    objkey             = gos_objkey
    client             = sy-mandt
  TABLES
    gos_connections    = lt_gos_connections
  EXCEPTIONS
    no_objects_found   = 1
    internal_error     = 2
    internal_gos_error = 3
    OTHERS             = 4.
 
LOOP AT lt_gos_connections.
 
  lv_id = lt_gos_connections-loio_id.
  CALL FUNCTION 'SO_DOCUMENT_READ_API1'
    EXPORTING
      document_id                = lv_id         
    IMPORTING
      document_data              = ls_doc_data
    TABLES
      object_header              = lt_object_header
      object_content             = lt_object_content
      contents_hex               = lt_hex
    EXCEPTIONS
      document_id_not_exist      = 1
      operation_no_authorization = 2
      x_error                    = 3
      OTHERS                     = 4.
  BREAK-POINT.
 
ENDLOOP.

5、GOS 列表展示

DATA:is_object TYPE sibflporb,
     ip_mode   TYPE char1.

is_object-instid = '4100001735'."实例标识
is_object-typeid = 'BUS2012'."对象类型
is_object-catid  = 'BO'.  "默认

ip_mode = 'D'.
"D仅显示
*E可更改但不提交数据库更新
*C可更改并提交数据库更新

CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
  EXPORTING
    is_object      = is_object
    ip_check_arl   = 'X'
    ip_check_bds   = 'X'
    ip_notes       = 'X'
    ip_attachments = 'X'
    ip_urls        = 'X'
    ip_mode        = ip_mode.
* IMPORTING
*   EP_SAVE_REQUEST       =
* TABLES
*   IT_OBJECTS            =

参考文章:

【ABAP】 运用GOS技术将报文中的附件(PDF.TXT等) 存至系统附件内

SAP标准附件-GOS(generic object service)

Activating Generic Object Services Toolbar in SAP Objects

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值