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 = 0; 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(0, "ORDER_NUMBER");
                Value1.Insert(0, 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 = 0; 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")), 0).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 输出即可:

原文地址:https://blog.51cto.com/11514211/2455627

时间: 2024-11-06 11:27:00

C#对接SAP【生产系统对接ERP,实现工单资料下载】的相关文章

EAM系统工单管理

     一.EAM系统工单管理目标 1)通过EAM管理系统的应用来规范整个业务流程: 2)记录日常维修相关的业务数据和信息: 3)按照缺陷处理.计划检修.预防性维修.预测性维修几种可能模式,以提高维修效率.降低总体维护成本为目标. 4)建立有效的工单管理系统,了解设备状况.通过预防性维护方案提高设备可靠性,通过设备的状态监控实时监测设备等手段来达到设备的科学化管理. 5)设备维修管理主要以工单的审批.执行为主线,通过最先进的计算机和网络技术,将工单中涉及到的工作流程.人力资源.物资(库存.采购

呼叫中心工单系统

呼叫中心工单系统Ticket system又称为工单管理系统(还可以称为问题工单系统,事务工单系统,事务追踪系统issue tracking system,支持工单系统support ticket system)),它是一种网络软件系统,根据不同组织,部门和外部客户的需求,来由针对的管理,维护和追踪一系列的问题和请求.一个完善功能的工单系统 又可以称为帮助台系统. 网讯兆通呼叫中心工单系统一般被广泛用于客户帮助支持服务,客户售后服务,企业IT支持服务,呼叫中心等,用来创建,挂 起,解决用户,客户

(原创)面向对象的系统对接接口编写。第3篇

接上一篇:http://www.cnblogs.com/mazhiyuan/p/5224049.html 讲一下Factory.cs工厂类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ZGMZ.UIL.App { /// <summary> /// app功能入口 /// </sum

(原创)面向对象的系统对接接口编写。第5篇(完结)

接上一篇:http://www.cnblogs.com/mazhiyuan/p/5224054.html 本篇是完结篇.主要讲如何开始调用了,以及如何控制必须是Get请求或者必须是POST请求,是怎么限定住的. 如上图,我们以新闻模块为例子,创建一个News.ashx的前端处理文件 <%@ WebHandler Language="C#" Class="News" %> using System; using System.Web; using Syst

(原创)面向对象的系统对接接口编写。第4篇

接上一篇:http://www.cnblogs.com/mazhiyuan/p/5224050.html 这篇开始写Post和Get请求的布局. 我们就以新闻模块来举例吧.其它的模块,比如用户啦,比如音频模块啦,依样画葫芦,都一样的. 先创建一个新闻模块的文件夹.我们叫“News" 然后,如上图1,2,3共三个红圈.创建这3个文件. 我们先讲第2件文件:CommandType.cs CommandType.cs文件,如上图.他就是一个枚举.里面定义了各种业务逻辑.比如里面有”添加新闻动态“.在这

(原创)面向对象的系统对接接口编写。第2篇

接上篇 http://www.cnblogs.com/mazhiyuan/p/5224046.html 讲:Post.cs文件的编写 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; using ZGMZ.Common; namespace

机械生产行业实施ERP系统对企业管理有好处吗?

随着工业4.0和互联网+时代的到来,生产制造型企业适时导入ERP系统已是一种必然的趋势和明智的选择,据制造行业IT技术调查数据显示,生产型企业实现信息化管理,ERP系统起绝对性作用,不仅解决了企业生产管理难题,还帮助企业实现了一体化管理.下面小编就以智邦国际ERP系统为例,为大家阐述一下ERP系统是如何实现一体化管理应用的吧! 智邦国际ERP系统以生产制造行业管理特点为基础,以IT信息技术为支撑,为生产制造型企业提供了一套完整的解决方案,整个系统涵盖了企业销售.采购.生产.库存.财务.人资等部门

数据字典增强传输到生产系统后可能需要做的事

一般来说,数据字典增强(数据库表.结构等的 APPEND 结构和 INSERT 结构)在传输到目标系统后都会自动重新激活相关的字典对象,并且使用它们的程序也会相应重新生成. 但是有时候,会存在这样的情况,由于某些原因,相关的数据字典对象或者程序没有重新生成,则会导致运行时错误(Short Dump),常见的这种错误和解决方法如下(以下操作都在目标系统,即生产系统上执行): 1.SYNTAX_ERROR:这是由于部分字典对象或程序没有激活,造成相关程序语句在执行时发生语法错误.解决办法是找到短转储

分析SAP ByD系统到底怎么样及有哪些优缺点!

2015年是云端ERP方案最重要的一年,期间Oracle.SAP等公司都开始效仿Netsuite等行业先驱公司发展云端ERP和CRM应用来适应行业发展趋势. 对于大型供应商来说,特别适合SAP,向云端转型并非易事.最近,知名的SAP云端Business ByDesgin ERP平台的失败案例,也无疑证明了这点.Business ByDesign是由SAP研发来直接抗衡Netsuite的产品,由此在获得中性企业的ERP市场. SAP 原本对Business ByDesign的期望很高,更坚信它在短