您的位置:首页 > 编程语言

SAP接口编程-RFC系列13 : Table Parameter作为输入参数

2016-03-08 13:59 393 查看
在之前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参数,可以有以下两种方法:

fm.get_Exports("QUERY_TABLE").Value = "SKA1";

或者
fm.Exports["QUERY_TABLE"].Value = "SKA1"


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();
}
}


VBA版对照:/article/8965624.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: