SAP接口编程之 RFC 系列(13) : C# 版 Table 作为输入参数

在之前 VBA 代码中,我们已经介绍过 table parameter 作为输入参数的要点。本篇主要演示 C# 使用 table parameter 作为 importing parameter 的语法。以 RFC_READ_TABLE 函数为例。

using System.Data;
using SAPLogonCtrl;
using SAPFunctionsOCX;
using ConnectionProvider;
using SAPTableFactoryCtrl;


// Table parameter 作为 importing parameter 时的使用方法
namespace SAPRfcCall
{
    public class RFC3
    {
        private Connection connection;

        // get table SKA1 contents
        public DataTable GetSKA1()
        {
            DataTable ska1 = null;

            bool isSuccessful = SAPConnection.SilentLogon(
                "192.168.65.100", "D01", 00, "001", "STONE", "sappwd", "ZH");

            if (isSuccessful) {
                connection = SAPConnection.Connection;
                ska1 = DoGetTableLines();
                SAPConnection.Logoff();
            }

            return ska1;
        }

        public DataTable DoGetTableLines()
        {
            if (connection.IsConnected != CRfcConnectionStatus.tloRfcConnected) {
                return null;
            }

            SAPFunctions functions = new SAPFunctions();
            functions.Connection = connection;
            Function fm = functions.Add("RFC_READ_TABLE");

            fm.Exports["QUERY_TABLE"].Value = "SKA1";
            fm.Exports["DELIMITER"].Value = "~";

            // criterial to filter data retrieved
            Tables tables = fm.Tables;
            Table options = tables.get_Item("OPTIONS");
            options.AppendGridData(1, 1, 1, "KTOPL = 'Z900' ");

            // only cares for two fields
            Table fields = tables.get_Item("FIELDS");
            fields.AppendGridData(1, 1, 1, "KTOPL"); // first row
            fields.AppendGridData(2, 1, 1, "SAKNR"); // second row

            fm.Call();

            Table data = fm.Tables["DATA"];
            DataTable tableLines = Utils.ToDataTable(data);

            return tableLines;
        }
    }
}

说明: 向 table 参数添加行时,与 VBA 语法不同,使用AppendGridData() 方法。 另外,获取 importing 参数、exporting 参数、table 参数,可以有以下两种方法:

  • 方法1
fm.get_Exports("QUERY_TABLE").Value = "SKA1";
// 或者
fm.Exports["QUERY_TABLE"].Value = "SKA1"
  • 方法2
Tables tables = fm.Tables;
Table options = tables.get_Item("OPTIONS");
// or : Table options = fm.Tables["OPTIONS"];

单元测试

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SAPRfcCall;
using System.Data;

namespace UnitTestProject
{
    [TestClass]
    public class TestRFC3
    {
        [TestMethod]
        public void TestRFCReadTable()
        {
            RFC3 rfc = new RFC3();
            DataTable ska1 = rfc.GetSKA1();
            Utils.ConsolePrint(ska1);
        }
    }
}

Utils.ConsolePrint() 方法在 Output 窗口打印 dataTable,代码如下:

public static void ConsolePrint(DataTable dataTable)
{
    // function: print dataTable contents in console

    foreach (DataRow row in dataTable.Rows) {
        foreach (DataColumn col in dataTable.Columns) {
            Console.Write(row[col.Caption].ToString() + "\t");
        }
        Console.WriteLine();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容