如何建立BO咱們這裏再也不論述, 這編文章重點講解的是C4C中的控制的運行原理.java
這個關鍵詞的語法是測試
[RelevantForAccessControl] association toBusinessPartner to BusinessPartner;
這個關鍵詞的語法是spa
[AccessControlContext (Employee)] element UID : UUID; [AccessControlContext (Employee)] association ToEmployee to AP.FO.BusinessPartner.Global:Employee using UUID ;
下面咱們以AccessControlContext爲例,看看C4C的訪問控制是如何動做的.rest
第一步,在咱們建立的BO中添加訪問控制字段code
[AccessControlContext(SalesOrganization)] association toOrganisationalUnit to OrganisationalUnit using UUID;
在BeforeSave中把上面訪問控制字段的值添加上.
激活並生成屏幕對象
第二步..打開WCView屏幕文件,打開屬性面板blog
更改AccessContextCode屬性爲9001-PDI:SalesOrganisation
這步很是重要,並且必須是訪問控制字段相對應的訪問控制代碼
下面是我的收集的訪問控制字段與訪問控制代碼表
若是這一步設置錯誤,訪問控制不會生效,詳細我會在後面說.繼承
第三步.更改WCView下面包括的子屏幕的訪問權限,例如(QC,OWL,TI)
打開其中的Access Controlled Business Object
把Unrestricted Access設置爲False
這一步也是很是重要,若是不把Unrestricted Access設置爲False的話,屏幕中的字段是不會繼承WCView中設置的訪問控制屬性的.ip
第四步.更改OWL頁面中的Query,讓他綁定帶有SAP_AccessControlList的Query
QueryByElements或者自定義的Query均可以.ci
作完以上部署後,系統就能使訪問控制生效了,以後要作的事情就是把WCView分配給角色,而後設置訪問控制權限.
當咱們在Business Object中建立完訪問控制字段並激活後
系統會給該BO增長一個新的Dependent Node
AccessControlList中包含下面字段
上圖來自SAP社區博客Implementing Access Control on Custom Business Objects。
其中最重要的兩個字段是ACCESS_CONTEXT_CODE和OBJECT_UUID-CONTENT
當咱們保存時, AccessControlContext中關聯的值被填充上,而後系統會把關聯中的UUID值保存到SAP_AccessControlList中的OBJECT_UUID-CONTENT, AccessControlContext括號內的對象會轉化爲CODE,存放到SAP_AccessControlList中的ACCESS_CONTEXT_CODE.
轉化的CODE是根據上表中的值來轉化的.因此上在第二部的WCView中的AccessContextCode值不能亂選.否則對不上的話,訪問控制是不會生效的.
當咱們在系統中爲用戶分配訪問權限時,系統會爲每一個用戶訪問每一個業務對象生成一個表
只有當用戶的訪問權限中的數據與BO中的SAP_AccessControlList中的OBJECT_UUID-CONTENT匹配,用戶才能看到該條數據.
若是咱們在系統中建立了多個訪問控制字段,系統只會以最後一條訪問控制字段
例如這裏,有兩個訪問控制字段,一個是Employee(1010),另外一個是SalesOrganisation(9001),當出現多個訪問控制字段時,系統只會以最後出現的訪問控制字段爲主.
別忘了設置其它相關的屏幕(QC,TI,QAF,OWL),否則這些屏幕就不受訪問控制字段影響了,會看到系統中全部數據.
假設變動了訪問控制類型後,那麼以前設置的訪問控制字段是不受新的訪問控制類型影響的,解決方法是進去變動以前的數據中更改任何數據,而後保存.
PDI USER帳號是個神奇的帳號,他是不會受到ACL影響的惟一帳號,因此若是遇到ACL的一些問題,不防試試使用PDI USER去測試一下.
要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼: