2010-11-12 34 views
8

在我的java/groovy程序中的要求是這樣的:用戶可以輸入表名和表字段作爲查詢輸入參數,並期望得到一些查詢結果樹液。 從用戶輸入中,我得到表名[CDPOS]和[CDHDR]。在閱讀SAP文檔並使用Google搜索之後,我發現這些表格存儲更改文檔日誌。但是我沒有找到任何可以在java中用來執行這種查詢的遠程調用函數。然後我使用了不推薦使用的RFC,「RFC_READ_TABLE」,並試圖僅根據此RFC構建自定義查詢。但是,我發現如果我傳遞給此RFC的所需字段數超過2,即使限制了最大行數,我也總是遇到DATA_BUFFER_EXCEED錯誤。爲什麼我在調用RFC_READ_TABLE到CDP的java中時得到了DATA_BUFFER_EXCE

我無權成爲SAP系統中的ABAP開發人員,也無法將FM添加到現有系統,因此我只能編寫代碼來在JAVA中完成此要求。

我做錯了什麼?你能給我提一些關於這個問題的提示嗎?

非常感謝提前!

回答

8

DATA_BUFFER_EXCEEDED僅當您想要讀取的字段的總寬度超過DATA參數的寬度時纔會發生,該參數可能因SAP版本而異 - 當前系統的512個字符。它與的數量無關,但與單個數據集的大小無關。所以問題是:什麼是FIELDS參數的內容?如果它是空的,這意味着「讀取所有字段」。 CDHDR寬度爲192個字符,所以我認爲問題是CDPOS是774個字符寬。主要問題是字段VALUE_OLD和VALUE_NEW,都是245個字符。即使您沒有獲得開發者訪問權限,也應該鼓勵某人獲取只讀字典訪問權限,以便能夠詳細檢查結構。

無恥插件:RCER包含一個RFC_READ_TABLE的包裝類,負責處理字段並確保所選字段的總寬度低於功能模塊施加的限制。

另外請注意,這些表格在生產環境中可能會很大 - 請考慮數十億條目。通過在這些表上執行過多的讀取操作,您可以輕鬆地使您的數據庫停頓一下。

+0

非常感謝!你的解釋非常清楚。我將深入研究RCER並檢查包裝類。我想知道是否有任何遠程功能模塊或BAPIS,以便我們可以讀取已更改的文檔信息,如事務「rsscd100」所做的那樣。 – 2010-11-13 00:31:21

+0

我不知道,對不起。訪問更改文檔相當罕見 - 您需要什麼? – vwegert 2010-11-13 16:52:24

+0

嗨vwegert,我檢查了RCER項目。你有沒有獨立於Eclipse RCP應用程序的分支版本? – 2010-11-15 10:57:04

0

有一種解決DATA_BUFFER_EXCEED錯誤的方法。雖然此功能未按照SAP OSS註釋382318發佈供客戶使用,但您可以通過更改將參數傳遞給此功能的方式來解決此問題。它不是導致錯誤的單個字段,但如果數據行超過512字節,則會引發此錯誤。 CDPOS肯定會遇到這個問題!

如果您知道如何使用Jco調用函數並傳遞表參數,那麼解決方法是指定要返回的確切字段。然後,您可以將返回的結果保留在512字節的限制之下。使用

你的表CDPOS的例子,說明這樣的事情,你應該是好去...(小心,CDPOS可以獲得海量!你應該指定並通過where子句!)

FIELDS = 'OBJECTCLAS' .... 場= 'OBJECTID'

在Java它可以表示爲..

listParams.setValue(此。getpObjectclas(),「OBJECTCLAS」);

通過限制您返回的字段,您可以避免此錯誤。

+0

......這正是我去年11月回答的,只是措辭不同? – vwegert 2013-06-06 20:59:24

+2

我試圖用一個使用「FIELDS」參數和一個Java示例的例子來闡明您的解釋......而不僅僅是對「包裝類」的引用。您沒有提到OSS註釋382318,其中聲明此功能模塊未發佈給客戶。這是SAP不支持的功能模塊,我想讓社區意識到這一點。 – SteveB 2013-06-11 21:49:48

相關問題