在SAP中不管是采购订单、销售订单、交货单还是发票等,左上角都有一个按钮用来操作附件,包括对它的创建删除更新等。这个附件是一种Generic的,存储在服务器的,我们在获取的时候需要通过链接来下载。这其实就是SAP的一种GOS(Generic Object Service)技术。
要达到这种目的需要用到两个关键FM
BDS_GOS_CONNECTIONS_GET:(Business Document Service: Object Links)获取GOS的链接,它有两个必输import,其一是CLASSNAME,用来标注Business type,指定你的订单是采购订单还是销售订单等。其二是OBJKEY,即传入你的订单号
至于说如何确定CLASSNAME的值可以通过domain里面的 Value Table在(BDS_LOCL)来去查看
('BUS2012' :"用来标识采购订单)
SO_DOCUMENT_READ_API1:SAPoffice: (View object from folder using RFC)通过以上GOS链接读取具体的附件的具体信息,文件名,文件内容以及Binary Content等,按需获取
following code
DATA lv_buffer TYPE xstring .
DATA lv_len TYPE i .
DATA lv_string TYPE string .
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 = '0000130597'.
CALL FUNCTION 'BDS_GOS_CONNECTIONS_GET'
EXPORTING
logical_system = lv_logical_system
classname = 'VBRK' "billing document
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.
ENDLOOP.