.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();然后再做相应赋值即可。

posted @ 2011-08-28 01:09  SAP梦心  阅读(2937)  评论(9编辑  收藏  举报
鄙视一切不懂技术又装懂的小人!