Views: 123
SAP的API稱為 RFC,就類似一般程式設計所謂的API。
前置作業
- 開好跟SAP系統連線的相關防火牆。
- 準備好RFC,如果有導入顧問可以詢問顧問。
專案設定
我這邊用的是.Net 4.8的專案
弄好之後。
所需DLL
系統需要這三個DLL
- NSAPConnector.dll Nuget
- sapnco.dll
- sapnco_utils.dll
第一個可以從Nuget找到,後面兩個我也不確定哪邊有,知道的麻煩補充給我,我把我的放在連結。SAP DLL.zip
我猜相關DLL可以從這邊抓到,不過我沒帳號。
把DLL加入至專案後 ,要設定Copy到程式碼目錄中,我改為Always Copy
測試用的RFC
如果要測試連線,可以試試這個RFC
RFC_GET_SYSTEM_INFO
設定資料庫連線
/// <summary>
/// SAP連線參數
/// </summary>
/// <returns></returns>
public static RfcConfigParameters GetParameters()
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "127.0.0.1"); //SAP主機IP
parms.Add(RfcConfigParameters.SystemNumber, ""); //SAP 系統代號
parms.Add(RfcConfigParameters.User, ""); //帳號
parms.Add(RfcConfigParameters.Password, ""); //密碼
parms.Add(RfcConfigParameters.Client, ""); // Client
parms.Add(RfcConfigParameters.Language, "ZF"); //登入語言
parms.Add(RfcConfigParameters.PoolSize, "");
parms.Add(RfcConfigParameters.IdleTimeout, "");
parms.Add(RfcConfigParameters.Name, "");
return parms;
}
RFC回傳的資料轉DataTable
/// <summary>
/// RFC回傳的TABLE 轉成 DataTable
/// </summary>
/// <returns></returns>
public static DataTable ToDataTable(IRfcTable myRfcTable)
{
DataTable loTable = new DataTable();
int liElement;
for (liElement = 0; liElement <= myRfcTable.ElementCount - 1; liElement++)
{
RfcElementMetadata metadata = myRfcTable.GetElementMetadata(liElement);
loTable.Columns.Add(metadata.Name);
}
foreach (IRfcStructure Row in myRfcTable)
{
DataRow ldr = loTable.NewRow();
for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
{
RfcElementMetadata metadata = myRfcTable.GetElementMetadata(liElement);
ldr[metadata.Name] = Row.GetString(metadata.Name);
}
loTable.Rows.Add(ldr);
}
return loTable;
}
主程式
//設定連線字串
RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination(GetParameters(client));
RfcRepository SapRfcRepository = SapRfcDestination.Repository;
IRfcFunction func = SapRfcRepository.CreateFunction("RFC名稱");
//定義輸入值 假如需要的話
string rfcImput = "";
func.SetValue("參數名稱", rfcImput);//設定RFC輸入參數
//取資料
func.Invoke(SapRfcDestination);
IRfcTable SAPDataTable = func.GetTable("回傳的資料表名稱");
//將RFC回傳的TABLE 轉成 DataTable
DataTable table = ToDataTable(SAPDataTable);
int rowcount = 0;
//將DataTable 轉成 List<某Model>
var result = new List<某Model>();
foreach (DataRow row in table.Rows)
{
var model = new 某Model
{
某屬性 = row["某屬性"].ToString(),
};
result.Add(model);
rowcount++;
}
0 Comments