2 u010707304 u010707304 于 2013.11.05 10:53 提问

C#调用SAP RFC 无法获取内表对象的一个字段

标题写的有可能不清楚。流程是这样的,RFC函数 中没有传入参数,只有一个返回参数,还有一个内表对象。该接口不用返回参数进行返回信息的记录。均使用内表对象。譬如:该内表对象有A,B,C,D4个字段,我为内表对象赋值,执行函数,执行之后,无论是成功与否,数据是否满足业务逻辑。都会将A字段进行修改。也就是A字段记录了相关的返回信息。我读取该字段作为返回信息。我执行前不会为A赋值,这样执行后我获得的A字段就是空,如果我为A赋值,执行后的A和执行前的一样。如下是代码:
获取数据库连接,数据类ErpInfo ErpInfoOne = new ErpInfo();
ErpInfoList.Add(ErpInfoOne);
然后给数据类赋值 之后就是 和SAP相关的了

RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.Name, "CON");
parms.Add(RfcConfigParameters.AppServerHost, "10.185.0.166"); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00"); //SAP实例
parms.Add(RfcConfigParameters.User, "XXXXX"); //用户名
parms.Add(RfcConfigParameters.Password, "XXXX"); //密码
parms.Add(RfcConfigParameters.Client, "800"); // Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
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字段都是没有变化

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
调用SAP RFC如何传递一个内表参数
搞SAP,ABAP开发的时候,内表是最常用的,SAP中的内表功能强大,相当于C#中的Datatable和数组;C#中无法定义SAP中的内表,那么如何将一个内表传进给SAP呢? 1.先调用RFC,获取一个空的内表结构; //登录SAP RfcConfigParameters parameters = GetRfcLoginParameters();//获取登录参数 RfcDestina
一套通过c#-sap-rfc 完整处理内表输入输出并将数据保存至SAP自建表中的程序
研究了3天c#接口处理sap接口,给自己提出一个课题:如何把外部程序提取的数据通过内表保存到SAP的数据表中?赶紧测试,效果立现,请看源代码. 具备条件: sap vs2010 ok开始! sap里创建函数 上图-》 source code: data: maxprice3 like sflight-price. data: SJ like ZFUNCTION_TEST-SJ
SAP接口编程-RFC系列08 : 获取SAP DDIC的数据字段
获取DDIC的数据字段
SAP接口编程-RFC系列07 : 通用的数据库表读取
实现通用的数据库表读取功能。主要说明函数调用后,VBA如何处理这些数据并在Excel中显示。
.Net 调用SAP RFC接口来读取数据实战纪实
这几天研究.Net 如何调用SAP RFC接口来读取数据,搞得我重装了三次系统,找资料找到吐血,看了德文、日文、英文、中文几乎所有可以参考的资料,师傅亲自出马,并请教了一堆高手还包括IBM的帅锅,还割舍了阳光明媚的周日来研究,终于功夫不负有心人,最终还是解决了,汗啊~~ 下面把我调试的全过程都记录一下,以后有人遇到相同问题就可以参考了。 1.【关键前提】:    (1) 你安装了VS2003
ASP.net 将Table做为参数传入SAP函数
public static DataTable SetTable(string functionName, Hashtable inputParame,string tableName)     {          DataTable dt = null;         if (functionName == "" || functionName == null)         {
c#建立项目通过rfc调取sap函数
准备工作: 1.nco3.0插件; 2.vs2010 3.sap函数(远程类) 操作步骤: vs2010-c#-建立项目-windows窗体应用程序,form建立文本框及标签 form后台代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat
一套通过c# sap-rfc 完整处理内表输入输出的程序
研究了3天c#接口处理sap接口,通过rfc生成凭证后,问题马上来了,如果需要批量输入表数据在sap里生成多行凭证,甚至保存数据该怎么处理呢? 马上投入研究内表输入输出! 于是研究了一套通过内表输入输出的程序,作为以后一个使用模板,希望公司以后使用rfc的时候能够用上,反正我先准备着,也算是今天晚上的一个收获。 具备条件: sap vs2010 ok开始! sap里创建函数 上图-
SAP接口编程-RFC系列13 : Table Parameter作为输入参数
演示c#使用table parameter作为importing parameter的语法和要点
JAVA用JCO连接SAP,实现调用SAP的RFC函数(整理)(附一篇看起来比较全面的说明)
转载自: // 获取RFC返回的字段值 11 JCoParameterList exportParam = function.getExportParameterList(); 12 String exParamA = exportParam.getString("field_A"); 13 String exParamB = exportPara