2011年8月15日 星期一

呼叫 SAP RFC - 傳入 IRfcTable

由呼叫 SAP RFC得知,呼叫 RFC 和一般寫程式的概念大同小異,
相關的元素可是一樣都沒有少(輸出入參數、宣告呼叫方法),
接下來講的是如何把 IRfcTable 當作輸入的參數傳入 SAP RFC 中,

要傳入 IRfcTable 到 SAP RFC 中,有分為以下幾個步驟:

1.初始 SAP 連接介面
2.設定 SAP 連接參數
3.初始 SAP RFC 來源
4.建立 IRfcTable 結構
5.設定 IRfcTalbe 參數
6.呼叫 SAP RFC 返回值
7.取得 SAP RFC 返回值

實際上透過程式碼的實作如下:

using SAP.Middleware.Connector;


using System;
using System.Linq;
using System.Text;
using SAP.Middleware.Connector;


namespace csSAP
{
class Program
{
static void Main(string[] args)
{
// 1.初始 SAP 連接介面
RfcDestinationManager.RegisterDestinationConfiguration(new MyBackendConfig());

//2.設定 SAP 連接參數
RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");
try
{

//3.初始 SAP RFC 來源
RfcRepository repo = prd.Repository;
IRfcFunction IFunciton = repo.CreateFunction("JTC_BR0002");

//4.建立 IRfcTable 結構
IFunciton.Invoke(prd);
IRfcTable Itab = IFunciton.GetTable("IT_JTC"); // 取得 SAP 中定義的表格結構

//5.設定 IRfcTalbe 參數
Itab.Append(); // 加入一筆record 到表格中
Itab[0].SetValue("FIELD1", "1000");
Itab[0].SetValue("FIELD2", "1001");

Itab.Append(); // 再加入一筆record 到表格中
Itab[1].SetValue("FIELD1", "1001");
Itab[1].SetValue("FIELD2", "1002");

//6.呼叫 SAP RFC 返回值
IFunciton.SetValue("IT_JTC", Itab);
IFunciton.Invoke(prd);

//7.取得 SAP RFC 返回值
IRfcTable IRetTab = IFunciton.GetTable("ET_RETURN");

}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if ("JTC_000".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.1");
parms.Add(RfcConfigParameters.SystemNumber, "00");
parms.Add(RfcConfigParameters.User, "UserName");
parms.Add(RfcConfigParameters.Password, "UserPassword");
parms.Add(RfcConfigParameters.Client, "100");
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "600");
parms.Add(RfcConfigParameters.SystemID, "JTC");
return parms;
}
else return null;
}
// The following two are not used in this example:
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
}

沒有留言: