.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();然後再做相應賦值即可。

         

         PS:C#調用RFC系列專題就到此告一段落了,如果讀者有建議或者疑問歡迎交流指正~!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章