企业如果上了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对接】的更多相关文章

  1. 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策

    上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策上海达策为电子行业企业提供了多样的ERP信息化管理系统.基于多营运中心的管理架构体系,构造了以供应链.生产管理.财务一体化为核心,协同HR.B ...

  2. 上海SAP代理商 服装行业ERP系统 达策SAP金牌代理商

    上海SAP代理商 服装行业ERP系统 达策SAP金牌代理商上海达策公司的前身是上海InfoPower技术有限公司,该公司在中国ERP软件的销售和服务长达20年.在2005年4月上海达策正式成立,致成立 ...

  3. C#通过RFC连接sap系统

    先理解一下 RFC(Romote Function Call)远程函数调用 调用前提: 1.要想通过C# 通过RFC调用SAP端,SAP端要存在RFC远程调用的函数才行(例如SAP端通过SE37创建) ...

  4. OA系统、ERP系统、CRM系统的区别和联系有哪些?企业该如何使用?

    我们经常听到很多企业会花重金购买适合企业的ERP.OA和CRM系统,使得公司的管理运营更加高效有序,节省公司运营成本,带来更大的经济效益,但实际上很多人员都不太理解他们之间的区别和联系是什么,到底该如 ...

  5. JAVA连接SAP

    1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...

  6. SAP生产机该不该开放Debuger权限

    前段时间公司定制系统在调用SAP RFC接口的时候报错了,看错误消息一时半会儿也不知道是哪里参数数据错误,就想着进到SAP系统里面对这个接口做远程Debuger,跟踪一下参数变量的变化,结果发现根本就 ...

  7. SAP生产机该不该开放Debuger权限(转)

    前段时间公司定制系统在调用SAP RFC接口的时候报错了,看错误消息一时半会儿也不知道是哪里参数数据错误,就想着进到SAP系统里面对这个接口做远程Debuger,跟踪一下参数变量的变化,结果发现根本就 ...

  8. 【ABAP系列】SAP 生产订单完工确认(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 生产订单完工确认(CO1 ...

  9. (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)

    (一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...

随机推荐

  1. linux 下ln命令--笔记

    linux 下ln命令 ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项.注意:符号链接文件不是一个独立 ...

  2. 关于Java 项目的思考总结

    Java 项目思考总结 前言 今天是2017年3月25日,笔者已经毕业半年,工作经验一年. 正好有心思写这个总结. 持续开发 对于Java项目,我所接触的一般就是JavaWeb项目和 Java Jar ...

  3. 开发架构+osi七层协议+socket(day26)

    目录 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议/OSI七层协议 传输层 网络层 数据链路层 物理连接层 socket 什么是socket 为什么用socket 如何使用 软件开发架构 ...

  4. 设计模式(六)Prototype模式

    Prototype模式就是不根据类来生成实例,而是根据实例来生成新实例.至于为什么不能根据类来生成实例,在最后会讲到. 还是根据实例程序来理解这种设计模式吧. 下面是实例代码. package Big ...

  5. fenby C语言 P12

    条件语句的嵌套 注意格式对齐 #include <stdio.h> int main(){ int score=67; if(score<=100&&score> ...

  6. spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误

    查找了各种资料都没找到解决办法,token失效,网络问题,接口服务问题,基础服务问题,都考虑过,但是没能解决,偶尔发现服务器网络配置中存在一个virbr0虚拟网卡,问了下了网管,删除这个对服务并没有影 ...

  7. 零基础攻略!如何使用kubectl和HPA扩展Kubernetes应用程序

    现如今,Kubernetes已经完全改变了软件开发方式.Kubernetes作为一个管理容器化工作负载及服务的开源平台,其拥有可移植.可扩展的特性,并促进了声明式配置和自动化,同时它还证明了自己是管理 ...

  8. 关于Map集合注意事项

    今日代码中循环Map时,采用循环主键 Map<Integer,Map<Integer,String>> status =  new HashMap<>(); Set ...

  9. 【PyTorch教程】P2. Python编辑器的选择、安装及配置

    温馨提示:为了更好的教程体验,提供视频.阅读地址 Youtube: https://www.youtube.com/playlist?list=PLgAyVnrNJ96CqYdjZ8v9YjQvCBc ...

  10. 1005 csp-s 60 凉凉

    T1 嘟嘟噜 上来一看数据范围1e9就蒙蔽,然后不知所措的打了一个 $ O(n)$的无脑算法,由于本人真的脑小,导致O(n)的柿子推了好长时间,导致心态崩了,然后........ 今天能明白了log的 ...