日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

屏幕設(shè)計

 細(xì)想生活 2014-12-15
定義屏幕:
    SAP 系統(tǒng)中的屏幕包括:
        標(biāo)準(zhǔn)屏幕:
        選擇屏幕:
        列表輸出屏幕:
1. 標(biāo)準(zhǔn)屏幕必須隸屬于一個類型為 L, M 或 F 的ABAP 程序, 其中需要設(shè)計的內(nèi)容包括屏幕布局以及隱含在其后的流邏輯. 流邏輯則包含ABAP代碼模塊, 實際控制著屏幕的交互, 功能, 各事務(wù)流程(如后續(xù)屏幕設(shè)定), 當(dāng)然還有設(shè)定屏幕的GUI狀態(tài), 包括菜單, 屏幕標(biāo)題行和工具欄等.

2. 屏幕流邏輯分為兩個基本處理塊: PBO(process before output), 在向用戶顯示屏幕之前觸發(fā). PAI(process after input), 在用戶進行某些屏幕行為(如回車)觸發(fā).
流邏輯模塊是一種處理塊, 是進行具體處理的ABAP代碼, 在 MODULE/ENDMODULE之間定義.
對話屏幕中的字段則必須在ABAP程序中有相關(guān)的同名字段, 并在其間相互傳輸, 程序通過程序中的同名字段來控制屏幕字段的輸出值, 并且接受用戶在屏幕字段中的輸入.

3. 屏幕調(diào)用序列.
   一個ABAP事務(wù)程序可以包含一或多個屏幕, 當(dāng)一個屏幕結(jié)束后,可以轉(zhuǎn)向下一個屏幕,后序屏幕可通過屏幕屬性或者ABAP程序來設(shè)定.

4. 屏幕屬性.
   后續(xù)屏幕, 如果沒有設(shè)置該項, 則默認(rèn)的后續(xù)屏幕為當(dāng)前屏幕本身, 通過后續(xù)屏幕可以把事務(wù)中的一系列屏幕鏈接起來, 形成一個屏幕序列, 如果某個個屏幕的后續(xù)屏幕為 0, 則表明該屏幕是個屏幕序列的結(jié)束.

5. 布局設(shè)計.
屏幕元素的屬性可以在程序中動態(tài)進行控制, 方法為在屏幕輸出之前的一個PBO模塊代碼部分對系統(tǒng)內(nèi)表 Screen的值進行修改. 所有的屏幕元素都存儲在系統(tǒng)內(nèi)表 screen 中, 可動態(tài)修改.
    loop at screen.
       if screen-name = 'MOD'.
          screen-input = '0'.
          modify screen.
       endif.
    endloop.
上面的代碼應(yīng)屬于一個PBO模塊, 并在屏幕的PBO邏輯中被調(diào)用.
Screen 結(jié)構(gòu).
Name           屏幕字段名稱
GROUP1         屏幕字段組1.
GROUP2         屏幕字段組2.
GROUP3         屏幕字段組3.
GROUP4         屏幕字段組4.
ACTIVE         字段可見并用于輸入
REQUIRED       必需輸入字段
INPUT          輸入字段
OUTPUT         字段僅用于顯示
INTENSIFIED    高亮顯示字段
INVISIBLE      禁用字段
LENGTH         字段輸出長度

6. 屏幕字段
除系統(tǒng)自動生成屏幕字段外, 還需要由程序員定義相應(yīng)的ABAP程序字段, 二者要有相同的名稱以及長度, 類型.
屏幕設(shè)計

定義相應(yīng)的ABAP字段的目的是用戶屏幕和程序之間的數(shù)據(jù)傳輸, 
在PBO處理邏輯中, 系統(tǒng)將程序字段的值傳輸給屏幕字段進行輸出; 
在PAI中, 系統(tǒng)把用戶的輸入數(shù)據(jù)傳遞給程序.
除去與屏幕輸入輸出元素對應(yīng)的字段外, 還有一個特殊的屏幕字段-----OK 代碼字段, 其作用是返回在屏幕和GUI狀態(tài)中用戶觸發(fā)的功能代碼. 在交互式報表中可以通過 SY-UCOMM返回用戶選擇的功能代碼, 程序通過功能代碼來在PAI模塊中接收對應(yīng)的功能代碼.

7. 流控制邏輯.
在流邏輯定義中, Process 語句用于說明模塊何時被調(diào)用, MODULE 語句中指定模塊名, 告訴系統(tǒng)該事件調(diào)用的具體ABAP模塊, 每一個流邏輯模塊的內(nèi)容都是由普通的ABAP代碼組成的.
流邏輯中有四種典型的處理塊, 由PROCESS引導(dǎo), 在不同的情況下被觸發(fā).
Process before output.  (PBO)
...
在當(dāng)前屏幕輸出之前被觸發(fā).可用于屏幕初始化工作, 例如數(shù)據(jù)庫選擇, 屏幕元素動態(tài)設(shè)定等. 當(dāng)所有的PBO模塊結(jié)束后, 系統(tǒng)將顯示當(dāng)前用戶屏幕.

Process after input. (PAI)
...
該事件在用戶在屏幕中執(zhí)行功能后被觸發(fā), 所有的PAI模塊結(jié)束后, 屏幕可能調(diào)用后續(xù)屏幕或者回到上一個屏幕序列.

Process on help-request. (POH)
...
當(dāng)用戶要求查看幫助信息時(F1)被觸發(fā), 事件結(jié)束后, 返回當(dāng)前屏幕.

Process on value-request. (POV)
...
當(dāng)用戶按下查詢幫助按鈕時(F4)被觸發(fā), 事件結(jié)束后交繼續(xù)處理當(dāng)前屏幕.

流邏輯語句.
流控制語言不同于普通的ABAP語言.
PROCESS          流邏輯事件塊關(guān)鍵字
MODULE           調(diào)用ABAP程序中定義的對話模塊
FIELD            定義屏幕字段賦給程序中相應(yīng)字段的邏輯點
ON               FIELD 關(guān)鍵字語句選項
VALUES           FIELD 關(guān)鍵字語句選項
CHAIN            開始一個處理鏈
ENDCHAIN         結(jié)束一個處理鏈
CALL             調(diào)用子屏幕
LOOP             開始正理屏幕表格

定義和調(diào)用對話模塊.
在ABAP模塊池和可執(zhí)行程序中, 可以在MODULE和ENDMODULE語句之間定義對話模塊. 在屏幕PBO中調(diào)用的模塊需要在其后加下OUTPUT. 在PAI模塊則使用INPUT.

對話模塊不專屬于某個屏幕, 而是可以被程序中的任意多個屏幕所調(diào)用. 通過系統(tǒng)變量 sy-dynnr的返回值, 可以確定是哪個屏幕正在對其調(diào)用.

對話模塊經(jīng)常被存儲在模塊池中, 一個模塊池中一般需要包含四個引用程序. 命名規(guī)則分別是:
  • programeTOP 存放全局?jǐn)?shù)據(jù)
  • programeO01 存放PBO模塊
  • programeI01 存放PAI模塊
  • programeF01 存入功能模塊
這種做法可以讓程序結(jié)構(gòu)非常清晰. 這些引用程序應(yīng)該先于流邏輯模塊創(chuàng)建, 流邏輯模塊添加時, 系統(tǒng)將詢問添加至哪個引用程序之中, 由程序員選擇正確的位置.
需要注意的地方是在模塊化的結(jié)構(gòu)之中, 不存在局部數(shù)據(jù)對象, 所有定義在MODULE和ENDMODULE 語句之間的數(shù)據(jù)對象將被放置到整個程序的公用數(shù)據(jù)區(qū)域, 因此最好不要在該結(jié)構(gòu)中出現(xiàn)數(shù)據(jù)的定義和聲明語句, 而應(yīng)將所有的數(shù)據(jù)聲明放置在TOP引用程序的相關(guān)部分. 

調(diào)用對話模塊:
在屏幕邏輯語言中, 使用MODULE語句對在模塊池等ABAP程序中定義的模塊進行調(diào)用.
需要注意的是不要將屏幕流邏輯語句MODULE和ABAP中的模塊定義語句相混淆. 
屏幕一旦被調(diào)用, 系統(tǒng)就會觸發(fā)PBO事件, 其中屏幕流邏輯將依次調(diào)用相應(yīng)的ABAP PBO模塊并運行其中的代碼. 所有的PBO模塊調(diào)用結(jié)束之后, 屏幕及其中所有元素顯示給用戶, 此后系統(tǒng)將控制權(quán)由應(yīng)用服務(wù)器轉(zhuǎn)交給顯示服務(wù)器, 以接受用戶的輸入, 直至用戶行為觸發(fā)PAI事件. PAI事件觸發(fā)后, 控制權(quán)又交給應(yīng)用服務(wù)器, 并按次序調(diào)用其中的PAI模塊對輸入的數(shù)據(jù)進行處理, 所有的PAI事件運行結(jié)束之后將觸發(fā)后續(xù)屏幕的PBO事件.

無條件調(diào)用:
通常情況下, 模塊的調(diào)用順序取決于在屏幕流邏輯中的出現(xiàn)次序. 在PAI事件塊中, 系統(tǒng)首先將進行默認(rèn)的輸入正確性檢查, 這意味著在調(diào)用第一個PAI模塊之前, 用戶在屏幕中輸入時, 至少所有在屬性被設(shè)為Required Filed 的字段均必須輸入, 而且對于參照數(shù)據(jù)字典聲明的字段, 還必須滿足字典中定義的可能值列表和約束表中的限定.
但在某些情況下, 用戶可能僅僅是為了退出當(dāng)前屏幕, 卻要輸入很多數(shù)據(jù), 或者不知道如何輸入正確的數(shù)據(jù), 又無法結(jié)束該事務(wù), 為了避免這類情況, 可以使用一種與特殊功能代碼模塊, 無條件調(diào)用模塊, 無論用戶輸入滿足系統(tǒng)檢查與否, 該模塊都將先被調(diào)用.
  1. 類型為E的功能代碼. 在屬性對話框中將 Function type 設(shè)定為'E'. 如果用戶觸發(fā)了E類型功能, 在PAI中系統(tǒng)將忽略所有自動的字段檢查并直接調(diào)用特定的Module語句(AT EXIT-COMMAND).
  2. 類型為E的PAI模塊.  無論在PAI邏輯中出現(xiàn)在何位置, 該語句中指定的模塊都將優(yōu)先被調(diào)用. 在此之前, OK代碼字段被傳遞至ABAP程序中同名字段, 但沒有其他屏幕字段被傳遞至相應(yīng)的ABAP字段.
PROCESS AFTER INPUT.
  MODULE back AT EXIT-COMMAND.
  ....

ABAP 模塊代碼:
MODULE back INPUT.
  IF ok_code = 'BACK'.
     CLEAR ok_code.
     SET SCREEN 0.
     LEAVE SCREEN.
  ENDIF.
ENDMODULE.

數(shù)據(jù)傳輸控制:
用戶在屏幕中輸入的數(shù)據(jù)可以通過系統(tǒng)自動控制和使用流邏輯語句控制兩種不同的方式傳遞給程序.
系統(tǒng)自動傳遞:
在SAP系統(tǒng)中, 從當(dāng)前屏幕的PAI開始到輸出下個屏幕的PBO事件結(jié)束, 稱為一個對話步驟.  如果不在流邏輯語句中對數(shù)據(jù)的傳輸過程進行任何控制的話, 系統(tǒng)自動將所有屏幕數(shù)據(jù)傳遞給ABAP程序, 在新的屏幕PBO事件即將結(jié)束之前, 即屏幕顯示給用戶時, 再將ABAP數(shù)據(jù)傳遞給相關(guān)的屏幕字段. 整個對話程序中, 所有與屏幕字段同名的全局?jǐn)?shù)據(jù)(在ABAP模塊也要定義), 均將在系統(tǒng)的應(yīng)用服務(wù)器中進行該數(shù)據(jù)傳遞.

語句控制傳遞:
如果在流控制邏輯中使用了Field語句, 在Field語句中指定的字段的數(shù)據(jù)傳輸被延遲, 數(shù)據(jù)不是在PAI的起點被傳輸至ABAP程序, 而是直到實際執(zhí)行該語句時, 指定字段的值才被傳輸?shù)匠绦蛑? 如果屏幕字段出現(xiàn)在多條Field語句中, 則在出現(xiàn)該字段的第一條Field語句執(zhí)行時傳送字段值.
增加了Field語句之后(不論Field語句的位置), 只有位于該語句后面的模塊才可以得到屏幕中被更新的數(shù)據(jù)值.

模塊的條件調(diào)用:
有時, 同一個屏幕的PBO和PAI將反復(fù)循環(huán)出現(xiàn), 如果每一次均將執(zhí)行所有的ABAP模塊并不十分必要.  使用Field語句的ON選項, 并結(jié)合CHAIN和MODULE等關(guān)鍵字語句, 可以實現(xiàn)模塊的條件調(diào)用. 防止不必要的模塊調(diào)用, 以提高系統(tǒng)的性能.
a.) 單字段條件調(diào)用.
使用FIELD語句的ON INPUT附加項, 可以指定某模塊只在給定字段具有非初始值時才被調(diào)用. 
FIELD dynfield MODULE mod ON INPUT.
只有字段 dynfield 包含非初始值時, 才調(diào)用ABAP模塊mod.

還有一種:
FIELD dynfield MODULE mod ON REQUEST.
只有在該字段中輸入值時(包括空值和原值), 才調(diào)用ABAP模塊, 系統(tǒng)將以下設(shè)置字段的方式視為有值輸入:
  • 實際用戶輸入.
  • 通過 SET PARAMETER 字段輸入.
  • 通過 HOLD DATA 功能設(shè)置.
  • 用于事務(wù)調(diào)用時的參數(shù)輸入.
  • 用于整個定制系統(tǒng)的全局字段.
b.) 組合字段條件調(diào)用.
如查一個模塊的條件調(diào)用與多個屏幕字段有關(guān)(即當(dāng)一組屏幕字段中的任意一個滿足某種條件, 則調(diào)用該模塊),
需要用 CHAIN/ENDCHAIN結(jié)構(gòu)將FIELD語句和字段及模塊組合起來.
CHAIN.
  FIELD: f1, f2,...
  MODULE mod1 ON CHAIN-INPUT|CHAIN-REQUEST.
  FIELD: g1, g2,...
  MODULE mod2 ON CHAIN-INPUT|CHAIN-REQUEST.
  ...
ENDCHAIN.

Example:
  CHAIN.
    FIELD: a, b , c.
    MODULE mod1 ON CHAIN-INPUT.
    MODULE mod2.
  ENDCHAIN.
如果字段 a, b, c 中任何一個具有不同于初始值的值, 則調(diào)用模塊 mod1, 而模塊 mod2 則始終被調(diào)用.

我們還可以在 CHAIN 語句鏈中, 將條件限制至特定字段, 可以將 MODULE 語句連接到相關(guān) FIELD 語句.
Example:
  CHAIN.
    FIELD: a, b.
    FIELD: c MODULE mod1 ON INPUT.
  ENDCHAIN.
只有當(dāng)字段 c 包含非初始值時, 才調(diào)用模塊 x.

Example:
  CHAIN.
    FIELD:  a, b.
    FIELD:  c MODULE mod1 ON CHAIN-INPUT.
  ENDCHAIN.
當(dāng)字段 a, b, c 中任一字段包含非初始值時, 都調(diào)用模塊 mod1.

輸入檢查:
使用 FIELD 語句或者 FIELD 和 CHAIN 的語句組合, 可以實現(xiàn)在 ABAP/4 中進行字段輸入檢查.
a.)單個值檢查:
屏幕流邏輯.
PROCESS AFTER INPUT.
  FIELD spfli-airpfrom.
    MODULE check_fr_airport.
ABAP 代碼如下:
MODULE check_fr_airport INPUT.
  SELECT * FROM sairport WHERE id = spfli-airpfrom.
  IF sy-subrc NE 0.
     MESSAGE E003 WITH spfli-airpfrom.
  ENDIF.
ENDMODLE.
當(dāng)有錯誤時, 屏幕重新顯示, 只有 spfli-airpfrom 字段可接受新的輸入.

b.) 檢查多個字段.
放在 CHAIN/ENDCHAIN 鏈中, 在 CHAIN 鏈中所有字段相互依賴, 鏈內(nèi)部任一字段發(fā)生錯誤輸入時, 會重新顯示屏幕, 并允許輸入鏈中的任意字段.
CHAIN.
  FIELD: spfli-carrid, spfli-connid.
    MODULE check_flight.
ENDCHAIN.






在選擇屏幕之后, 按了回車或F8會觸發(fā) At selection-screen 事件, 如果按了F8,這個事件塊執(zhí)行后, 繼續(xù)觸發(fā)start-of-selection, 如果按回車, 則重新顯示當(dāng)前選擇屏幕.
在處理 at selection-screen 事件前, 用戶輸入會自動傳給輸入變量, 因此可以在這個事件塊里面處理輸入檢查和權(quán)限檢查.

MODULE module_name AT EXIT-COMMAND:只能在PAI中使用,會由于以"/E"開頭或者E型的function而觸發(fā)(一般就是Back、Exit、Cancel)
8. 調(diào)用屏幕.
實現(xiàn)屏幕動態(tài)調(diào)用的ABAP語句.
SET SCREEN next_screen_number.
為當(dāng)前屏幕指定后續(xù)屏幕.

CALL SCREEN screen_number.
CALL TRANCTION tcode.
掛起當(dāng)前屏幕序列, 進入新的屏幕或事務(wù).

LEAVE SCREEN.
如果需要未完成當(dāng)前屏幕控制流就要轉(zhuǎn)入后續(xù)屏幕.

LEAVE TO SCREEN screen_number.
LEAVE TO TRANCTION tcode.
未完成當(dāng)前屏幕就轉(zhuǎn)入后續(xù)屏幕.

LEAVE TO SCREEN 0.
SET SCREEN 0.
LEAVE SCREEN.
中止當(dāng)前屏幕.

9. 調(diào)用GUI狀態(tài).
SET PF-STATUS stat.
SET TITLEBAR stat.

10. ABAP事件執(zhí)行順序.
屏幕設(shè)計




    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多