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 =