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

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/saper/p/2155906.html
Copyright © 2011-2022 走看看