如何處理BW抽數中invalid_characteristcs 錯誤

 

轉載: 如何處理BW抽數中invalid_characteristcs 錯誤?

如何處理BW抽數中

invalid_characteristcs 錯誤?

 非法字符錯誤,是BW抽數中很常見又很頭疼的問題,下午羣裏剛好有人討論這個問題,趁熱打鐵總結一下。

症狀

典型的非法字符錯誤的出錯信息是:

BRAIN070, BRAIN060, BRAIN 290

Value ‘…’ (hex. ‘…’) of_characteristic … contains invalid_characters

No SID found for value ‘…’ of_characteristic …

等等。 總之,這類錯誤的錯誤消息都比較清楚,很容易判斷是因爲非法字符引起的。

什麼是invalid_characteristics?

默認情況下,BW只允許以下的字符以及空格

!"%&'()*+,-/:;<=>?_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 

除此之外的字符都會被視爲非法字符。

以下列舉一些比較典型的非法字符:

1. 小寫字母:如果IO沒有勾選Lowercase,則小寫字母都是非法字符

2. 貨幣符號

3. #: 這個是最特殊的非法字符。首先“#”本身默認是非法字符。同時,十六進制碼00-1F對應的字符也是非法字符。這些字符通常是回車,後退,TAB等特殊按鍵,系統無法根據codepage來找到對應的符號顯示,所以都用"#"來表示。因此,當出錯信息裏告訴你某十六進制值有錯誤時,你在PSA或原系統可以看到值裏面包含 "#",但這不一定是用戶輸入的時候輸入了#,也可能是其他系統無法顯示的字符。

4. 以"!"開頭的字符串:SAP用!來標記被刪除的記錄。

5. 只有"#"的字符串:SAP用#來表示not assigned 或空值 

錯誤發生的時機

非法字符會在系統更新Character主數據的時候,進行數據校驗時引起錯誤。這通常發生在兩個時機:

1. 激活DSO的時候:如果DSO勾選了Generate SID,則系統會去更新主數據,這時如有非法字符,會引發非法字符錯誤。

2. 往Cube裝數的時候:往Cube裝數肯定更新主數據,非法字符同樣會引發校驗錯誤。

 有時會出現數據加載到DSO正常,加載到CUBE報錯。這是因爲DSO沒有勾選Generate SID.

如何解決?

1.RSKC

通過這個T-CODE,你可以把系統需要接受的字符補充在此。表RSALLOWEDCHAR記錄了這個設置。

其中,有一個很特殊的設置: ALL_CAPITAL.  在多語言環境中,這個設置非常有用,它讓系統接受所有各種語言的大寫字母,同時也包含了大部分的特殊字符。因此,大部分情況下,在RSKC中設置爲ALL_CAPITAL就是最佳的做法,但是以下數據仍然是非法的:

  • 只有#
  • !開頭
  • HEX 00~1F

2. 通過routine處理非法字符.

具體代碼網上很多,我就不寫了。關鍵邏輯是如果原始數據含有非法字符,則對原始數據做進一步處理。 判斷是否含有非法字符有兩種方式:

  • 使用CN(不僅包含...) 操作符。
  • 使用Function RSKC_CHAVL_OF_IOBJ_CHECK (SE37搜索RSKC*你會發現幾個有用同類function)

請參考網上的代碼:

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/d0afbb81-f219-2c10-4181-b20f6b10e373?QuickLink=index&overridelayout=true

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/50db4398-2dea-2b10-1fab-e3195bb311dc?QuickLink=index&overridelayout=true

http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/20253%3Futm_source%3Dtwitterfeed%26utm_medium%3Dtwitter%26utm_campaign%3DFeed%253A%2520SAPNetworkWeblogs%2520%2528SAP%2520Network%2520Weblogs%2529

3. 直接在PSA修改數據。

4. 讓用戶修改原始數據。

具體採用何種方式,要具體情況具體分析。如果是個別的非法字符,建議讓用戶修改原始數據或直接修改PSA。 如果是R3那端會有大量的非法字符,建議使用routine進行處理。至於RSKC的設置,建議保持ALL_CAPITAL

另外,特別說明一下,非法字符裏有"#"時,很多人會想到最省事的方法,把"#" 加入到RSKC中,但如前文所述,出現#不代表非法字符就是#,這種做法只能解決原始數據中的非法字符確實就是#而不是不可顯示的16進制值的情況。

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