C# 实现调用 SAP Com组件

王朝学院·作者佚名  2009-02-12
窄屏简体版  字體: |||超大  

/// <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));

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航