2017-08-14 93 views
2

我需要讀取發票,訂單等存儲的文本 在ABAP中,我們可以使用READ_TEXT功能模塊,但我需要在CDS視圖內讀取它。 有沒有辦法直接在SELECT語句中從數據庫表中讀取文本?READ_TEXT CDS中的類似功能查看

+0

我相信你可以爲STXH,STXL和STXB表創建兩個CDS視圖,一個用於sap腳本文本,一個用於非sap腳本文本。但是,最終,您必須解壓縮ABAP中的文本。你爲什麼需要它?如果是關於性能問題,您可以查看批量閱讀標準文本,https://archive.sap.com/discussions/message/10063502#10063502 – Oguz

+0

Merhaba Oguz,我已經有一個CDS,它從各種表中讀取有關發票的數據。我需要顯示項目文本等等。因爲我無法從CDS視圖中的表格中讀取它們,所以我必須在ABAP代碼中操作CDS數據,例如將所有內容都捕捉到內部表循環中並使用FM讀取。但是這種類型的編碼與HANA方法不匹配,推動數據讀取到數據庫級別 – Eralper

+0

Merhaba Eralper。我對此很好奇,你的問題解決了嗎? – Oguz

回答

2

主要問題是將二進制轉換爲文本,我認爲。因爲,sap腳本文本以編碼的二進制格式存儲。有SAP HANA SQL功能,它是BINTOSTR。它可能有幫助。我沒有漢納平臺。不幸的是,我無法嘗試。

@AbapCatalog.sqlViewName: 'ZMYSELECT' 
@AbapCatalog.compiler.CompareFilter: true 
@AccessControl.authorizationCheck: #CHECK 
@EndUserText.label: 'BinToStr' 
define view ztmp_cds_demo 
as select from vbak as k 
left outer join stxh as h on k.mandt = h.mandt 
      and h.tdobject = 'VBBK' 
      and k.vbeln = h.tdname 
      and h.tdspras= 'T' 
inner join stxl as l on h.tdobject = l.tdobject 
      and h.tdname = l.tdname 
      and h.tdid = l.tdid 
      and h.tdspras = l.tdspras { 

    //cast(BINTOSTR(cast(CLUSTR as binary)) as varchar) as id, 
    cast(BINTOSTR(cast(CLUSTD as binary)) as varchar) as text 
} 

注意:您可能需要更改連接,爲您的情況添加一些參數等。 相關鏈接: https://blogs.sap.com/2014/02/25/alternative-to-readtext-function-module/

How to convert BLOB to varchar with SAP HANA database using SQL

+0

MerhabaOğuz,不幸的是,當我在CDS視圖中嘗試查詢時,我得到了bintostr函數是未知的錯誤,阻止激活。當我直接對HANA db執行查詢時,遇到無效的字符編碼錯誤。所以我還不能解決問題 – Eralper

1

的東西,我有一個ABAP 7.50系統(EHP8)使用CDS時,我的OData服務僅僅是創建一個單獨的OData服務,是一個通用的「標準文本」做讀者。這是一個在SEGW中建模的基於ABAP的純OData服務。

然後,無論何時我想在我的應用程序中顯示標準文本,我都會打電話給此服務。效果很好。似乎在S4中你可以在CDS中完成這一切。

+0

嗨傑森,謝謝你通知這個選項。據我所知,您可以在OData方法中調用函數模塊read_text,以獲取通過CDS等獲取的數據。因此,您可能讀取每個記錄的基礎,對嗎?我其實想要做的是大衆閱讀。你認爲這有可能嗎? – Eralper

+0

在你自己的odata服務中,你可以做任何你想做的事情......包括大衆閱讀標準文本。 ;-) –

+0

在我看到的每一個文本閱讀中,都會遇到以下IMPORT命令代碼塊,我要在AMDP或CDS視圖SELECT語句中執行。我想知道這是否有辦法?從內部表cluster_tab將rt_lines 導入l_cp 接受截斷「對於Unicode-> Nonunicode 重要,忽略轉換錯誤。 – Eralper