C# 用RFC的方式调用SAP接口

假如我们有一个SAP的接口文档

ZED_GET_PO							
Note	Parameter Name	"Type
- F. Field
- S. Structure
- T. Table"	Associated Type	"Mandatory
- Y. Yes
- N. No"	Data Type	Length	Note
传入数据	IM_EBELN	F		Y	CHAR	10	PO号码
传出数据	EX_HEAD	S	ZSED_PO_APON				传出PO信息
传出数据	EX_TYPE	F			CHAR	1	S - 成功,E - 失败
传出数据	EX_MSG	F			CHAR	220	失败返回的错误消息
传出数据	EX_PDF	F	XSTRING				PDF数据流
传出数据	ET_PR	T	ZSED_PR_APON				采购申请信息
							
ZSED_PO_APON Structure							
Field 字段	Type 类型	Length 长度	Decimals 小数位	Note			
NAME_CN	CHAR	40	0	Name CN			
NAME_EN	CHAR	40	0	Name EN			
EKNAM	CHAR	18	0	Description of purchasing group			
TEL_NUMBER	CHAR	30	0	Telephone no.: dialling code+number			
SMTP_ADDR	CHAR	241	0	E-Mail Address			
LIFNR	CHAR	10	0	供应商代码			
NAME_CN_F	CHAR	40	0	供应商中文名称			
NAME_EN_F	CHAR	40	0	供应商英文名称			
VERKF	CHAR	30	0	联系人			
TEL_NUMBER_F	CHAR	30	0	电话			
SMTP_ADDR_F	CHAR	241	0	邮箱			
EBELN	CHAR	10	0	订单号(合同号)			
WAERS	CUKY	5	0	合同货币			
LOEKZ	CHAR	1	0	合同删除标识			
FRGKE	CHAR	1	0	合同审批标识			
NETWR	CURR	13	2	合同总金额(不含税)			
NETWR_TAX	CURR	13	2	合同总金额(含税)			
							
ET_PR Structure							
Field 字段	Type 类型	Length 长度	Decimals 小数位	Note			
BANFN	CHAR	10	0	采购申请			
BNFPO	NUMC	5	0	采购申请行项目		

接口分析如下

这个SAP接口 ZED_GET_PO 主要用于获取采购订单(PO)相关信息。从提供的描述看,它包含了一组入参和多组出参,以及两个结构体定义。我将先对接口参数和结构体进行解释,然后分析整体功能。

接口参数

  1. 传入数据

    • IM_EBELN:标识为“F”(Field),是一个必须输入的参数(Mandatory - Y),表示采购订单号码,采用CHAR数据类型,长度为10。
  2. 传出数据

    • EX_HEAD:标识为"S"(Structure),关联结构是 ​ZSED_PO_APON​,用于输出采购订单的详细信息。
    • EX_TYPE:标识为"F"(Field),表示接口执行的状态,其中“S”表示成功,“E”代表失败,数据类型为CHAR,长度为1。
    • EX_MSG:标识为"F"(Field),表示如果执行失败,返回的错误信息,数据类型为CHAR,长度为220。
    • EX_PDF:标识为"F"(Field),为PDF格式的数据流,数据类型为XSTRING,主要应用场景可能是输出采购订单的PDF文档。
    • ET_PR:标识为"T"(Table),关联结构是 ​ZSED_PR_APON​,用于输出采购申请相关信息。

结构体解析

  1. ZSED_PO_APON Structure(采购订单结构)

    • 包含了订单的多种信息,例如订单号、供应商代码、联系方式、金额等,都是基础的数据类型,如CHAR, CUKY(货币),CURR。
  2. ET_PR Structure(采购申请结构)

    • 包含了采购申请的编号和行项目等信息,类型较为简单,主要由CHAR和NUMC构成。

功能分析

这个接口主要用于:

  • 输入一个采购订单号码(IM_EBELN),
  • 返回该采购订单的详细信息(EX_HEAD,结构为ZSED_PO_APON),
  • 返回接口调用的状态(成功或失败)及相关信息(EX_TYPE和EX_MSG),
  • 可能还会提供订单的PDF文档(EX_PDF),
  • 输出与该采购订单相关联的采购申请信息(ET_PR,结构为ZSED_PR_APON)。

整体而言,这个接口为业务系统提供完整的采购订单处理功能,从查询订单详情到获取关联的采购申请,以及在需要时输出文档形式,适合于供应链管理和采购管理类业务的集成场景。

 调用例子

public Vendor_Output Z_GET_VENDOR_DATA(string LIFNR)
{
    //创建sap的连接
    var dest = RfcDestinationHelper.GetDestination();
    //创建方法
    IRfcFunction myfun = dest.Repository.CreateFunction("Z_GET_VENDOR_DATA");
    
    myfun.SetValue("LIFNR", LIFNR);//参数
    myfun.Invoke(dest);//执行
 
    IRfcStruct rfcStruct = myfun.GetStructure("VENDORDATA");//返回对象
    string name1 = rfcStruct.GetString("NAME1");//返回字符串
    string ort01 = rfcStruct.GetString("ORT01");

    return new Vendor_Output() { Name = name1, City = ort01 };
}

关于连接部分

using SAP.Middleware.Connector;  // 引用SAP NCo命名空间

class Program
{
    static void Main(string[] args)
    {
        // 定义SAP系统连接参数
        RfcConfigParameters rfcConfigParams = new RfcConfigParameters();
        rfcConfigParams.Add(RfcConfigParameters.Name, "yourSAPDestination");
        rfcConfigParams.Add(RfcConfigParameters.AppServerHost, "host");  // 服务器地址
        rfcConfigParams.Add(RfcConfigParameters.SystemNumber, "00");     // 系统编号
        rfcConfigParams.Add(RfcConfigParameters.Client, "client_no");    // 客户端
        rfcConfigParams.Add(RfcConfigParameters.User, "username");       // 用户名
        rfcConfigParams.Add(RfcConfigParameters.Password, "password");   // 密码
        rfcConfigParams.Add(RfcConfigParameters.Language, "EN");         // 语言

        // 建立到SAP的连接
        RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfcConfigParams);
        RfcRepository rfcRepo = rfcDest.Repository;

        try
        {
            // 获取RFC函数元数据
            IRfcFunction rfcFunction = rfcRepo.CreateFunction("YOUR_RFC_FUNCTION_NAME");

            // 设置RFC的输入参数,例如
            rfcFunction.SetValue("IM_PARAM", "value");

            // 调用RFC函数
            rfcFunction.Invoke(rfcDest);

            // 获取RFC的输出参数,例如
            string result = rfcFunction.GetString("EX_RESULT");

            Console.WriteLine($"Result: {result}");
        }
        catch (RfcBaseException e)
        {
            Console.WriteLine(e.ToString());
        }
    }
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用 SAPRFC 接口,需要使用 SAP 提供的 Java Connector(SAP JCo)库。在使用 SAP JCo 调用 RFC 接口时,需要在 SAP JCo 的配置文件中设置系统 ID(System ID),以便正确地连接到 SAP 系统。 要配置 SAP JCo 的系统 ID,需要进行以下步骤: 1. 打开 SAP JCo 的配置文件 sapjco3.properties,该文件通常位于应用程序的 classpath 下。 2. 在 sapjco3.properties 文件中添加以下配置项: ``` jco.client.sysnr=<系统编号> jco.client.client=<客户端> jco.client.user=<用户名> jco.client.passwd=<密码> jco.client.lang=<语言> jco.client.ashost=<应用服务器主机名> jco.client.saprouter=<SAP 路由器> ``` 其中,<系统编号> 是 SAP 系统的编号,<客户端> 是 SAP 客户端的编号,<用户名> 和 <密码> 是 SAP 用户的登录信息,<语言> 是登录时使用的语言代码,<应用服务器主机名> 是 SAP 应用服务器的主机名,<SAP 路由器> 是可选的 SAP 路由器配置。 3. 在 Java 代码中使用 SAP JCo 的 API 调用 RFC 接口时,可以使用以下代码获取 SAP JCo 的配置信息: ``` JCoDestination destination = JCoDestinationManager.getDestination("<destination>"); ``` 其中,<destination> 是 SAP JCo 的目标名称,可以在 sapjco3.properties 文件中配置。 4. 使用 SAP JCo 的 API 调用 RFC 接口时,需要使用 SAP JCo 的函数模块名称和函数模块的输入参数,例如: ``` JCoFunction function = destination.getRepository().getFunction("<function_module>"); if (function == null) { throw new RuntimeException("<function_module> not found in SAP system."); } function.getImportParameterList().setValue("<parameter_name>", "<parameter_value>"); function.execute(destination); ``` 其中,<function_module> 是 SAP RFC 函数模块的名称,<parameter_name> 和 <parameter_value> 是函数模块的输入参数名称和值。 以上是 Java 调用 SAP RFC 接口时配置系统 ID 的基本步骤。具体的配置和调用方法可能会因不同的 SAP 系统和 RFC 接口而有所不同,需要根据实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值