Skip to main content

SAP

简单说明如何对接SAP系统,支持两种对接场景:入站和出站。

一、基础配置-虚机版

平台默认不配置SAP相关驱动,所以无法直接使用SAP控制器服务。需要手动将驱动包放到平台指定目录中

1. 驱动包安装

将驱动包拷贝到编排平台服务器 lib的 ext 子目录下,也可以建子文件夹管理, 比如 /opt/orchsym/runtime/lib/ext/SAP 子日录(老版本中只能放 lib 目录下)

特别的,如果上面的方式不行,需要单独配置so驱动

a. 移动 libsapjco3.so 到 /usr/lib/sapjco 目录下

b. vim /etc/profile 写入如下:

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/sapjco"
export LD_LIBRARY_PATH

c. 执行source /etc/profile 加载生效

2. 验证驱动

进入 Java 驱动 sapjco3jar 包所在目录,通过执行以下命令来验证是否安装成功:

java -jar sapjco3jar

3. 配置sapgw00

修改 /etc/services文件,新增下面内容行:

sapgw00         3300/tcp                # sapgw00

注:3300是默认端口,如果sapgw端口修改过,则需要修改为对应端口

4. 重启编排

systemctl restart runtime

二、基础配置-docker版

docker版编排配置SAP相关驱动时,如果按照虚机版配置,重启容器时相关驱动包和 sapgw00配置会丢失,所以docker版本需要通过挂载来配置相关驱动。

1. 驱动包安装

将驱动包拷贝到容器所在服务器的某个指定目录下,比如 /data/runtime/lib/ext。

2. 配置sapgw00

将 runtime 容器的 /etc/services 文件复制一份到物理机:

docker cp runtime:/etc/services /data/runtime/

然后新增一行:

sapgw00         3300/tcp                # sapgw00

3. 挂载文件

修改 runtime 容器的启动文件,增加前面2步配置的文件和文件夹的挂载:

vi /etc/systemd/system/runtime-docker.service
# ExecStart 中新增下面2行
-v /data/runtime/services:/etc/services \
-v /data/runtime/lib/ext:/opt/orchsym/runtime/lib/ext \

4. 重启容器

docker restart runtime

三、SAP入站

1. 正向调用:InvokeSAPRFC

组件通过远程调用 RFC 函数,返回 JSON 结果。

目前支持的输入参数:

  • 普通输入参数
  • 结构(Structure)类型
  • 复杂 Table 类型输入参数

如果 RFC 函数需要输入参数,则组件需要一输入流,输入流上的记录将作为输入参数传递给RFC函数。

如果 RFC 函数无需输入参数,则不必提供输入流。

输出结果依赖于RFC函数本身的元数据信息,所以无需特殊处理,组件会自动把SAP函数返回结果转换为JSON输出。

2. 实现步骤

  • 组件配置要调用的SAP函数,然后创建SAP连接的控制器服务(第一步基础配置已经完成的情况下)

  • SAP连接的控制器服务-SAPClientConnectionPool中,配置SAP系统相关信息,配置完成后,启动 SAPClientConnectionPool ,确保报错。
  • 正常启动 SAPClientConnectionPool后,即可启动 InvokeSAPRFC 组件,完成 SAP 函数的远程调用。
 特别的:如果SAP函数入参为Table,需要传Avro Schema 

  • ConvertRecord 的 AvroRecordSetWriter 配置的 Schema 写入策略不能为 不写Schema

四、SAP出站(IDoc)

1. 反向调用:ListenSAPTCP、HandleSAPTCPResponse

反向 SAP RFC 调用,即编排平台作为服务器端,接受来自于 SAP ABAP 的调用。通过 JCo API 在编排平台中创建动态的 SAP 函数,以提供给 ABAP 远程调用。函数完全由JCo API动态创建,包括函数名,函数输入输出、表等参数定义,ABAP中无需有该函数的任何签名注册

  • ListenSAPTCP

为反向 SAP RFC 远程调用服务组件,该组件启动 JCo 服务对 SAP 的 TCP/IP 连接提供远程函数调用。而 SAP ABAP 作为客户端,可远程调用在组件上注册的函数,且组件负责接收 ABAP 远程传递的输入参数或表参数,并将参数值包装成 JSON 输出流传递给后继组件进行相应的业务处理

  • HandleSAPTCPResponse

负责将由 ListenSAPTCP 组件接收到的输入参数值进行业务处理后,在该组件中生成输出参数值返回给 SAP ABAP客户端调用程序

2. 实现步骤

  • SAP连接:配置SAPClientConnectionPool,定义要连接的 SAP 系统的相关信息

    • 特别的:SAPClientConnectionPool中需要和SAP端提前协商好**Program ID** 
  • 函数名:定义提供给 SAP ABAP 客户端调用的函数名称

  • 连接上下文:定义 ListenSAPTCP、HandleSAPTCPResponse关联的控制器服务,使用 CommonKeyValueLookupService,该控制器不需要任何特殊配置,直接启动即可

客户端调用函数传入的请求参数会作为 ListenSAPTCP 输出的流文件内容,接收到数据以后,在流程中对数据进行相关处理,最后再通过 HandleSAPTCPResponse 组件将处理后的数据响应给客户端

  • 连接上下文:定义 ListenSAPTCP、HandleSAPTCPResponse关联的控制器服务,直接使用前面 ListenSAPTCP 创建的控制器服务
  • 发回数据选项:指定将什么数据返回给客户端,一种是自定义数据,还有一种是直接将流文件内容返回
  • 自定义发回数据:发回数据选项为自定义时生效,定义返回给客户端的数据内容

五、流程模板

下载模板