企业如果上了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. 将windows项目移植到linux上

    提要:由于项目使用java开发,移植中没有什么编译问题(移植很快,但小问题多) 1.移植过程中遇到的问题: (1).由于项目中使用了 1024以下的端口号,导致网络通信一直出错 原因:因为Linux要 ...

  2. 如何在vue里引入Bootstrap

    一.引入jquery 步骤: 1. 安装jquery $ npm install jquery --save-dev 2.在webpack.config.js 添加内容 + const webpack ...

  3. js更高文档的样式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. ABAP中时间戳的处理

    UTC(UTC, Universal Time Coordinated,通用协调时)时间戳,分为长时间戳和段时间戳,其中长时间戳餐开始的系统的数据元素TIMESTAMPL,类型为DEC(21,7):而 ...

  5. MIT线性代数:10.4个基本子空间

  6. regexp盲注的一些改进

    index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli&qu ...

  7. [考试反思]1005csp-s模拟测试61:休止

    连续不知道多少场了,都是一场10名以内一场20以外...波动极大...还极有规律... 拿到这套题,看到T1大模拟无话可说. 然后考场上我觉得T2很简单....然后就码了两个半小时. T3数据水了暴力 ...

  8. 问题 A: 雷神领域

    传送门 题目描述 L君,S大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域.  这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标.注意:一个位置只能有一个雷电轴标存在. 雷电 ...

  9. 大数据之路week01--自学之面向对象java(static,this指针(初稿))

    函数的重载 返回值不一样会报错 java中,如果自己定义了构造函数的话,它就不会给你默认一个无参函数 如果一个属性,只进行定义,不初始化,自动补0,如果是一个布尔属性,默认是false但是如果一个局部 ...

  10. jquery写$ document.getElementById效果

    jquery写$ document.getElementById效果<pre>document.getElementById('video-canvas')和$('#video-canva ...