Funcionalidades de Gerenciamento de Anexos GOS em ABAP: Upload, Download e Leitura

Upload de Anexos GOS

Tipos de Objetos Comumente Uitlizados:

Pedido de Compra:BUS2012

Pedido de Venda:BUS2032

Nota de Entrega:LIKP

Fatura de Vanda:VBRK

Fatura de Compra:BUS2081

Documento Contábil:BUS6035

Você pode encontrar tipos de objetos relacionados na tabela TOJTT

*&---------------------------------------------------------------------*
*& Report  Z_UPLOAD_GOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT z_upload_gos.

START-OF-SELECTION.

  PERFORM processar_upload USING 'BUS2012'
                                 '4500000105'
                                 'C:\Users\SC10516\Desktop\novo_documento.txt'.
*&---------------------------------------------------------------------*
*&      Form  PROCESSAR_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TIPO_OBJETO   text
*      -->P_CHAVE_OBJETO  text
*      -->P_CAMINHO_ARQUIVO text
*----------------------------------------------------------------------*
FORM processar_upload  USING    p_tipo_objeto
                              p_chave_objeto
                              p_caminho_arquivo.

  DATA : identificador_objeto_a    TYPE borident,
         identificador_objeto_b    TYPE borident,
         documento                 LIKE sood4,
         id_pasta                  LIKE soodk,
         dados_cabecalho           LIKE sood2,
         dados_pasta               LIKE sofm2,
         dados_recebidos           LIKE soos6.

  DATA : BEGIN OF lt_arquivos OCCURS 0,
           nome_arquivo(128),
         END OF lt_arquivos.

*** Obter ID da pasta raiz
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      proprietario                 = ' '
      regiao                      = 'B'
    IMPORTING
      id_pasta                    = id_pasta
    EXCEPTIONS
      falha_comunicacao           = 1
      proprietario_inexistente    = 2
      falha_sistema               = 3
      erro_x                      = 4.

  CLEAR lt_arquivos[].
  APPEND p_caminho_arquivo TO lt_arquivos.

*** Usar o nome do arquivo como descrição resumida do anexo
  CALL FUNCTION 'J_3RVATD_SPLIT_FILENAME'
    EXPORTING
      nome_arquivo_completo = p_caminho_arquivo
    IMPORTING
      nome_arquivo_puro     = dados_cabecalho-objdes
*     EV_PURE_EXTENSION       =
    .

*** Tipo de objeto da pasta: do ID do objeto
  documento-foltp = id_pasta-objtp.
*** Ano do objeto da pasta: do ID
  documento-folyr = id_pasta-objyr.
*** Número do objeto da pasta: do ID
  documento-folno = id_pasta-objno.
*** Descrição resumida do conteúdo
  documento-objdes = dados_cabecalho-objdes.
*** Nome do documento, pasta ou lista de atribuição
  documento-objnam = dados_cabecalho-objdes.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      metodo       = 'IMPORTFROMPC'
*     OFFICE_USER  =
*     REF_DOCUMENT =
*     NEW_PARENT   =
*   IMPORTING
*     AUTHORITY    =
*     RCODE        =
    TABLES
*     OBJCONT      =
*     OBJHEAD      =
*     OBJPARA      =
*     OBJPARB      =
*     RECIPIENTS   =
*     ATTACHMENTS  =
*     REFERENCES   =
      arquivos     = lt_arquivos[]
    CHANGING
      documento    = documento
      dados_cabecalho = dados_cabecalho
      dados_pasta = dados_pasta
      dados_recebidos = dados_recebidos.

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

*** Chave do objeto
    identificador_objeto_a-objkey = p_chave_objeto.
*** Tipo do objeto
    identificador_objeto_a-objtype = p_tipo_objeto.

*** Tipo do objeto
    identificador_objeto_b-objtype = 'MESSAGE'.
*** Chave do objeto
    identificador_objeto_b-objkey = documento(34).

    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = identificador_objeto_a
        obj_roleb      = identificador_objeto_b
        relationtype   = 'ATTA'
*   IMPORTING
*       BINREL         =
*   TABLES
*       BINREL_ATTRIB  =
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3.
    IF sy-subrc = 0.
      WRITE : 'Upload realizado com sucesso.'.
    ELSE.
      WRITE : 'Falha no upload.'.
    ENDIF.
  ELSE.
    WRITE : 'Falha na criação.'.
  ENDIF.
ENDFORM.                    " PROCESSAR_UPLOAD

Download de Anexos GOS

*&---------------------------------------------------------------------*
*& Report  Z_DOWNLOAD_GOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT z_download_gos.

START-OF-SELECTION.

  PERFORM processar_download USING 'BUS2012'
                                  '4500000105'
                                  'D:\documento_explicativo.text'.

*&---------------------------------------------------------------------*
*&      Form  PROCESSAR_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TIPO_OBJETO   text
*      -->P_CHAVE_OBJETO  text
*      -->P_CAMINHO_SAIDA text
*----------------------------------------------------------------------*
FORM processar_download  USING    p_tipo_objeto
                                p_chave_objeto
                               p_caminho_saida.

  DATA : BEGIN OF lt_relacoes OCCURS 0.
           INCLUDE STRUCTURE srgbtbrel.
  DATA : nome_arquivo(200),
         END OF lt_relacoes.
  DATA : conteudo_objeto           TYPE TABLE OF soli,
         id_pasta                  LIKE soodk,
         id_objeto                 LIKE soodk,
         objeto_loio               LIKE sdokobject,
         contexto                  LIKE sdokpropty OCCURS 0 WITH HEADER LINE,
         objeto_phio               LIKE sdokobject,
         info_acesso_arquivo       LIKE sdokfilaci OCCURS 0 WITH HEADER LINE,
         conteudo_arquivo_ascii    LIKE sdokcntasc OCCURS 0 WITH HEADER LINE,
         conteudo_binario          LIKE sdokcntbin OCCURS 0 WITH HEADER LINE.

  SELECT * FROM srgbtbrel
    INTO TABLE lt_relacoes
    WHERE instid_a = p_chave_objeto
      AND typeid_a = p_tipo_objeto
      AND catid_a = 'BO'
      AND reltype = 'ATTA'
      AND logsys_a = ''.

  READ TABLE lt_relacoes INDEX 1.
  id_pasta = lt_relacoes-instid_b+0(17).
  id_objeto = lt_relacoes-instid_b+17(17).

  CALL FUNCTION 'SO_OBJECT_READ'
    EXPORTING
      folder_id                  = id_pasta
      object_id                  = id_objeto
    TABLES
      objcont                    = conteudo_objeto
    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
      objeto_loio       = objeto_loio
    TABLES
      objcont           = conteudo_objeto
      contexto           = contexto
    EXCEPTIONS
      missing_kpro_data = 1.

  IF sy-subrc = 0 .
    CALL FUNCTION 'SO_LOIO_PHIO_GET'
      EXPORTING
        objeto_loio        = objeto_loio
      IMPORTING
        objeto_phio        = objeto_phio
      TABLES
        contexto            = contexto
      EXCEPTIONS
        kpro_inconsistency = 1
        x_error            = 2.
    CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
      EXPORTING
        object_id           = objeto_phio
        text_as_stream      = 'X'
      TABLES
        file_access_info    = info_acesso_arquivo
        file_content_ascii  = conteudo_arquivo_ascii
        file_content_binary = conteudo_binario
      EXCEPTIONS
        not_existing        = 1
        not_authorized      = 2
        no_content          = 3
        bad_storage_type    = 4.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = p_caminho_saida
        filetype                = 'BIN'
      TABLES
        data_tab                = conteudo_binario
      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_caminho_saida
        filetype                = 'ASC'
      TABLES
        data_tab                = conteudo_objeto
      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 realizado com sucesso.'.
  ELSE.
    WRITE : 'Falha no download.'.
  ENDIF.


ENDFORM.                    " PROCESSAR_DOWNLOAD

Upload de URL no GOS

FUNCTION ZFM_SD_CRIAR_URL .
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     VALUE(IS_INFO) TYPE  ZSSD0022 OPTIONAL
*"  TABLES
*"      IT_URL STRUCTURE  ZSSD0020 OPTIONAL
*"      ET_RETURN STRUCTURE  ZSSD0023 OPTIONAL
*"----------------------------------------------------------------------
  DATA:TIPO_OBJETO TYPE SWO_OBJTYP. "(table BDS_LOCL)
  DATA:PASTA_ID TYPE SOFDK.
  DATA ID_URL   TYPE SO_URL.
  DATA:LT_CONTEUDO_OBJETO TYPE TABLE OF SOLI,
       LS_CONTEUDO_OBJETO TYPE SOLI.
  DATA:LT_CABECALHO_OBJETO TYPE TABLE OF SOLI,
       LS_CABECALHO_OBJETO TYPE SOLI.
  DATA:LS_CABECALHO_OBJETO_HD TYPE SOOD1,
       LS_ID_OBJETO          TYPE SOODK.
  DATA:ID_DOCUMENTO TYPE SOFMK,
       LS_PAPEL_A   TYPE BORIDENT,
       LS_PAPEL_B   TYPE BORIDENT.
  DATA:MENSAGEM TYPE STRING.


  CASE IS_INFO-ZBUTYPE.
    WHEN 'S'. "SO
      TIPO_OBJETO = 'BUS2032'.
    WHEN 'D'. "DN
      TIPO_OBJETO = 'LIKP'.
    WHEN 'B'. "BILL
      TIPO_OBJETO = 'VBRK'.
    WHEN 'R'.
      TIPO_OBJETO = 'BUS2081'.
    WHEN 'X'."PR
      TIPO_OBJETO = 'BUS2105'.
    WHEN OTHERS.
      ET_RETURN-TYPE = 'E'.
      ET_RETURN-MESSAGE = 'Tipo de negócio não suportado'.
      APPEND ET_RETURN.
      RETURN.
  ENDCASE.


  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      REGIAO    = 'B'
    IMPORTING
      PASTA_ID = PASTA_ID
    EXCEPTIONS
      OTHERS    = 1.

  LOOP AT IT_URL INTO DATA(LS_URL).
    CLEAR:ID_URL,LS_CABECALHO_OBJETO_HD,LS_ID_OBJETO,LT_CONTEUDO_OBJETO,LT_CABECALHO_OBJETO,
          LS_PAPEL_A,LS_PAPEL_B,MENSAGEM.

    ID_URL = LS_URL-URL.

    WHILE NOT ID_URL IS INITIAL.
      CONCATENATE '&KEY&' ID_URL(250) INTO LS_CONTEUDO_OBJETO.
      APPEND LS_CONTEUDO_OBJETO TO LT_CONTEUDO_OBJETO.
      SHIFT ID_URL LEFT BY 250 PLACES.
    ENDWHILE.

    LS_CABECALHO_OBJETO_HD-OBJDES = LS_URL-TITLE.
    LS_CABECALHO_OBJETO_HD-OBJSNS = 'O'.
    LS_CABECALHO_OBJETO_HD-OBJLA  = SY-LANGU.

    CALL FUNCTION 'SO_OBJECT_INSERT'
      EXPORTING
        PASTA_ID                  = PASTA_ID
*       OBJECT_FL_CHANGE           = ' '
        CABECALHO_OBJETO_HD_CHANGE = LS_CABECALHO_OBJETO_HD
        TIPO_OBJETO                = 'URL'
*       ORIGINATOR_ID              = ' '
*       DONO                      = ' '
      IMPORTING
*       OBJECT_FL_DISPLAY          =
*       OBJECT_HD_DISPLAY          =
        ID_OBJETO                 = LS_ID_OBJETO
      TABLES
        CONTEUDO_OBJETO           = LT_CONTEUDO_OBJETO
        CABECALHO_OBJETO          = LT_CABECALHO_OBJETO
*       OBJPARA                    =
*       OBJPARB                    =
      EXCEPTIONS
        ACTIVE_USER_NOT_EXIST      = 1
        COMMUNICATION_FAILURE      = 2
        COMPONENT_NOT_AVAILABLE    = 3
        DL_NAME_EXIST              = 4
        PASTA_NOT_EXIST           = 5
        PASTA_NO_AUTHORIZATION    = 6
        OBJECT_TYPE_NOT_EXIST      = 7
        OPERATION_NO_AUTHORIZATION = 8
        DONO_NOT_EXIST            = 9
        PARAMETER_ERROR            = 10
        SUBSTITUTE_NOT_ACTIVE      = 11
        SUBSTITUTE_NOT_DEFINED     = 12
        SYSTEM_FAILURE             = 13
        X_ERROR                    = 14
        OTHERS                     = 15.
    IF SY-SUBRC = 0.

      ID_DOCUMENTO-FOLTP = PASTA_ID-FOLTP.
      ID_DOCUMENTO-FOLYR = PASTA_ID-FOLYR.
      ID_DOCUMENTO-FOLNO = PASTA_ID-FOLNO.
      ID_DOCUMENTO-DOCTP = LS_ID_OBJETO-OBJTP.
      ID_DOCUMENTO-DOCYR = LS_ID_OBJETO-OBJYR.
      ID_DOCUMENTO-DOCNO = LS_ID_OBJETO-DOCNO.

      LS_PAPEL_A-OBJKEY = IS_INFO-OBJKEY.
      LS_PAPEL_A-OBJTYPE = TIPO_OBJETO.

      LS_PAPEL_B-OBJKEY   = ID_DOCUMENTO .
      LS_PAPEL_B-OBJTYPE  = 'MESSAGE' .

      CALL FUNCTION 'BINARY_RELATION_CREATE'
        EXPORTING
          OBJ_ROLEA    = LS_PAPEL_A " IS_OBJECT
          OBJ_ROLEB    = LS_PAPEL_B "REL_DOC
          RELATIONTYPE = 'URL' "'NOTE'
        EXCEPTIONS
          OTHERS       = 1.
      IF SY-SUBRC <> 0.
        ROLLBACK WORK.
        ET_RETURN-TITLE = LS_URL-TITLE.
        ET_RETURN-TYPE = 'E'.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
          INTO MENSAGEM.
        ET_RETURN-MESSAGE = MENSAGEM.
        APPEND ET_RETURN.
        CLEAR ET_RETURN.
        CONTINUE.
      ELSE.
        COMMIT WORK.
        ET_RETURN-TITLE = LS_URL-TITLE.
        ET_RETURN-TYPE = 'S'.
        APPEND ET_RETURN.
        CLEAR ET_RETURN.
        CONTINUE.
      ENDIF.
    ELSE.
      ROLLBACK WORK.
      ET_RETURN-TITLE = LS_URL-TITLE.
      ET_RETURN-TYPE = 'E'.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
       INTO MENSAGEM.
      ET_RETURN-MESSAGE = MENSAGEM.
      APPEND ET_RETURN.
      CLEAR ET_RETURN.
      CONTINUE.
    ENDIF.

  ENDLOOP.


ENDFUNCTION.

Leitura de Anexos GOS

PARAMETERS:p_ebeln TYPE ekko-ebeln.
 
DATA:sistema_logico  LIKE  bapibds01-log_system,
     classe          LIKE  bapibds01-classname,
     chave_gos       LIKE  swotobjid-objkey,
     lt_conexoes_gos LIKE bdn_con OCCURS 1 WITH HEADER LINE.
DATA:id_documento    TYPE sofolenti1-doc_id,
     dados_documento TYPE sofolenti1,
     cabecalho_objeto TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
     conteudo_objeto  TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
     conteudo_hex     TYPE STANDARD TABLE OF solix WITH HEADER LINE.
 
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
  IMPORTING
    sistema_logico                = sistema_logico
  EXCEPTIONS
    sistema_logico_nao_definido = 1
    OUTROS                      = 2.
.
chave_gos = p_ebeln. "pedido de compra
 
CALL FUNCTION 'BDS_GOS_CONNECTIONS_GET'
  EXPORTING
    sistema_logico     = sistema_logico
    classe          = 'BUS2012'  "para identificar pedido de compra
    chave_objeto      = chave_gos
    cliente             = sy-mandt
  TABLES
    conexoes_gos    = lt_conexoes_gos
  EXCEPTIONS
    nenhum_objeto_encontrado = 1
    erro_interno     = 2
    erro_gos_interno = 3
    OUTROS             = 4.
 
LOOP AT lt_conexoes_gos.
 
  id_documento = lt_conexoes_gos-loio_id.
  CALL FUNCTION 'SO_DOCUMENT_READ_API1'
    EXPORTING
      document_id                = id_documento         
    IMPORTING
      document_data              = dados_documento
    TABLES
      object_header              = cabecalho_objeto
      object_content             = conteudo_objeto
      contents_hex               = conteudo_hex
    EXCEPTIONS
      document_id_not_exist      = 1
      operation_no_authorization = 2
      x_error                    = 3
      OUTROS                     = 4.
  BREAK-POINT.
 
ENDLOOP.

Exibição de Lista de Anexos GOS

DATA:objeto_referencia TYPE sibflporb,
     modo             TYPE char1.

objeto_referencia-instid = '9000001787'."identificador da instância, ex: código da empresa + número do documento + ano fiscal
objeto_referencia-typeid = 'VBRK'."tipo de objeto
objeto_referencia-catid  = 'BO'."padrão

modo = 'D'.
"D apenas visualizar
*E pode alterar mas não confirmar atualização do banco de dados
*C pode alterar e confirmar atualização do banco de dados

CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
  EXPORTING
    objeto_referencia      = objeto_referencia
    verificar_acesso_arl   = 'X'
    verificar_acesso_bds   = 'X'
    incluir_notas       = 'X'
    incluir_anexos      = 'X'
    incluir_urls        = 'X'
    modo                = modo.
* IMPORTING
*   EP_SAVE_REQUEST       =
* TABLES
*   IT_OBJECTS            =

Tags: ABAP GOS SAP anexos upload

Publicado em 7-4 04:02