问题描述
- C#调用SAP RFC 无法获取内表对象的一个字段
- 标题写的有可能不清楚。流程是这样的,RFC函数 中没有传入参数,只有一个返回参数,还有一个内表对象。该接口不用返回参数进行返回信息的记录。均使用内表对象。譬如:该内表对象有ABCD4个字段,我为内表对象赋值,执行函数,执行之后,无论是成功与否,数据是否满足业务逻辑。都会将A字段进行修改。也就是A字段记录了相关的返回信息。我读取该字段作为返回信息。我执行前不会为A赋值,这样执行后我获得的A字段就是空,如果我为A赋值,执行后的A和执行前的一样。如下是代码:
获取数据库连接,数据类ErpInfo ErpInfoOne = new ErpInfo();
ErpInfoList.Add(ErpInfoOne);
然后给数据类赋值 之后就是 和SAP相关的了RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.NameCON"");
parms.Add(RfcConfigParameters.AppServerHost10.185.0.166""); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber00""); //SAP实例
parms.Add(RfcConfigParameters.UserXXXXX""); //用户名
parms.Add(RfcConfigParameters.PasswordXXXX""); //密码
parms.Add(RfcConfigParameters.Client800""); // Client
parms.Add(RfcConfigParameters.LanguageZH""); //登陆语言
parms.Add(RfcConfigParameters.PoolSize5"");
parms.Add(RfcConfigParameters.MaxPoolSize10"");
parms.Add(RfcConfigParameters.IdleTimeout60"");
RfcDestination dest = RfcDestinationManager.GetDestination(parms);try { RfcRepository repo = dest.Repository; IRfcFunction companyBapi = repo.CreateFunction(""ZZHHS_FUNC_FJ007""); IRfcTable table = companyBapi.GetTable(""ITAB_01""); //获取内表对象 //for (int y = 0; y < table.RowCount; y++) //{ // table.CurrentIndex = y; // MessageBox.Show(""给表对象赋值之前 CHECK:"" + table.CurrentRow.GetValue(""CHECK"").ToString() + "" BLDAT:"" + table.CurrentRow.GetValue(""BLDAT"").ToString()); //} for (int i = 0; i < ErpInfoList.Count; i++) { table.Insert(); //table.CurrentRow.SetValue(""CHECK"" ErpInfoList[i].Check);//1 //都是赋值语句 table.CurrentRow.SetValue(""UZAWE"" ErpInfoList[i].Uzawe);//40 } for (int y = 0; y < table.RowCount; y++) { table.CurrentIndex = y; MessageBox.Show(""执行函数前 CHECK:"" + table.CurrentRow.GetValue(""CHECK"").ToString() + "" BLDAT:"" + table.CurrentRow.GetValue(""BLDAT"").ToString()); } companyBapi.SetValue(""ITAB_01"" table);//将表对象实例赋给参数 companyBapi.Invoke(dest); //执行函数 string MAKTX = companyBapi.GetValue(""RETURN_MSG"").ToString(); //获取输出参数 MessageBox.Show(""SAP的返回信息:"" + MAKTX); //IRfcTable table2 = companyBapi.GetTable(""ITAB_01""); var table3 = (IRfcTable)companyBapi.GetValue(""ITAB_01""); var result = table3.AsEnumerable() .Select(row => new { CHECK = row.GetValue(""CHECK"") BLDAT = row.GetValue(""BLDAT"") }).ToList(); } catch (Exception ex) { MessageBox.Show(""程序处理异常:"" + ex.Message); } finally { }
这样无论我是用 table2 的方式还是用 table3的方式 再次去获得这个表对象的时候 获得的CHECK字段都是没有变化