接上篇博文。
上篇博文講到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系列專題就到此告一段落了,如果讀者有建議或者疑問歡迎交流指正~!