通过RFC给SAP新建用户
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;
}
输入T-CODE:BAPI,然后在第二个页签下找到该BAPI:
上图中的红色框框里就是我们要调用的BAPI的名称。双击它,进入到该BAPI的一些说明里:
看到了,在属性页里它勾选了Remote… 说明它是可以远程操控的!
上图里,注意到红色框框都是不可选的,也就是后面的复选框没有选中,它告诉我们,在调用BAPI的时候这些参数是必须要有值传进来的!
这个就是返回的参数。当然,这个Return也是必须要传出来的值。
细心的人从上面几个图片可以看出,“参考打印”栏位里都是BAPI开头的结构,或者是结构里面的一个字段。双击这些结构进去就可以看到相关的栏位组成。
现在回到Import页签里,双击USERNAME的“参考打印”——BAPIBNAME-BAPIBNAME。“-”前部分是结构,后面是这个结构里的一个栏位。进入到里面:
这个BAPINAME结构只有一个栏位,而且是CHAR型,12码,SO,在传 用户名 进来的时候就是写入字符串即可。
我们看看PASSWORD,对应的结构是:BAPIPWD 双击之,如下图:
发现这里面只有一个栏位,CHAR型,40码,传密码之用。
再看看ADDRESS栏位对应的结构BAPIADDR3,双击之:
这个结构栏位就比较多了。虽然这里没有规定那些是必须要有值的,但确实有些是需要赋值,有些则可以放空。
我们在SU01里面新建用户的时候系统会提示要求输入姓和名,那么这里的FIRSTNAME和LASTNAME是必须的了。
BAPI里传入的参数LOGONDATA是放登陆数据的,具体的结构不再赘述。而返回的信息RETURN里有一个MESSAGE是放调用结果的信息,我们在NCO3里调用要用到它来返回结果信息。
首先,我们在BAPI画面里查找出相关的BAPI出来,利用角色去给用户添加权限:
双击此BAPI,进入到BAPI预览画面:
Table属性页:
第一个ACTIVITYGROUPS是指我们要传进去的表格内容,不再是一个栏位和结构内容了。第二个的RETURN则是返回调用结果。
双击BAPIAGR的结构,进入结构详情画面:
以上AGR_NAME是角色名,应该是必须要的。
那么,接下去就是在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_ACTGROUPS_ASSIGN”);
IRfcFunction function = null;
function = BAPI_COMPANYCODE_GETDETAIL_MD.CreateFunction();
//传入我们要赋予权限的用户名
function.SetValue(”USERNAME”, USERID.Text.Trim());
//接下去就是传入角色名。由于ACTIVITYGROUPS 是在Table属性页,所以我们是用Table 而不是Import和Export属性页里面用的Structure
IRfcTable ROFTable = function.GetTable(”ACTIVITYGROUPS”);
//上面语句产生的ROFTable 其实是一张空表,里面除了有那几个栏位之外是没有任何记录的,所以在对表格赋值之前需要先进性新增一行
ROFTable .Insert();
//接下去就是对表格当前行的相关栏位赋值。如下的角色名“MIS”是预选在SAP中建立好的
ROFTable .CurrentRow.SetValue(”AGR_NAME”, “MIS”);
ROFTable .CurrentRow.SetValue(”FROM_DAT”, “20110825″);
ROFTable .CurrentRow.SetValue(”TO_DAT”, “99991231″);
//传入该赋值后的表格
function.SetValue(”ACTIVITYGROUPS”, ROFTable);
//引用回传结果
IRfcTable RETURNStructure = function.GetTable(”RETURN”);
//提交调用
function.Invoke(prd);
//显示调用结果
MessageBox.Show(RETURNStructure.GetString(”MESSAGE”).ToString());
prd = null;
}
5、调用结果如下:
如此则此用户已经赋予相应的权限了,运行所有T-CODE,没问题!
对了,如果要赋予多个角色的话,那么就是多做ROFTable.Insert();然后再做相应赋值即可。
通过RFC给SAP新建用户的更多相关文章
- C#通过RFC连接sap系统
先理解一下 RFC(Romote Function Call)远程函数调用 调用前提: 1.要想通过C# 通过RFC调用SAP端,SAP端要存在RFC远程调用的函数才行(例如SAP端通过SE37创建) ...
- ubuntu下新建用户
ubuntu下新建用户和RedHat系列的linux有点不一样 新建用户的命令是useradd,修改密码是passwd,如下: sudo useradd zhuhui sudo passwd 1234 ...
- Linux 新建用户、用户组,给用户分配权限(chown、useradd、groupadd、userdel、usermod、passwd、groupdel)
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...
- MySQL新建用户,授权,删除用户,修改密码
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的.注:本操作是在WIN命令提示符下,phpMyAdmin同样适用. 用户:phplamp 用户数据库: ...
- mysql 新建用户、授权、远程访问
新建用户 insert into mysql.user(Host,User,Password) values("localhost","u",password( ...
- ubuntu在命令行新建用户后无法进入桌面的原因
在命名行模式下 用useradd新建一个用户后 在图形界面输入密码无法登陆 这是因为未对新建的用户进行任何配置 用adduser命令新建用户即可进入桌面 下面说一下useradd 和 adduser的 ...
- mysql新建用户的方法
新增 insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("local ...
- .NET通过RFC读取SAP数据
本篇文章中我主要讲的是.NET如何通过RFC从SAP中读取数据.为了功能的可复用性,我将调用RFC的代码从业务层中分离出来单独建立在一个namespace中. 当然除了需要我们自己编写代码以外,还需要 ...
- rhel5 新建用户提示:the home directory already exists.
rhel5 新建用户提示:the home directory already exists.(as4不存在这个问题) 环境如下: [oracle@rhel5 ~]$ df -hFilesystem ...
随机推荐
- Linux: shell常用通配符
字符 含义 * 匹配 0 或多个字符 ? 匹配任意一个字符 [list] 匹配 list 中的任意单一字符 [!list] 匹配 除list 中的任意单一字符以外的字符 [c1-c2] 匹配 c1-c ...
- [iOS]The app icon set named "AppIcon" did not have any applicable content.
Develop Tools: xCode 5.1 I write a demo for app settings feature. The tutorial url is here. When I a ...
- NodeJS系列~目录
回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...
- 大姨吗向左,美柚向右,女性健康APP路在何方?
日前,中国IT研究中心发布了<2016Q3中国女性健康管理APP市场研究报告>,报告显示大姨吗与美柚占据了整个行业的绝对优势,大姨吗的行业用户覆盖率最高,美柚则在月活用户数方面领先. 不过 ...
- 安装Weblogic12.1.3时遇到jre1.7.0_71不是有效的 JDK
解决方案:把fmw_12.1.3.0.0_wls.jar放到%JAVA_HOME%\bin目录下,然后执行java -jar fmw_12.1.3.0.0_wls.jar就能安装了.
- [转] 配置Log4j
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- MongoDB副本集配置系列九:MongoDB 常见问题
What is a namespace in MongoDB? If you remove a document, does MongoDB remove it from disk? When doe ...
- [界面开发新秀]免费的AYUI,开发360领航版系列教程[2/40]
<界面开发风AYUI-基于WPF By AY> 大家好! 距离上篇博客发布有10天了,因为我在开发AYUI4.X效果更惊艳 我是AY,很高兴,终于可以写自己的作品的,网络博 ...
- Fiddler高级技巧 - 映射路径到本地文件夹
适用场景: 你是前端开发人员,要开发一个小模块,需要用到线上的环境(账号.数据.跨域等),但你又没有权限往线上传文件 你是移动测试人员,需要将一组接口的返回结果替换为另一组,最简单的办法就是使用Fid ...
- dubbo 管理控制台 的安装 dubbo-admin
按照官方文档来,只是官方文档中提供的war包无法下载,我的环境至少是这样,不知道其他网络环境是否OK. war包下载地址:链接: http://pan.baidu.com/s/1i32fs7j 密码: ...