设为首页 收藏本站
查看: 944|回复: 0

[经验分享] c#连接SAP新方式

[复制链接]

尚未签到

发表于 2015-9-19 07:10:15 | 显示全部楼层 |阅读模式
  一直以来连接sap bapi都非常慢,但是最近有项目需要连接SAP,但是要求速度上有要求,于是我就在网上搜索了一番,终于给我发现一个sapnco3.0这一个东西,用了之后发现速度非常不错,第一次连接速度不算快,但是第二次连接就速度可以算秒连了,更加让我兴奋的是居然服务器不需要安装sap就可以连接sap,哈哈,我简直兴奋不已了
  1.安装Setup_ntintel_302.msi
  2.在C:\Program Files (x86)\SAP\SAP_DotNetConnector3_x86发现了4个文件,当然在自己的.net项目中全部引用这个4个dll啦,不过,抱歉,好像只能其中2个能
  引用成功,哈哈,没有关系,不影响使用
  引用完了,当然是封装自己喜爱的类啦
  



using SAP.Middleware.Connector;
namespace JcWeb.CLass
{
public class SapClass
{
public RfcConfigParameters rfc { get; set; }
public RfcDestination rfcdest { get; set; }
public RfcRepository rfcrep { get; set; }
public IRfcFunction myfun { get; set; }
public bool open()
{
try
{
//都是一句话,根据自己实际情况填,哈哈,为了不暴露公司sap相关信息,参数都以*替代
rfc = new RfcConfigParameters();
rfc.Add(RfcConfigParameters.Name, "*");//sap名字
rfc.Add(RfcConfigParameters.AppServerHost, "*");//SAP服务器IP
rfc.Add(RfcConfigParameters.Client, "*");//端口
rfc.Add(RfcConfigParameters.User, "*");//用户名
rfc.Add(RfcConfigParameters.Password, "*");//密码
rfc.Add(RfcConfigParameters.SystemNumber, "*");
rfc.Add(RfcConfigParameters.Language, "EN");
rfc.Add(RfcConfigParameters.PoolSize, "50");
rfc.Add(RfcConfigParameters.MaxPoolSize, "100");
rfc.Add(RfcConfigParameters.IdleTimeout, "5000");
rfcdest = RfcDestinationManager.GetDestination(rfc);
rfcrep = rfcdest.Repository;            }
catch {
return false;
}
}
public List<JcWeb.Models.DnInfo> ZBAPI_SD_ZSDR135_T1_Output(List<string> dn){
List<JcWeb.Models.DnInfo> data = new List<Models.DnInfo>();
myfun = null;
myfun = rfcrep.CreateFunction("ZBAPI_SD_ZSDR135_T1");//连接BAPI
  //如果输入参数不是一个表的话,以下方式设值
  //myfun.SetValue("AAA", "值");
//如果输入参数是一个表的话,以下方式设值
IRfcTable dntable = myfun.GetTable("DN");
foreach(var t in dn){
dntable.Insert();
dntable.CurrentRow.SetValue("VBELN", t);
  }
myfun.Invoke(rfcdest);//把数据返回SAP执行
       IRfcTable outtable = myfun.GetTable("T02");//返回数据的表格
         JcWeb.Models.DnInfo dndata;      
     for (var i = 0; i <= outtable.RowCount - 1; i++)
{
outtable.CurrentIndex = i;
dndata=new Models.DnInfo();
dndata.Dn = outtable.CurrentRow.GetString("VBELN").ToString();
dndata.Batch = outtable.CurrentRow.GetString("CHARG").ToString();
dndata.custname = outtable.CurrentRow.GetString("NAME1").ToString();
dndata.Dnitem = outtable.CurrentRow.GetString("UEPOS").ToString();
dndata.liaohao_after = outtable.CurrentRow.GetString("MATNR").ToString();
dndata.liaohao_before = outtable.CurrentRow.GetString("MATNR1").ToString();
dndata.Qty = Convert.ToDouble(outtable.CurrentRow.GetString("KCMENG").ToString());
dndata.Rounding_Value = Convert.ToDouble(outtable.CurrentRow.GetString("SCMNG").ToString());
dndata.Sales_Office = outtable.CurrentRow.GetString("VKBUR").ToString();
dndata.Sales_Org = outtable.CurrentRow.GetString("VKORG").ToString();
if (outtable.CurrentRow.GetString("HSDATS").ToString() != "0000-00-00")
{
dndata.scdate = Convert.ToDateTime(outtable.CurrentRow.GetString("HSDATS").ToString());
}
dndata.scpihao = outtable.CurrentRow.GetString("CHARGS").ToString();
dndata.shipto = outtable.CurrentRow.GetString("KUNNR").ToString();
dndata.soldto = outtable.CurrentRow.GetString("KUNAG").ToString();
dndata.taping_date = Convert.ToDateTime(outtable.CurrentRow.GetString("HSDAT").ToString());
data.Add(dndata);
}
return data;
}
}
}

  根据自己的需求可以自己封装操作类啦,不要评价我的封装类,嘻嘻
  不过到这里新的悲剧出现,这个插件真他妈的牛B,把我耍了大半天时间才知道什么回事
  因为这个插件有时候会出现sap连接失败的,不过次数不多,一天偶尔发生一两次,不影响使用,其次我要重点说明下开发时候的问题
  举个例子



IRfcTable dntable = myfun.GetTable("DN");
foreach(var t in dn){
dntable.Insert();
dntable.CurrentRow.SetValue("VBELN", t);
}
myfun.Invoke(rfcdest);
IRfcTable outtable = myfun.GetTable("T02");

  假如你的BAPI里面没有T02这个表,好啦,你第一次使用这个插件开发,你就给他耍死你,不过有我指点你
  假如你的BAPI里面没有T02这个表,报错代码不会停留在 IRfcTable outtable = myfun.GetTable("T02")这里的
  他会在myfun = rfcrep.CreateFunction("ZBAPI_SD_ZSDR135_T1")这条代码这里提示说找不到这个BAPI
  说到这里这个插件牛B不,还没有运行到下面的就知道下面代码出错了,害我白瞎搞白天,所以大家别给错误提示误导
  我估计到这里,大家都明白怎样使用这个插件啦,下面是附上插件的下载地址
  Hi,推荐文件给你 "sapnco30P_2-20007347.zip" http://vdisk.weibo.com/s/iEwEb

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115547-1-1.html 上篇帖子: SAP和ABAP内存的区别 下篇帖子: sap后台作业管理/sap打印管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表