2011年(45)
分类: 数据库开发技术
2011-08-28 18:04:15
上面博文可知BAPI_USER_CREATE的一些结构和参数。所以在C#中要调用它就很清楚了要输入哪些参数了。
1、首先引用dll,然后在程序开头:using SAP.Middleware.Connector;
2、接下去就是设置登陆参数了,以前相关博文都有说明:
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if ("PRD_000".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.3");
parms.Add(RfcConfigParameters.SystemNumber, "00");
parms.Add(RfcConfigParameters.User, "MENGXIN");
parms.Add(RfcConfigParameters.Password, "5239898");
parms.Add(RfcConfigParameters.Client, "888");
parms.Add(RfcConfigParameters.Language, "ZH");
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
3、设置一个方法,引用这个登陆参数的类:
public void nco()
{
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
nco(prd);
}
4、然后就是开始了调用代码,以下代码全部放出,然后一行一行说明:
public void nco(RfcDestination prd)
{
//选择要调用的BAPI的名称
RfcFunctionMetadata BAPI_COMPANYCODE_GETDETAIL_MD = prd.Repository.GetFunctionMetadata("BAPI_USER_CREATE");
//新建调用该BAPI的一个“实例”
IRfcFunction function = null;
function = BAPI_COMPANYCODE_GETDETAIL_MD.CreateFunction();
//因为用户名称是一个字段,所以直接赋予字符串即可
function.SetValue("USERNAME", USERID.Text.Trim());
//接下去是密码。因为密码是一个结构,该结构只有一个栏位,所以这里先获取这个密码结构
IRfcStructure PWD = function.GetStructure("PASSWORD");
//设置这个结构中的这个栏位的内容
PWD.SetValue("BAPIPWD", password.Text.Trim());
//再把这个结构传进去给作为密码参数
function.SetValue("PASSWORD", PWD);
//这个是登陆信息,类型也是一个结构,所以这里获取出这个登录信息的结构出来
IRfcStructure logo = function.GetStructure("LOGONDATA");
//以下两个是设置这个登陆结构的一些栏位的值
logo.SetValue("GLTGV", "20110821");
logo.SetValue("GLTGB", "99991231");
//将登陆信息的结构传进去给LOGONDATA
function.SetValue("LOGONDATA", logo); //设置参数
//这个是地址信息,取结构,然后赋值,再将它传进去
IRfcStructure address = function.GetStructure("ADDRESS");
address.SetValue("FIRSTNAME", firstname.Text.Trim());
address.SetValue("LASTNAME", lastname.Text.Trim());
address.SetValue("DEPARTMENT", "资讯室");
function.SetValue("ADDRESS", address); //设置参数
//以下这个DEFAULTS是账户的默认信息,不是必须要的。我们这里利用它设置登入账户的语言为ZH
IRfcStructure DEFAULTS = function.GetStructure("DEFAULTS");
DEFAULTS.SetValue("LANGU", "1"); //语言代码,对应简体中文
function.SetValue("DEFAULTS", DEFAULTS);
//以下这个是RETURN,是回传结果的结构。记住,这里跟上面不一样,上面是Structure,这里则是Table!!
IRfcTable returnStructure = function.GetTable("RETURN");
function.Invoke(prd);//提交调用BAPI
//弹出对话框显示调用结果
MessageBox.Show(returnStructure.GetString("MESSAGE").ToString());
prd = null;
}
5、程序运行结果如下:
6、登陆到SAP,运行SU01,输入IT_XM01,看看结果:
当然,如果该用户已经存在了你还去调用这个BAPI生成用户,系统会很知趣的提示:
使用IT_XM01登陆系统,一切OK,系统状态如下:
新建的账户一点权限也没有的,此时可以调用其他BAPI对其新增权限!!方法有点不太一样,需要传入一个表格作为参数,下篇博文放出。
l6274825182018-08-15 17:20:09
大佬, 同一时刻 调用 一个同一个 destinationName 会提示 Destination configuration already initialized!