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

[经验分享] 访问SAP的RFC

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-18 07:46:34 | 显示全部楼层 |阅读模式
  .NET
  环境
Xp(sp3) vs2010, win2003 EN 32bit(sp2)
winform,webform
引用sapnco.dll,sapnco_utils.dll(自动引用)
配置文件需要改成混合模式


DSC0000.gif DSC0001.gif


<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
View Code   代码





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAP.Middleware.Connector;
using System.IO;
namespace RMBreakSync
{

//登陆SAP前的准备工作
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if ("PRD_xxx".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.**.**.***");   //SAP主机IP
parms.Add(RfcConfigParameters.SAPRouter, "/H/2*8.??.**.***/H/");   //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00");  //SAP实例
parms.Add(RfcConfigParameters.User, "xxx");  //用户名
parms.Add(RfcConfigParameters.Password, "xxx");  //密码
parms.Add(RfcConfigParameters.Client, "100");  // Client
parms.Add(RfcConfigParameters.Language, "ZH");  //登陆语言
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;

public  static bool IsAlive = false;
private static RfcDestination _RfcDest = null;
/// <summary>
/// 获取验证票
/// </summary>
/// <returns></returns>
public static  RfcDestination GetRfcDest()
{
if (_RfcDest == null || IsAlive==false)
{
lock (typeof(string))
{
if (_RfcDest == null || IsAlive == false)
{
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination("PRD_xxx");
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
_RfcDest = prd;
IsAlive = true;
}
}
}

return _RfcDest;
}


}
public class SAPWrap
{
/// <summary>
/// 更新服务器状态
/// </summary>
/// <param name="planId"></param>
/// <param name="batno"></param>
/// <param name="FGPartno"></param>
public static void UpdateServerStatus(List<p_prodplanImport> list)
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_FLAG");   //调用函数名
IRfcTable rfcTable = companyBapi.GetTable("ITAB");
// companyBapi.SetValue("EX_WERKS", "3003");   //设置Import的参数 ,即:输入参数
//多行
foreach (var plan in list)
{
rfcTable.Insert();
rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString());
rfcTable.CurrentRow.SetValue("FLAG", "X");
}

companyBapi.Invoke(prd);   //执行函数      


}
public static List<RMBreakImport> DownItems(p_prodplanImport plan)
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG_ITEM");   //调用函数名

IRfcTable rfcTable = companyBapi.GetTable("ITAB");
//单行
            rfcTable.Insert();
rfcTable.CurrentRow.SetValue("PLANID", plan.PlanID);
rfcTable.CurrentRow.SetValue("FGPARTNO", plan.P8code);
rfcTable.CurrentRow.SetValue("BATNO", plan.batno.ToString().Trim());

companyBapi.Invoke(prd);   //执行函数        

IRfcTable table = companyBapi.GetTable("ZITEM");  //获取相应的品号内表
var list = new List<RMBreakImport>();
for (int i = 0; i < table.RowCount; i++)
{
table.CurrentIndex = i;  //当前内表的索引行
var item = new RMBreakImport();
item.PlanId = table.GetString("PLANID");
item.PlanId = item.PlanId.TrimStart("0".ToCharArray());
item.FGpartno = table.GetString("FGPARTNO"); //前导零
item.FGpartno = item.FGpartno.TrimStart("0".ToCharArray());

item.p_yw = table.GetString("P_YW");
item.p_FGName = table.GetString("P_FGNAME");
item.batno = decimal.Parse(table.GetString("BATNO"));
item.Poutput = table.GetDecimal("POUTPUT");
item.productdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd");
item.partno = table.GetString("PartNO");
item.partno = item.partno.TrimStart("0".ToCharArray());
item.p_partnoName = table.GetString("P_PartNoName");
item.partnoqty = table.GetDecimal("PartNoQty");
item.partnototalqty = table.GetDecimal("PartNoTotalQty");
item.UM = table.GetString("UM");
item.p_brand = table.GetString("P_BRAND");
item.p_supplier = table.GetString("NORMT");
item.BreakDate =DateTime.Parse(table.GetString("BreakDate")).ToString("yyyy-MM-dd");
item.Breaker = table.GetString("BREAKER");
//设置默认值
item.TicketStatus = "已审核";
item.IsOut = "否";
item.p_type = string.Empty;
list.Add(item);
}

return list;
}
/// <summary>
/// 下载计划列表
/// </summary>
/// <returns></returns>
public static List<p_prodplanImport> DownPlan()
{
var prd = MyBackendConfig.GetRfcDest();
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("ZTPP_TO_MFG");   //调用函数名
companyBapi.SetValue("EX_WERKS", "3003");   //设置Import的参数 ,即:输入参数         
companyBapi.Invoke(prd);   //执行函数        
string MAKTX = companyBapi.GetValue("EX_WERKS").ToString();  //获取字段
   
IRfcTable table = companyBapi.GetTable("ITAB");  //获取相应的品号内表
var list=new List<p_prodplanImport>();

for (int i = 0; i < table.RowCount; i++)
{
table.CurrentIndex = i;  //当前内表的索引行
var plan=new p_prodplanImport();
plan.PlanID = table.GetString("PLANID");
plan.PlanID = plan.PlanID.TrimStart("0".ToArray());//前导零

plan.P8code = table.GetString("FGPartNO");
plan.P8code = plan.P8code.TrimStart("0".ToArray());
plan.Pname = table.GetString("pname"); //计划名称
plan.PlanType = table.GetString("PlanType");
plan.Ppname = table.GetString("P_FGName");
plan.Psetting = table.GetString("PSetting");
if (plan.Psetting.Length > 50) plan.Psetting = plan.Psetting.Substring(0, 50);
plan.batno =decimal.Parse( table.GetString("batno"));
plan.P_yw = table.GetString("P_YW");
plan.Poutput = table.GetDecimal("Poutput");
plan.Pdate =DateTime.Parse( table.GetString("ProductDate")).ToString("yyyy-MM-dd");
//设置默认列

plan.Pweek1 = plan.Pdate;
plan.Pplanner = "";
plan.Pmanger = "";
plan.Pcheckreust = "通过";
plan.Pcheckdate = plan.Pdate;
plan.Ptype = "新制";
plan.Pday1 = plan.Poutput;

list.Add(plan);
}

return list;
}

}


}
View Code    Java
  使用JCO,jco里面有4个版本,需要选择正确的版本,测试Jco是否正确可以使用 java -jar d:\jco\sapjco3.jar ,如果没有报错表示正常了





public static List<String> callRfcExample() {
// 获取RFC 对象
JCoFunction function = RfcManager.getFunction("xxxx_V1");
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList();
importParam.setValue("I_WERKS", "www1");

JCoTable tablename = function.getTableParameterList().getTable("R_GSTRP");
tablename.deleteRow();
tablename.deleteAllRows();
tablename.clear();
tablename.firstRow();
tablename.appendRow();
tablename.firstRow();
tablename.setValue("SIGN", "I");
tablename.setValue("OPTION", "BT");
tablename.setValue("LOW", "2013-06-25");
tablename.setValue("HIGH", "2013-06-25");
// 执行RFC
        RfcManager.execute(function);
// 获取RFC返回的字段值
//        JCoParameterList exportParam = function.getExportParameterList();
//        String exParamA = exportParam.getString("field_A");
//        String exParamB = exportParam.getString("field_B");
// 遍历RFC返回的表对象
List<String> list=new ArrayList<String>();
JCoTable tb = function.getTableParameterList().getTable("ZAFKO");
for (int i = 0; i < tb.getNumRows(); i++) {
tb.setRow(i);
list.add(tb.getString("ORDER_NUMBER"));
System.out.println(tb.getString("ORDER_NUMBER"));
//System.out.println(tb.getString("field02"));
        }
return list;
}
View Code   详细请参考这里:http://www.cnblogs.com/geun/archive/2012/11/12/2765793.html#2714359
  另外win2003,32或64 bit的需要安装对应的
Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package (KB973544)
话说win2003,32bit上安装了七把次都没成功:(
  //============
  完成代码参考网盘内容

运维网声明 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-115124-1-1.html 上篇帖子: SAP学习 看看你在哪个阶段 下篇帖子: [SAP IDES BASIS ECC 6.0] 为默认的IDES添加 中文语言包 ZH
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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