SAP-检查多个关联字段输入,以及有条件地调用模块
生活随笔
收集整理的這篇文章主要介紹了
SAP-检查多个关联字段输入,以及有条件地调用模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時想作為一組檢查幾個字段。為此,請在 FIELD 語句中包含這些字段,并將它們放入?CHAIN-ENDCHAIN 塊中。在示例事務 TZ31 中使用了 CHAIN 語句:
**** Screen flow logic: ****
CHAIN.
FIELD: SPFLI-CARRID, SPFLI-CONNID.
??MODULE CHECK_FLIGHT.
ENDCHAIN.
**** ABAP/4 module: ****
MODULE CHECK_FLIGHT INPUT.
SELECT SINGLE * FROM ?SPFLI
WHERE CARRID = SPFLI-CARRID
AND CONNID = SPFLI-CONNID.
IF SY-SUBRC NE 0.
??MESSAGE E005 WITH SPFLI-CARRID SPFLI-CONNID.
ENDIF.
ENDMODULE?
在鏈塊中,所有字段相互依賴。鏈內發現錯誤時,會重新顯示屏幕,并允許輸出鏈中任何地方發現的字段,但仍不允許輸入任何非鏈字段。在用戶重新輸入值(輸入到鏈字段之一)之后,重新啟動 PAI 并將鏈中的所有語句作為一個單元重新執行。鏈可以包括其它任何允許的流邏輯語言語句。而且,鏈可以包含多條 FIELD語句。一般情況下,所有FIELD語句應出現在 CHAIN 塊的開始處。
CHAIN.?
FIELD: A, B, C.
FIELD: D, E, F.
MODULE X.
MODULE Y.
ENDCHAIN.
允許將 MODULE 語句添加到包含在 CHAIN 塊中的 FIELD 語句中,但這樣實際上并沒有意義:
CHAIN.
FIELD F1.
FIELD: F2, F3 ?MODULE m1. "( 在 F3后無周 期)
MODULE m2.
ENDCHAIN.
如果模塊 m 發現錯誤,則在重新顯示時它打開所有要輸入的鏈字段,而不只是 F2 和 F3。只有當使用 AT- 或 ON- 條件之一時 ,用該方式使用 FIELD...MODULE 才意義。可以在模塊調用(從屏幕流邏輯)中設置條件。例如可以指定某模塊只在給定字段具有值(非初始值)時才被調用: FIELD X MODULE CHECK_FIELDX ON INPUT.
使用 FIELD 語句的條件形式,可以防止不必要的模塊調用。尤其當更新表輸入時,條件調用可以極大地提高性能。有關信息在下列主題中提供:
☆條件 FIELD 語句
添加 ON- 和 AT- 條件之后,FIELD...MODULE 流邏輯語句就變成了條件語句。請使用以下條件指定何時 應調用模塊 :
ON INPUT
只有當字段包含初始值以外的值時,才調用ABAP/4模塊。此初始值由該字段的數據類型決定:空格對應于字符字段,零對應于數字字段。如果用戶將字段值更改回初始值,則 ON INPUT不觸發調用。(與 ON REQUEST 調用相比,此時它不觸發調用。)
ON REQUEST
只有自上一屏幕顯示以來用戶已輸入字段值時,才調用 ABAP/4模塊。即使用戶鍵入已存在的值,值也象已變化了一樣予以記數。
一般地,通過任何形式的“手工輸入”都可以觸發 ON REQUEST 條件。系統將設置字段的下列方式 作為手工輸入:
- 實際用戶輸入
- SET PARAMETER 字段輸入(手工和自動兩種)
- HOLD DATA 字段輸入
- 用于參數事務的參數輸入(CALL TRANSACTION...USING)
- 用于定制系統的全局字段(這些為某些字段指定自動設置)
所有這些符合 ON REQUEST 條件并將觸發模塊調用 。
ON *-INPUT
如果用戶在字段的首字符中已經輸入“*”,并且該字段在屏幕制作器中具有屬性 *-entry,則調用 ABAP/4 模塊。可以在想只檢查某些輸入類型的例外情況下使用該選項。有些條件只適用于 FIELD 語句,而其它條件則適用于 CHAIN 塊中的 FIELD 語句。尤其是,ON- 和 AT- 條件在包含多字段但又未包含在 CHAIN 塊中的 FIELD 語句中有特殊意義,
☆條件 CHAIN 語句 要在條件 CHAIN 中調用模塊,有兩個選 項: ON CHAIN-INPUT 類似于 ON INPUT。如果鏈中的任一字段包含初始值(空值或零)以外的值,則調用ABAP/4模塊。 ON CHAIN-REQUEST 該條件功能類似于 ON REQUEST,但是如果鏈中的任一字段的值發生更改,則調用ABAP/4模 塊。 例如: CHAIN.? FIELD: A, B, C. FIELD: D, E, F. MODULE X ON CHAIN-INPUT. MODULE Y. ENDCHAIN. 在此,如果字段A、B、C、D、E、F中任何一個具有不同于初始值的值,則調用模塊 X 。而始終調用模塊Y。如果Y發現錯誤,則在錯誤對話期間,重新打開這六個字段并等待輸入。?要將條件限制到特定字段,請將 MODULE 語句連接到相關 FIELD 語句。 CHAIN.? FIELD: A, B, C ?MODULE X ON INPUT. ENDCHAIN. 在該示例子中,只有當列表(C)中的最后字段包含非初始值的值時,才調用模塊X。但是,如果 X 發現錯誤,則在錯誤對話框中重新打開這三個字段(A,B,C)并等待輸入。有時想要的調用只取決于幾個字段,而不是其它字段。為明確起見,將正在使用的鏈斷開并為獨立字段組合創建獨立鏈是最簡單的。在每種情況下,都使用 ON CHAIN-INPUT 或 ON CHAIN-REQUEST。 例如: CHAIN.? FIELD: A, B, C ?MODULE X ON CHAIN-REQUEST. ENDCHAIN. CHAIN.? FIELD: A, B, D, E ?MODULE Y ON CHAIN-REQUEST. ENDCHAIN.
☆條件 CHAIN 語句 要在條件 CHAIN 中調用模塊,有兩個選 項: ON CHAIN-INPUT 類似于 ON INPUT。如果鏈中的任一字段包含初始值(空值或零)以外的值,則調用ABAP/4模塊。 ON CHAIN-REQUEST 該條件功能類似于 ON REQUEST,但是如果鏈中的任一字段的值發生更改,則調用ABAP/4模 塊。 例如: CHAIN.? FIELD: A, B, C. FIELD: D, E, F. MODULE X ON CHAIN-INPUT. MODULE Y. ENDCHAIN. 在此,如果字段A、B、C、D、E、F中任何一個具有不同于初始值的值,則調用模塊 X 。而始終調用模塊Y。如果Y發現錯誤,則在錯誤對話期間,重新打開這六個字段并等待輸入。?要將條件限制到特定字段,請將 MODULE 語句連接到相關 FIELD 語句。 CHAIN.? FIELD: A, B, C ?MODULE X ON INPUT. ENDCHAIN. 在該示例子中,只有當列表(C)中的最后字段包含非初始值的值時,才調用模塊X。但是,如果 X 發現錯誤,則在錯誤對話框中重新打開這三個字段(A,B,C)并等待輸入。有時想要的調用只取決于幾個字段,而不是其它字段。為明確起見,將正在使用的鏈斷開并為獨立字段組合創建獨立鏈是最簡單的。在每種情況下,都使用 ON CHAIN-INPUT 或 ON CHAIN-REQUEST。 例如: CHAIN.? FIELD: A, B, C ?MODULE X ON CHAIN-REQUEST. ENDCHAIN. CHAIN.? FIELD: A, B, D, E ?MODULE Y ON CHAIN-REQUEST. ENDCHAIN.
總結
以上是生活随笔為你收集整理的SAP-检查多个关联字段输入,以及有条件地调用模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP ECC6.0内存参数调整和调优
- 下一篇: ABAP中的动态运算函数