2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

屏幕設(shè)計(jì)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

調(diào)用對(duì)話模塊:
在屏幕邏輯語(yǔ)言中, 使用MODULE語(yǔ)句對(duì)在模塊池等ABAP程序中定義的模塊進(jìn)行調(diào)用.
需要注意的是不要將屏幕流邏輯語(yǔ)句MODULE和ABAP中的模塊定義語(yǔ)句相混淆. 
屏幕一旦被調(diào)用, 系統(tǒng)就會(huì)觸發(fā)PBO事件, 其中屏幕流邏輯將依次調(diào)用相應(yīng)的ABAP PBO模塊并運(yùn)行其中的代碼. 所有的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模塊對(duì)輸入的數(shù)據(jù)進(jìn)行處理, 所有的PAI事件運(yùn)行結(jié)束之后將觸發(fā)后續(xù)屏幕的PBO事件.

無(wú)條件調(diào)用:
通常情況下, 模塊的調(diào)用順序取決于在屏幕流邏輯中的出現(xiàn)次序. 在PAI事件塊中, 系統(tǒng)首先將進(jìn)行默認(rèn)的輸入正確性檢查, 這意味著在調(diào)用第一個(gè)PAI模塊之前, 用戶在屏幕中輸入時(shí), 至少所有在屬性被設(shè)為Required Filed 的字段均必須輸入, 而且對(duì)于參照數(shù)據(jù)字典聲明的字段, 還必須滿足字典中定義的可能值列表和約束表中的限定.
但在某些情況下, 用戶可能僅僅是為了退出當(dāng)前屏幕, 卻要輸入很多數(shù)據(jù), 或者不知道如何輸入正確的數(shù)據(jù), 又無(wú)法結(jié)束該事務(wù), 為了避免這類情況, 可以使用一種與特殊功能代碼模塊, 無(wú)條件調(diào)用模塊, 無(wú)論用戶輸入滿足系統(tǒng)檢查與否, 該模塊都將先被調(diào)用.
  1. 類型為E的功能代碼. 在屬性對(duì)話框中將 Function type 設(shè)定為'E'. 如果用戶觸發(fā)了E類型功能, 在PAI中系統(tǒng)將忽略所有自動(dòng)的字段檢查并直接調(diào)用特定的Module語(yǔ)句(AT EXIT-COMMAND).
  2. 類型為E的PAI模塊.  無(wú)論在PAI邏輯中出現(xiàn)在何位置, 該語(yǔ)句中指定的模塊都將優(yōu)先被調(diào)用. 在此之前, OK代碼字段被傳遞至ABAP程序中同名字段, 但沒(méi)有其他屏幕字段被傳遞至相應(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ù)可以通過(guò)系統(tǒng)自動(dòng)控制和使用流邏輯語(yǔ)句控制兩種不同的方式傳遞給程序.
系統(tǒng)自動(dòng)傳遞:
在SAP系統(tǒng)中, 從當(dāng)前屏幕的PAI開始到輸出下個(gè)屏幕的PBO事件結(jié)束, 稱為一個(gè)對(duì)話步驟.  如果不在流邏輯語(yǔ)句中對(duì)數(shù)據(jù)的傳輸過(guò)程進(jìn)行任何控制的話, 系統(tǒng)自動(dòng)將所有屏幕數(shù)據(jù)傳遞給ABAP程序, 在新的屏幕PBO事件即將結(jié)束之前, 即屏幕顯示給用戶時(shí), 再將ABAP數(shù)據(jù)傳遞給相關(guān)的屏幕字段. 整個(gè)對(duì)話程序中, 所有與屏幕字段同名的全局?jǐn)?shù)據(jù)(在ABAP模塊也要定義), 均將在系統(tǒng)的應(yīng)用服務(wù)器中進(jìn)行該數(shù)據(jù)傳遞.

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

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

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

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

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

輸入檢查:
使用 FIELD 語(yǔ)句或者 FIELD 和 CHAIN 的語(yǔ)句組合, 可以實(shí)現(xiàn)在 ABAP/4 中進(jìn)行字段輸入檢查.
a.)單個(gè)值檢查:
屏幕流邏輯.
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)有錯(cuò)誤時(shí), 屏幕重新顯示, 只有 spfli-airpfrom 字段可接受新的輸入.

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






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

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

CALL SCREEN screen_number.
CALL TRANCTION tcode.
掛起當(dāng)前屏幕序列, 進(jìn)入新的屏幕或事務(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è)計(jì)




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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多