假如我们有一个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)相关信息。从提供的描述看,它包含了一组入参和多组出参,以及两个结构体定义。我将先对接口参数和结构体进行解释,然后分析整体功能。
接口参数
-
传入数据
- IM_EBELN:标识为“F”(Field),是一个必须输入的参数(Mandatory - Y),表示采购订单号码,采用CHAR数据类型,长度为10。
-
传出数据
- 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
,用于输出采购申请相关信息。
- EX_HEAD:标识为"S"(Structure),关联结构是
结构体解析
-
ZSED_PO_APON Structure(采购订单结构)
- 包含了订单的多种信息,例如订单号、供应商代码、联系方式、金额等,都是基础的数据类型,如CHAR, CUKY(货币),CURR。
-
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());}}
}