.NET C# Call SAP RFC (Remote Function Call)
執行結果:
Visual Studio 加入參考: 建立WEB專案:加入COM參考~要有安裝 SAP Client
使用ABAP對記錄進行加鎖及解鎖設定的
ENQUEUE_READ
具體操作步驟:
1.
使用
TCODE: SE11
,選擇最後一項
[
加鎖物件
]
,輸入物件名稱
(
注意一定要以字母
‘E’
開頭,這是
SAP
內部規定的,如
EZTESTING)
2.
輸入名稱後,按新增,進入界面後輸入要加鎖的
Table
名,及加鎖類型
(E:
專用,累計;
S:
共享;
X:
專用,不累計
)
。保存後,系統會自動產生兩個函數:
ENQUEUE_EZTESTING
(加鎖)和
DEQUEUE_EZTESTING
(解鎖)
並可由已經建立的
RFC
ENQUEUE_READ
察看
SE11
相關定義資料
故先於SAP定義一lock Table:
CS部分:
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
SAPLogonCtrl;
using
SAPTableFactoryCtrl;
using
SAPFunctionsOCX;
namespace
SAP_Test
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(test)); //Create a new thread and set the method test() run in this thread
s.SetApartmentState(System.Threading.ApartmentState.STA); //Set the run mode 'STA'
s.Start(); //Start the thread
s.Join(); //Wait until thread run OK.
}
private void test()
{
SAPLogonCtrl.SAPLogonControlClass login = new SAPLogonCtrl.SAPLogonControlClass();
login.ApplicationServer = "Server位置";
login.Client = "用戶端";
login.Language = "語言編碼";
login.User = "帳號";
login.Password = "密碼";
login.SystemNumber = 系統編號;
SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)login.NewConnection();
if (conn.Logon(0, true))
{
lblLogonStatus.Text = "
登入SAP成功"
;
SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
func.Connection = conn;
SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("ENQUEUE_READ");
SAPFunctionsOCX.IParameter gclient = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("GCLIENT");
gclient.Value = "822";
SAPFunctionsOCX.IParameter GUNAME = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("GUNAME");
GUNAME.Value = "";
SAPFunctionsOCX.IParameter LOCAL = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("LOCAL");
LOCAL.Value = "0";
ifunc.Call();
SAPTableFactoryCtrl.Tables tables = (SAPTableFactoryCtrl.Tables)ifunc.Tables;
SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)tables.get_Item("ENQ");
int n = ENQ.RowCount;
DataTable dt = new DataTable();
for (int i = 1; i <= n; i++)
{
DataRow dr = dt.NewRow();
if (i == 1)
{
dt.Columns.Add("GNAME");
dt.Columns.Add("GUNAME");
dt.Columns.Add("GARG");
dt.Columns.Add("GOBJ");
dt.Columns.Add("GTDATE");
}
dr["GNAME"] = ENQ.get_Cell(i, "GNAME").ToString();
dr["GUNAME"] = ENQ.get_Cell(i, "GUNAME").ToString();
dr["GARG"] = ENQ.get_Cell(i, "GARG").ToString();
dr["GOBJ"] = ENQ.get_Cell(i, "GOBJ").ToString();
dr["GTDATE"] = ENQ.get_Cell(i, "GTDATE").ToString();
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}
}