小能豆

如何实现sap调用PO的支持附件传输附件,或者有和可以像邮递员形式发送给发送附件

javascript

如何实现sap调用PO的支持附件传输附件,或者有和可以像邮递员形式发送给发送附件


阅读 50

收藏
2024-06-18

共1个答案

小能豆

在 SAP 系统中实现调用 PO(Purchase Order)并支持附件传输,可以通过以下几种方式来实现。具体的实现方式取决于你使用的 SAP 模块和技术栈。例如,SAP Gateway 和 OData 服务、SAP RFC(Remote Function Call)或者 SAP PI/PO(Process Integration/Process Orchestration)等。

以下是几种常见的方法:

方法一:使用 SAP Gateway 和 OData 服务

SAP Gateway 和 OData 服务提供了一种标准的、基于 REST 的方式来与 SAP 系统进行通信,可以用来传输附件。

  1. 创建 OData 服务

    • 使用 SAP Gateway 创建一个新的 OData 服务。
    • 定义实体(如 PurchaseOrder)和实体集,并在实体中定义附件的结构。
  2. 扩展 OData 服务

    • 使用 ABAP 编写代码来实现附件的上传和下载功能。
    • 使用 CREATE_STREAM 方法上传附件,使用 GET_STREAM 方法下载附件。
  3. 前端调用 OData 服务

    • 在前端(如 SAP Fiori 应用)中,通过 HTTP POST 请求调用 OData 服务,将附件作为请求的内容发送。

示例代码(ABAP 后端):

METHOD zcl_my_odata_service=>create_stream.
  DATA: lt_content TYPE solix_tab.
  DATA: lv_document_id TYPE soodk.

  " Extract attachment content
  lt_content = io_data_provider->get_data( ).

  " Save attachment content to database or DMS
  CALL FUNCTION 'SO_OBJECT_INSERT'
    EXPORTING
      folder_id           = 'OUTBOX'
      object_id           = lv_document_id
    TABLES
      objcont             = lt_content
    EXCEPTIONS
      others              = 1.
ENDMETHOD.

方法二:使用 SAP RFC 和 BAPI

SAP RFC 和 BAPI 提供了一种标准的、基于函数调用的方式来与 SAP 系统进行通信,可以用来传输附件。

  1. 创建 RFC/BAPI 函数模块

    • 创建一个 RFC/BAPI 函数模块,用于接收和存储附件。
    • 使用 SO_OBJECT_INSERT 或者 ARCHIV_CONNECTION_INSERT 等函数将附件存储在 SAP 系统中。
  2. 前端调用 RFC/BAPI

    • 在前端,通过 SAP JCo(Java Connector)或 .NET Connector 调用 RFC/BAPI 函数,将附件作为参数传递。

示例代码(ABAP 后端):

FUNCTION z_save_attachment.
  IMPORTING
    VALUE(iv_po_number) TYPE ebeln
    VALUE(iv_attachment) TYPE xstring.

  DATA: lt_content TYPE solix_tab.
  DATA: lv_document_id TYPE soodk.

  " Convert xstring to solix_tab
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer                = iv_attachment
    IMPORTING
      output_length         = lv_length
    TABLES
      binary_tab            = lt_content.

  " Save attachment to DMS or content server
  CALL FUNCTION 'ARCHIV_CONNECTION_INSERT'
    EXPORTING
      archiv_id             = 'Z1'
      archiv_doc_id         = lv_document_id
      sap_object            = 'BUS2012' " Purchase Order
      sap_object_id         = iv_po_number
    TABLES
      archive_parameters    = lt_content
    EXCEPTIONS
      others                = 1.
ENDFUNCTION.

方法三:使用 SAP PI/PO

SAP PI/PO 是一种集成解决方案,可以用于在不同系统之间传输数据和文件。

  1. 创建集成流程

    • 在 SAP PI/PO 中创建一个集成流程,从外部系统接收附件并将其传输到 SAP 系统。
  2. 配置通信通道

    • 配置发送和接收通信通道,以便从外部系统接收附件并将其传输到 SAP 系统。
  3. 实现附件传输

    • 在集成流程中,实现附件的传输和存储逻辑。

方法四:使用电子邮件发送附件

如果需要将附件像邮递员那样发送,可以使用 SAP 的电子邮件功能。

  1. 配置 SAP 邮件服务器

    • 确保 SAP 系统已正确配置邮件服务器(SCOT 事务码)。
  2. 编写 ABAP 代码发送电子邮件

    • 使用 SO_NEW_DOCUMENT_ATT_SEND_API1 函数发送包含附件的电子邮件。

示例代码(ABAP 后端):

DATA: lt_objcont TYPE solix_tab,
      lt_objhead TYPE soli_tab,
      lt_reclist TYPE TABLE OF somlreci1,
      lv_sent_all TYPE os_boolean.

" Prepare email content and attachment
lt_objcont = iv_attachment_content.
APPEND 'Purchase Order Attachment' TO lt_objhead.

" Recipient list
APPEND VALUE #( recip_type = 'U' recip_id = 'RECIPIENT_EMAIL' ) TO lt_reclist.

" Send email
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  EXPORTING
    document_data              = VALUE soodcch( obj_name = 'PO Attachment' obj_descr = 'Purchase Order Attachment' )
    put_in_outbox              = 'X'
  TABLES
    objhead                    = lt_objhead
    objcont                    = lt_objcont
    receivers                  = lt_reclist
  EXCEPTIONS
    others                     = 1.

通过以上方法,你可以实现 SAP 系统与外部系统之间的附件传输或发送。选择哪种方法取决于具体的业务需求和系统环境。

2024-06-18