zoukankan      html  css  js  c++  java
  • .NET连接SAP系统专题:C#调用BAPI给账户赋予权限(八)

        接上篇博文。

        上篇博文讲到C#调用BAPI BAPI_USER_CREATE 来生成SAP账户,但是新建的账户一点权限也没有,现在我们就再次利用BAPI给账户授予权限。

        首先,我们在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();然后再做相应赋值即可。

  • 相关阅读:
    在路上。。。
    DNN模块打包(DNN-ModulePack简称为DNNMP)
    创建一个PortalSettings,这也行。
    对Web 2.0 的体验
    太空旅客 第七位 了
    计划今年每月至少写一篇技术性文章
    检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败,原因是出现 以下错误: 80070005
    RadGrid RaisePostBackEvent 刷新页面问题。
    做为团队中的一员
    dnn captcha 图片 显示不了 见鬼了
  • 原文地址:https://www.cnblogs.com/saper/p/2155906.html
Copyright © 2011-2022 走看看