我有一個解決方案,其中包括我想省略的LOOP。所以我想知道,你是否知道更好的方法來做到這一點。在ABAP中是否有替代'at new'的?
我的目標是通過內部按字母順序排序的標準表進行循環。這個表有兩列:一個名字和一個表格,我們稱之爲子表格。對於每個子表我想做一些東西(在我的XML框架中打開一個XML頁面)。
現在,每個子表都有相應的名稱。我想根據這個名字的第一個字母來分組子表(也就是說,把這些子表的頁面放在一個主頁 - 每個字符的主頁上)。通過對子表的分組,我的意思是,在循環遍歷表時,我想根據名稱的第一個字母對子表進行不同的處理。
到目前爲止,我想出了以下解決方案:
TYPES: BEGIN OF l_str_tables_extra,
first_letter(1) TYPE c,
name TYPE string,
subtable TYPE REF TO if_table,
END OF l_str_tables_extra.
DATA: ls_tables_extra TYPE l_str_tables_extra.
DATA: lt_tables_extra TYPE TABLE OF l_str_tables_extra.
FIELD-SYMBOLS: <ls_tables> TYPE str_table."Like LINE OF lt_tables.
FIELD-SYMBOLS: <ls_tables_extra> TYPE l_str_tables_extra.
*"--- PROCESSING LOGIC ------------------------------------------------
SORT lt_tables ASCENDING BY name.
"Add first letter column in order to use 'at new' later on
"This is the loop I would like to spare
LOOP AT lt_tables ASSIGNING <ls_tables>.
ls_tables_extra-first_letter = <ls_tables>-name+0(1). "new column
ls_tables_extra-name = <ls_tables>-name.
ls_tables_extra-subtable = <ls_tables>-subtable.
APPEND ls_tables_extra TO lt_tables_extra.
ENDLOOP.
LOOP AT lt_tables_extra ASSIGNING <ls_tables_extra>.
AT NEW first_letter.
"Do something with subtables with same first_letter.
ENDAT.
ENDLOOP.
我希望我可以用
AT NEW name+0(1)
,而不是
AT NEW first_letter
,但偏移和長度不得。
你看,我必須包含這第一個循環來添加另一列到我的表中,這是不必要的,因爲沒有新的信息。
另外,我對其他解決方案很感興趣,因爲後來出於各種原因遇到了框架問題。不同的方式來做到這一點也可以幫助我。
我很高興聽到有關此任何想法!我無法找到與此相關的在這裏計算器什麼,但我可能沒有使用最佳的搜索字詞;)
您正在使用哪種NetWeaver版本? – 2017-10-19 08:47:47
我使用SAP Logon 750. – Ela
SAP登錄版本無關緊要,我們需要SAP_BASIS/SAP_ABA版本(系統 - >狀態) – vwegert