C#连接SAP【生产系统与ERP对接】
企业如果上了ERP系统,比如SAP、用友、金蝶或者E10等等,只需要ERP里面提供相应的接口,则可以直接将PMC创建的工单信息抛转至 MTS 系统,当该工单生产完成之后,MTS 将完成数据回传至 ERP,方便货仓进行入仓与扣数,这篇文章介绍 MTS 与 SAP 之间如何对接。
1.SAP里面必须有一个Function,类似 MSSQL里面的存储过程一样,根据用户传入的参数,返回所需要的数据,这一部分程序通过 ABAP 完成,不在本文的讲述范围之类,这里略过。
2.MTS连接到 SAP,Call对应的 Function,拿到数据后进行处理,这里需要准备以下几个参数。
- SAP服务器的IP地址
- 访问SAP的用户名
- 访问SAP的密码
- SAP系统的实例编号
- SAP系统的客户端编号
为了方便多个地方调用,这里将Call SAP 的代码写成一个方法,避免重复代码,代码如下:
using SAP.Middleware.Connector; public class SapHelper
{
public IRfcTable GetSapData(string FunctionName, string TableName, List<string> Key, List<string> Value)
{
string Server = ConfigurationManager.AppSettings["SapServer"];
string Client = ConfigurationManager.AppSettings["SapClient"];
string User = ConfigurationManager.AppSettings["SapUser"];
string Password = ConfigurationManager.AppSettings["SapPwd"];
string SystemNumber = ConfigurationManager.AppSettings["SapSystemNumber"]; RfcConfigParameters rfcPar = new RfcConfigParameters();
rfcPar.Add(RfcConfigParameters.Name, "CON");
rfcPar.Add(RfcConfigParameters.AppServerHost, Server);
rfcPar.Add(RfcConfigParameters.Client, Client);
rfcPar.Add(RfcConfigParameters.User, User);
rfcPar.Add(RfcConfigParameters.Password, Password);
rfcPar.Add(RfcConfigParameters.SystemNumber, SystemNumber);
rfcPar.Add(RfcConfigParameters.Language, "EN");
RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
RfcRepository rfcrep = dest.Repository; IRfcFunction myfun = null;
myfun = rfcrep.CreateFunction(FunctionName);
IRfcTable IrfTable = myfun.GetTable(TableName); if (Key.Count != Value.Count)
{
return null;
}
for (int i = ; i < Key.Count; i++)
{
myfun.SetValue(Key[i].ToString(), Value[i].ToString());
} myfun.Invoke(dest);
return IrfTable;
}
}
当用户输入需要下载的工单号码之后,系统连接到 SAP 开始调用函数:
string Order = Request["LotName"];
if (string.IsNullOrEmpty(Order))
{
return;
}
//这里强烈建议将参数以key value的形式传进去,方便很多。
List<string> Key1 = new List<string>();
List<string> Value1 = new List<string>(); Key1.Insert(, "ORDER_NUMBER");
Value1.Insert(, Order); IRfcTable IrfTable_Order = new SapHelper().GetSapData("function", "table", Key1, Value1); DataTable dt_Order = new DataTable();
dt_Order.Columns.Add("LotName");
dt_Order.Columns.Add("ProductName");
dt_Order.Columns.Add("LotQuantity");
dt_Order.Columns.Add("Customer");
dt_Order.Columns.Add("Plant"); for (int i = ; i < IrfTable_Order.Count; i++)
{
IrfTable_Order.CurrentIndex = i;
DataRow dr = dt_Order.NewRow();
dr["LotName"] = IrfTable_Order.GetString("AUFNR");
dr["ProductName"] = IrfTable_Order.GetString("STLBEZ");
dr["LotQuantity"] = Math.Round(Convert.ToDouble(IrfTable_Order.GetString("GAMNG")), ).ToString();
dr["Customer"] = IrfTable_Order.GetString("PSPEL");
dr["Plant"] = IrfTable_Order.GetString("WERKS");
dt_Order.Rows.Add(dr);
}
var json = Newtonsoft.Json.JsonConvert.SerializeObject(dt_Order);
var totalRecordCount = dt_Order.Rows.Count.ToString();
json = "{\"total\":" + totalRecordCount + ",\"rows\":" + json + "}";
Response.Write(json);
Response.End();
注意,从SAP里面得到的数据是一张 rfc table,并不是我们常用的 DataTable,所以这里需要进行转换后才能使用,最后将数据转换为 JSON 输出即可:


下一篇将介绍如何将 MTS 里面的工单完工数回传至 SAP 里面,方便货仓入仓与扣数...
C#连接SAP【生产系统与ERP对接】的更多相关文章
- 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策
上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策上海达策为电子行业企业提供了多样的ERP信息化管理系统.基于多营运中心的管理架构体系,构造了以供应链.生产管理.财务一体化为核心,协同HR.B ...
- 上海SAP代理商 服装行业ERP系统 达策SAP金牌代理商
上海SAP代理商 服装行业ERP系统 达策SAP金牌代理商上海达策公司的前身是上海InfoPower技术有限公司,该公司在中国ERP软件的销售和服务长达20年.在2005年4月上海达策正式成立,致成立 ...
- C#通过RFC连接sap系统
先理解一下 RFC(Romote Function Call)远程函数调用 调用前提: 1.要想通过C# 通过RFC调用SAP端,SAP端要存在RFC远程调用的函数才行(例如SAP端通过SE37创建) ...
- OA系统、ERP系统、CRM系统的区别和联系有哪些?企业该如何使用?
我们经常听到很多企业会花重金购买适合企业的ERP.OA和CRM系统,使得公司的管理运营更加高效有序,节省公司运营成本,带来更大的经济效益,但实际上很多人员都不太理解他们之间的区别和联系是什么,到底该如 ...
- JAVA连接SAP
1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...
- SAP生产机该不该开放Debuger权限
前段时间公司定制系统在调用SAP RFC接口的时候报错了,看错误消息一时半会儿也不知道是哪里参数数据错误,就想着进到SAP系统里面对这个接口做远程Debuger,跟踪一下参数变量的变化,结果发现根本就 ...
- SAP生产机该不该开放Debuger权限(转)
前段时间公司定制系统在调用SAP RFC接口的时候报错了,看错误消息一时半会儿也不知道是哪里参数数据错误,就想着进到SAP系统里面对这个接口做远程Debuger,跟踪一下参数变量的变化,结果发现根本就 ...
- 【ABAP系列】SAP 生产订单完工确认(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 生产订单完工确认(CO1 ...
- (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)
(一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...
随机推荐
- LogViewer解君之忧
LogViewer是一款查看和搜索大型文本文件的工具,能够很快速的查看记事本无法打开的大容量文件,比如大数据的日志文件或数据库文件等,可支持最大4GB的大容量. 一.下载地址链接(中文破解版): ht ...
- stream流篇
流是C#中比较重要的一个概念,很多关键技术都需要用到流.何为流呢?可以理解流为江河中水的流动,不过C#中则为信息流,我们可以把信息写入流,也可以读出.比如以文件读写操作为例,首先以某种方式(如只读)打 ...
- SpringBoot系列之YAML配置用法
1.全局配置 SpringBoot的全局配置文件有两种: application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值,主要是 ...
- 2018.8.8 python 初识函数
主要内容: 1.函数定义 2.函数名,函数体以及函数的调用 3.函数的返回值 4.函数的参数 一.函数的定义 函数:对代码块和功能的封装和定义. 二.函数名.函数体及函数的调用 我们使用def关键字来 ...
- 泛微ecology OA系统某接口存在数据库配置信息泄露漏洞
2漏洞详情 攻击者可通过该漏洞页面直接获取到数据库配置信息,攻击者可通过访问存在漏洞的页面并解密从而获取数据库配置信息,如攻击者可直接访问数据库,则可直接获取用户数据,由于泛微e-cology默认数据 ...
- LVS NAT模式实践
client:192.168.4.10/24 proxy:192.168.2.5/24 192.168.4.5/24 web1:192.168.4.100/24 web2:192.168.4.200/ ...
- CSPS模拟 47
考试时T1没玩明白,用一个WA90把100盖住了? T1 Emotional Flutter 题目非常蠢萌,只是注意当你把黑块前伸s距离后,应把脚的长度视为0,而不应为1. T2 Endless Fa ...
- 大数据之路day04_2--经典bug(equals与==比较不同,break的跳出不同)
一.equals与==比较不同 在实现某个人去5个商场去购物,控制台输入是否购物(Y/N)的时候,在比较出了问题,发现无论输入什么都是false,后来查阅资料发现,字符串的比较,==和equals不一 ...
- python机器学习——使用scikit-learn训练感知机模型
这一篇我们将开始使用scikit-learn的API来实现模型并进行训练,这个包大大方便了我们的学习过程,其中包含了对常用算法的实现,并进行高度优化,以及含有数据预处理.调参和模型评估的很多方法. 我 ...
- Git详解使用教程
一. 什么是Git Git(读音为/gɪt/).是一个开源的 分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux ...