您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何進(jìn)行S/4HANA和CRM Fiori應(yīng)用的搜索分頁實(shí)現(xiàn),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
S/4HANA和CRM里原生的Fiori應(yīng)用,其搜索分頁又是如何實(shí)現(xiàn)的?
分別選取S/4HANA里的Product Master,以及CRM里的My Opportunities這兩個(gè)應(yīng)用為例來介紹。
點(diǎn)擊搜索按鈕之后,默認(rèn)返回前25個(gè)命中的product,同時(shí)顯示總共命中的product數(shù)目:140。
<br font-size:16px;white-space:normal;background-color:#FFFFFF;" />
這個(gè)分頁效果通過OData請求的參數(shù)$skip=0&top=25實(shí)現(xiàn)的。而總共命中條數(shù)140的顯示通過另一個(gè)參數(shù)$inlinecount來實(shí)現(xiàn),該參數(shù)的后臺實(shí)現(xiàn)原理類似ABAP Open SQL里的SELECT COUNT(*)。
從Chrome開發(fā)者工具里觀察該請求的回應(yīng),確實(shí)只有25條記錄返回。
將該搜索結(jié)果列表scroll至底部,發(fā)現(xiàn)有另一個(gè)OData request自動(dòng)發(fā)出:
該請求的頭部參數(shù)為$skip=25&top=25,因此能夠從后臺只取從第26到50個(gè)product:
在我博客SAP Fiori里的List是如何做到懶加載Lazy load的 我解釋了$skip遞增的序列值0,25,50,75...是如何在前臺生成的。
而在這篇博客里,我會著重介紹分頁搜索的后臺實(shí)現(xiàn)。
假設(shè)我重復(fù)將搜索結(jié)果scroll至底部的動(dòng)作重復(fù)三次,那么能夠通過ST05觀察到有三個(gè)數(shù)據(jù)庫的讀請求,每個(gè)請求返回25條記錄。
點(diǎn)擊該按鈕,可以查看到具體是哪一行ABAP代碼發(fā)起的數(shù)據(jù)庫讀請求:
$skip和$top這兩個(gè)參數(shù)的值從前臺傳入后臺,在后臺的方法CL_SADL_GW_GENERIC_DPC~_GET_ENTITYSET的輸入?yún)?shù)io_query_option能觀察到:
開始行的索引值等于$skip參數(shù)值加1。
實(shí)際的讀取分頁在后臺的實(shí)現(xiàn):通過ABAP關(guān)鍵字OFFSET實(shí)現(xiàn)。
該OFFSET的值通過方法CL_SADL_SQL_STATEMENT~GET_SECTIONS_FOR_SELECT內(nèi)一個(gè)較復(fù)雜的table表達(dá)式來決定出來:
首先得出表達(dá)式lt_sections[ type = cl_sadl_sql_statement=>co_type-page ]-from的值:99.
再從內(nèi)表mt_parts取出第99條記錄,從其字段value2得出最終offset值75。
前臺的邏輯和S/4HANA的Fiori應(yīng)用完全一致。
該參數(shù)傳至后臺,存儲在參數(shù)is_paging里:
至于后臺的分頁搜索,My opportunities應(yīng)用并未使用ABAP OPEN SQL里的關(guān)鍵字OFFSET。相反地,所有匹配記錄的GUID都通過One Order的搜索API返回:
多余的記錄,即那些不在$skip和$top定義的參數(shù)之內(nèi)的都被DELETE丟棄:
該實(shí)現(xiàn)或許不如S/4HANA采用OFFSET方式實(shí)現(xiàn)得直接,但是因?yàn)閺臄?shù)據(jù)庫返回的僅僅是命中opportunity的GUID,因此也不會有太多額外的開銷。
上述就是小編為大家分享的如何進(jìn)行S/4HANA和CRM Fiori應(yīng)用的搜索分頁實(shí)現(xiàn)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。