C#调用sap接口及返回数据到sap
public class SapClass
{
/// <summary>
///
/// </summary>
/// <param name="fphm">发票号码</param>
/// <param name="fprq">发票开票日期</param>
/// <param name="fkf">付款方</param>
/// <param name="fxqd">分销渠道 </param>
public DataTable nco(string fphm, DateTime fprq, string fkf, char fxqd)
{
//MyBackendConfig config = new MyBackendConfig();
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination(PlatRunning.Global.AppSettings.GetValue("SapName"));//SAP系统标识
DataTable dt = nco(prd, fphm, fprq, fkf, fxqd);
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
return dt;
}
/// <summary>
/// SAPTOJS
/// </summary>
/// <param name="prd"></param>
/// <param name="fphm"></param>
/// <param name="fprq"></param>
/// <param name="fkf"></param>
/// <param name="fxqd"></param>
private DataTable nco(RfcDestination prd, string fphm, DateTime fprq, string fkf, char fxqd)
{
RfcRepository repo = null;
try
{
repo = prd.Repository;
}
catch (Exception ex)
{
throw (ex);
}
IRfcFunction companyBapi = repo.CreateFunction("ZSD_SY_FUC_SAPTOJS"); //调用函数名
//设置Import的参数
companyBapi.SetValue("VBELN", fphm);
companyBapi.SetValue("ERDAT", fprq);
companyBapi.SetValue("KUNRG", fkf);
companyBapi.SetValue("ZBJ", fxqd);
companyBapi.Invoke(prd); //执行函数
IRfcTable table = companyBapi.GetTable("IT_JS_EXPORT"); //获取相应的内表IT_JS_EXPORT
//提前实例化一个空的表结构处理
DataTable dt = CreateSapToJSTable();
for (int i = 0; i < table.Count; i++)
{
table.CurrentIndex = i;
DataRow dr = dt.NewRow();
dr["fxqd"] = table[i].GetString("VTWEG");
dr["fphm"] = table[i].GetString("VBELN");
dr["fphh"] = table[i].GetString("POSNR");
dr["fpcjsj"] = table[i].GetString("ERDAT");
dr["khdm"] = table[i].GetString("KUNRG");
dr["khmc"] = table[i].GetString("NAME");
dr["khdzch"] = table[i].GetString("STRAS");
dr["sapddh"] = table[i].GetString("AUBEL");
dr["khddh"] = table[i].GetString("BSTKD");
dr["sapwlh"] = table[i].GetString("MATNR");
dr["khwlh"] = table[i].GetString("KDMAT");
dr["spmc"] = table[i].GetString("ARKTX");
dr["kpm"] = table[i].GetString("TEXT");
dr["jldw"] = table[i].GetString("VRKME");
dr["sl"] = table[i].GetString("FKIMG");
dr["bb"] = table[i].GetString("WAERK");
dr["dj"] = table[i].GetString("KBETR");
dr["jgdw"] = table[i].GetString("KPEIN");
dr["zj"] = table[i].GetString("NETWR");
dr["shl"] = table[i].GetString("MWSK1");
dr["se"] = table[i].GetString("MWSBP");
dr["myxz"] = table[i].GetString("KTGRM");
dt.Rows.Add(dr);
}
return dt;
}
/// <summary>
///
/// </summary>
/// <param name="sapfph">sap发票号</param>
/// <param name="qtfph">生成发票号</param>
public DataTable nco(string sapfph, string qtfph)
{
//MyBackendConfig config = new MyBackendConfig();
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination(PlatRunning.Global.AppSettings.GetValue("SapName"));//SAP系统标识
DataTable dt = nco(prd, sapfph, qtfph);
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
return dt;
}
/// <summary>
/// JSTOSAP
/// </summary>
/// <param name="prd"></param>
/// <param name="sapfph"></param>
/// <param name="qtfph"></param>
private DataTable nco(RfcDestination prd, string sapfph, string qtfph)
{
DataTable dt = WriteTableToSAP(prd, sapfph, qtfph);
return dt;
}
#region 写回数据到SAP
private DataTable WriteTableToSAP(RfcDestination rfcDest, string sapfph, string qtfph)
{
RfcRepository repo = rfcDest.Repository;
IRfcFunction funBapi = repo.CreateFunction("ZSD_SY_FUC_JSTOSAP");
//调用函数名
IRfcTable tblROF = funBapi.GetTable("IT_JSTOSAP");
tblROF.Clear();
tblROF.Insert();
tblROF.CurrentRow.SetValue("VBELN", sapfph);
tblROF.CurrentRow.SetValue("JSVBELN", qtfph);
funBapi.SetValue("IT_JSTOSAP", tblROF);
funBapi.Invoke(rfcDest);
//引用回传结果
IRfcTable ReturnTable = funBapi.GetTable("IT_RETURN");
DataTable dtReturn = ReturnMessage();
for (int i = 0; i < ReturnTable.Count; i++)
{
ReturnTable.CurrentIndex = i;
DataRow dr = dtReturn.NewRow();
dr["isSuccess"] = ReturnTable[i].GetString("TYPE");
dr["ReturnMessage"] = ReturnTable[i].GetString("MESSAGE");
dtReturn.Rows.Add(dr);
}
return dtReturn;
}
#endregion
#region 接口参数
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if ("DEV".Equals(destinationName))
{
string strtemp = string.Empty;
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "192.168.0.122");//SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00");//SAP实例
parms.Add(RfcConfigParameters.User, "SYRFC");//用户名
parms.Add(RfcConfigParameters.Password, "123456"); //密码
parms.Add(RfcConfigParameters.Client, "710");// Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
return parms;
}
else
return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
#endregion
public DataTable CreateSapToJSTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("fxqd"); //分销渠道
dt.Columns.Add("fphm");//发票号码
dt.Columns.Add("fphh");//发票行号
dt.Columns.Add("fpcjsj");//发票创建时间
dt.Columns.Add("khdm");//客户代码
dt.Columns.Add("khmc");//客户名称
dt.Columns.Add("khdzch");//客户地址(中文)
dt.Columns.Add("sapddh");//sap订单号
dt.Columns.Add("khddh");//客户订单号
dt.Columns.Add("sapwlh");//sap物料号
dt.Columns.Add("khwlh");//客户物料号
dt.Columns.Add("spmc");//商品名称
dt.Columns.Add("kpm");//开票名
dt.Columns.Add("jldw");//计量单位
dt.Columns.Add("sl");//数量
dt.Columns.Add("bb");//币别
dt.Columns.Add("dj");//含税单价
dt.Columns.Add("jgdw");//价格单位
dt.Columns.Add("zj");//总价
dt.Columns.Add("shl");//税率
dt.Columns.Add("se");//税额
dt.Columns.Add("myxz");//贸易性质
return dt;
}
public DataTable ReturnMessage()
{
DataTable dt = new DataTable();
dt.Columns.Add("isSuccess"); //成功与否
dt.Columns.Add("ReturnMessage");//Message
return dt;
}
}
C#调用sap接口及返回数据到sap的更多相关文章
- java接口对接——调用别人接口推送数据
实际开发中经常会遇到要和其他平台或系统对接的情况,实际操作就是互相调用别人的接口获取或者推送数据, 当我们调用别人接口推送数据时,需要对方给一个接口地址以及接口的规范文档,规范中要包括接口的明确入参及 ...
- charles_01_打断点修改接口请求&返回数据
前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...
- 调用中行接口针对返回报文(xml形式)做相关处理
最近在对接中行银行接口,在获取返回报文的时候遇到一些问题,现在在这里做个总结 TIP: 在返回报文之前,要对前置机的URL请求,在这期间遇到一个坑,还是通过查看日志才发现问题 在填写转账信息的时候要求 ...
- Requests方法 -- 参数关联与JSESSION(上一个接口的返回数据作为下一个接口的请求参数)
前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了.最常见的案例就是网站的登录案例,很多网站的登录并不仅仅 ...
- Java封装接口统一返回数据模板
现在大多数都使用前后端分离开发模式,前端通过Ajax请求访问后台服务器,后台返回JSON数据供前端操作,这里编写一个统一返回数据模板类,方便日后操作 public class R extends Ha ...
- JQuery的Ajax使用Get,Post方法调用C#WebService并返回数据
本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,另外还要介绍一下用jQuery调用WebService的参数设置及设置不当所出现的问题,还有出 ...
- PHP开发APP接口之返回数据
首先说明一下客户端APP通信的格式 1.xml:扩展标记语言(1.用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,xml格式统一,跨平台和语言,非常适合数据传输和通信,早已 ...
- Android调用 .Net Core WebApi 返回数据,用FastJSON解析一直报错。
问题描述:.Net Core WebApi中用Newtonsoft.Json 把datatable转成json字符串,如:JsonConvert.SerializeObject(table,Forma ...
- 远程带参数POST访问接口,返回数据
1. string token = GetRequest.GetString("token"); int customer_id = GetRequest.GetInt(" ...
随机推荐
- python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案
Mac os x 升级到最新版后出现 python MysqlDB 无法找到 libmysqlclient.18.dylib 的问题,尝试的解决方案如下: 1. 升级更新 mysql 到最新版,无效 ...
- python学习笔记(递归函数)
博主看了看递归.说的简单点就是程序里面再调用程序本身,或者是方法里面再调研方法本身.或者是函数里面再调研函数本身 用于什么场景呢,博主这里是父子节点排序,父子节点的查询 直接上代码: #!/usr/b ...
- 强大的内网劫持框架之MITMf
Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 beef 强大的 hook 脚本来控制目标客户端.下面让我们一起看看如何在 Kali2.0上安装使用 Mitmf ...
- 自己的3dmax作品RX-105柯西高达
背后视角带导弹仓. 侧面. 侧后视角. 前侧视角. 斜前上视角 使用关联实现骨骼功能,头.躯干.肩.上臂.前臂.手腕.手指.腰.髋关节.踝关节.脚掌皆由骨骼(是通过多边形关联实现骨骼功能,而不是使用3 ...
- 关闭窗体后,利用StreamWriter保存控件里面的数据
以保存DataGridView里面的数据为例: 通过窗体增加的数据,没有用数据库保存,可以使用StreamWriter将数据存在临时文件里面,再次打开窗体时写入即可. private void For ...
- 连接器|网络滤波连接器|电脑连接器|RJ45变压器-华联威电子有限公司
连接器|网络滤波连接器|电脑连接器|RJ45变压器-华联威电子有限公司
- ios9和ios10的新特性
昨天面试了一个做ios开发的公司,其中面试官问我最新的ios系统版本是多少,以及它的特性是什么?由于自己是初学者,所以对这些没有关注过.今天特地搜索了一下关于ios9和ios10的新特性,并整理了一下 ...
- linux device model简述
参考: 1)<LINUX设备驱动程序>第十四章 Linux 设备模型 2)内核源码2.6.38 内核初始化的时候会对设备模型作初始化,见init/main.c: start_kernel- ...
- openstack简介
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台 ...
- linux下不重启添加硬盘
linux下热加载磁盘 临时给虚拟机加了一块硬盘,增加后懒得重启,于是看了看热加载 [root@centos5 ~]# cat /proc/scsi/scsiAttached devices:Host ...