/// <summary>
/// 登陸SAP系統
/// </summary>
/// <returns>登陸狀態</returns>
public LoginStatus LoginSAP()
{
try
{
SAPLogonCtrl.SAPLogonControlClass logon = new SAPLogonCtrl.SAPLogonControlClass();
logon.applicationServer = ApplicationServer; //SAP系統ip
logon.Client = Client; //SAP客戶端號
logon.Language = Language; //SAP登陸語言
logon.User = User; //用戶帳號
logon.PassWord = Password; //用戶密碼
logon.SystemNumber = SystemNumber; //SAP系統編號
Conn = (SAPLogonCtrl.Connection)logon.NewConnection();
if (Conn.Logon(0, true))
{
Status = LoginStatus.Success; //登陸成功
}
else
{
Status = LoginStatus.Fail; //登陸失敗
}
return Status;
}
catch (Exception exc)
{
throw(new Exception(exc.Message));
}
}
/// <summary>
/// 調用SAP系統函數模塊
/// </summary>
/// <param name="strFunName">函數名稱</param>
/// <param name="strArgs">輸入參數字典</param>
/// <param name="strRetTabs">返回表結果字典</param>
/// <param name="strResult">返回程序運行結果</param>
/// <returns>返回表結果集</returns>
public DataSet InvokSAPFun(string strFunName, ListDictionary strArgs, ListDictionary strRetTabs, ref ListDictionary strResult)
{
try
{
DataSet retDST = new DataSet();
string[] array = new string[strResult.Count];
strResult.Keys.CopyTo(array, 0);
if (Status == LoginStatus.Success)
{
SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
func.Connection = Conn;
//(1)
SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add(strFunName); //調用函數模塊
foreach (string arg in strArgs.Keys)
{
SAPFunctionsOCX.IParameter gclient = (SAPFunctionsOCX.IParameter)ifunc.get_Exports(arg); //取得輸入參數
gclient.Value = strArgs[arg]; //設置參數值
}
ifunc.Call(); //調用函數模塊
//(2)
foreach (string ret in array)
{
SAPFunctionsOCX.IParameter NUMBER = (SAPFunctionsOCX.IParameter)ifunc.get_Imports(ret); //返回程序運行結果
strResult[ret] = NUMBER.Value;
}
//(3)
SAPTableFactoryCtrl.Tables ENQs = (SAPTableFactoryCtrl.Tables)ifunc.Tables; //獲取所有Tables
foreach (string tab in strRetTabs.Keys)
{
SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)ENQs.get_Item(tab); //返回指定Tables
DataTable dat = ConvertTable(ENQ);
retDST.Tables.Add(dat);
}
}
return retDST;
}
catch (Exception exc)
{
throw (new Exception(exc.Message));
}
}
新聞熱點
疑難解答