LOOP AT SCREEN
用法
主に、画面の属性を変更させるために使用する。
照会モードでは入力不可とするが入力可能モードでは入力可能とする、ラジオボタンAが選択された場合はラジオボタンBに関連する項目は非表示とするなど。
サンプル
LOOP AT SCREEN INTO WA_SCREEN.
IF ( WA_SCREEN-NAME = 'RAD_A' ) AND ( RAD_A = 'X' ).
WA_SCREEN-INPUT = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
属性を変更する場合は、値を代入の上MODIFY SCREENで変更すること。
SCREENの構造と項目
過去のバージョンではデータ型グループで定義されていたようだが、現在は構造SCREENで定義されている。
コンポーネント | 長さ | 型 | プロパティ | 内容説明 |
NAME | 132 | C | Name | 名称 |
GROUP1 | 3 | C | Group1 | 修正グループ |
GROUP2 | 3 | C | Group2 | 修正グループ |
GROUP3 | 3 | C | Group3 | 修正グループ |
GROUP4 | 3 | C | Group4 | 修正グループ |
REQUIRED | 1 | C | Required-entry field | 必須項目 |
INPUT | 1 | C | Input | 入力可能項目 |
OUTPUT | 1 | C | Output | 表示項目 |
INTENSIFIED | 1 | C | Intensified | 強調項目 |
INVISIBLE | 1 | C | Invisible | 非表示エレメント |
LENGTH | 1 | X | visLength | 項目長 |
ACTIVE | 1 | C | Input/Output/Invisible | 有効項目 |
DISPLAY_3D | 1 | C | Two-dimensional | ボックス |
VALUE_HELP | 1 | C | Input help | 入力ヘルプキー |
REQUEST | 1 | C | - | 入力あり |
VALUES_IN_COMBO | 1 | C | Dropdown listbox | 値ヘルプあり |
これらの属性を取り扱うことはできるが、あまり込み入ったことをするとヤヤコシイことになるので、入力可否の制御くらいにしておいた方が無難かと思う。
----------------------------------------------------------------------------------------------------------------
属性の動的設定
画面の各項目には属性のセットがあり、スクリーンペインタでDynpro を定義する際に固定されます。ABAP プログラムの実行時に、特定の命令を使用して、各画面項目の属性の一部を事前定義された構造 screen に読み込むことができます。その後、これらの属性で画面項目を変更することができます。
構造 'screen'
プログラムでこの構造を宣言する必要はありません。ダイアログモジュールでの画面処理中に、screen にアクセスすることができます。
コンポーネント |
長さ |
データ型 |
意味 |
属性 |
surname |
132 |
C |
画面項目の名称 |
名称 |
group1 |
3 |
C |
モディフィケーショングループ 1 |
グループ 1 |
group2 |
3 |
C |
モディフィケーショングループ 2 |
グループ 2 |
group3 |
3 |
C |
モディフィケーショングループ 3 |
グループ 3 |
group4 |
3 |
C |
モディフィケーショングループ 4 |
グループ 4 |
required |
1 |
C |
項目は入力必須 |
必須項目 |
input |
1 |
C |
項目は入力可能 |
エントリ |
output |
1 |
C |
項目は表示専用 |
出力 |
intensified |
1 |
C |
項目は強調表示 |
強調表示 |
invisible |
1 |
C |
項目は非表示 |
非可視 |
length |
1 |
X |
項目長 |
表示長 |
active |
1 |
C |
項目は有効 |
入力/出力/非表示 |
display_3d |
1 |
C |
3 次元ボックス |
2 次元 |
value_help |
1 |
C |
入力ヘルプボタン表示 |
入力ヘルプ |
request |
1 |
C |
入力あり |
- |
最後の列には、スクリーンペインタの画面項目の該当する属性が含まれています。
Dynpro のPBO イベント時に ABAP プログラムで構造 screen を変更し、ABAP プログラムの画面エレメントを変更することができます。変更されたエレメントにより、1 回の画面呼出について画面項目の静的属性が上書きされます。screen とともに使用することができるのは、以下の命令のみです。
LOOP AT SCREEN.
...
MODIFY SCREEN.
...
ENDLOOP.
LOOP AT SCREEN は独立した命令です。内部テーブルでのループと混同しないでください。
コンポーネント NAME には、画面項目の名称が指定されます。コンポーネント GROUP1 から GROUP4 には、3 文字のコードを指定することができます。これらのコードを使用すると、画面項目を最大で 4 つのモディフィケーショングループに含めることができます。1 つの画面項目は、複数の異なるモディフィケーショングループに属することができます。モディフィケーショングループは構造 screen の追加キー項目のようなもので、これを使用して、グループ内のすべてのエレメントの属性を同時に変更することができます。スクリーンペインタでエレメントをモディフィケーショングループに静的に割り当てますが、これはプログラムで動的に上書きすることができます。
残りのコンポーネントは、画面項目の表示属性を変更したり、有効化/無効化したりするために使用されます。LENGTH 以外のすべてのコンポーネントでは、1 は有効を表し、0 は無効を表します。
ACTIVE、INPUT、OUTPUT、および INVISIBLE
コンポーネント ACTIVE、INPUT、OUTPUT、およびINVISIBLE の間には、特定の階層化されたルールがあります。また、それぞれの静的設定に応じて異なる影響をもたらします。
ACTIVE コンポーネントには、対応するエレメント属性はありません。代わりに、このコンポーネントによって、コンポーネント INPUT、OUTPUT、および INVISIBLE が変更されます。
PBO の開始時には、属性の静的設定に関係なく、ACTIVE は常に 1 に設定されます。ACTIVE を 0 に設定すると、自動的に INPUT = 0、OUTPUT = 0、および INVISIBLE = 1 に設定されます。現在の Dynpro エレメントの INPUT、OUTPUT、および INVISIBLE の設定への変更は無視されます。逆に、INPUT = 0、OUTPUT = 0、および INVISIBLE = 1 と設定すると自動的に ACTIVE が 0 に設定され、現在の画面エレメントの ACTIVE へのその他の割当はすべて無視されます。設定 ACTIVE = 1 には、属性へのその他の影響はありません。ACTIVE コンポーネントの唯一の目的は、1 回の割当によって画面項目を無効化することです。Dynpro 制御ロジックで FIELD 命令にリンクされているモジュール呼出は、該当する項目が SCREEN-ACTIVE = 0 の場合でも、必ず実行されることに特に注意してください。無効な項目に対してモジュールが処理されないようにするには、FIELD 命令と MODULE 命令を別個に指定する必要があります。
ACTIVE、INPUT、OUTPUT、およびINVISIBLE には 8 とおりの組合せがあります。各組合せは、それぞれ以下のような影響を画面項目に及ぼします。
ACTIVE |
入力 |
OUTPUT |
INVISIBLE |
動作 |
1 |
1 |
1 |
0 |
非表示が静的に設定されていても、画面項目が表示されます。 項目内容が表示されます。 入力が静的に設定されていなくても、入力可能です。ただし、出力専用が静的に設定されている場合は、入力不可です。 |
1 |
1 |
0 |
0 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていなくても、入力可能です。 |
1 |
0 |
1 |
0 |
非表示が静的に設定されていても、画面項目が表示されます。 項目内容が表示されます。 入力が静的に設定されていても、入力不可です。 |
1 |
0 |
0 |
0 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていても、入力不可です。 |
1 |
1 |
1 |
1 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 項目内容は表示されません。 入力が静的に設定されていなくても、入力可能です。ユーザ入力は、アスタリスク (*) でマスキングされます。 |
1 |
1 |
0 |
1 |
出力専用が静的に設定されている場合を除き、非表示が静的に設定されていても画面項目が表示されます。 出力は、アスタリスク (*) でマスキングされます。 入力が静的に設定されていなくても、入力可能です。ユーザ入力は、アスタリスク (*) でマスキングされます。 |
1 |
0 |
1 |
1 |
画面項目は無効です。 静的属性に関係なく、画面項目は表示されません。 |
0 |
0 |
0 |
1 |
画面項目は無効です。 静的属性に関係なく、画面項目は表示されません。 |
項目が出力専用として静的に定義されている場合、設定INPUT = 1 による影響はありません。これらの項目については、常に INPUT は 0 です。アスタリスク (*) によるユーザ入力のマスキングは、ユーザパスワードを入力するために使用することができます。
項目を非表示にすると行全体が非表示になる場合、自動的に画面が小さくなります。ただし、静的 Dynpro 属性の実行時圧縮オフを選択することで、この属性を切り替えることができます。
REQUIRED
REQUIRED = 1 と設定すると、入力可能項目が必須項目になります。すべての必須項目に値を入力しないと、画面を終了できません。タイプ E の機能コード、および AT EXIT-COMMAND オプションを含むモジュールは例外です。
DISPLAY_3D
DISPLAY_3D = 0 と設定すると、入出力項目の 3 次元フレームが削除されます。DISPLAY_3D = 1 を使用して、出力専用属性が設定されているテキスト項目や画面項目に 3 次元効果を生成することはできません。
VALUE_HELP
VALUE_HELP を 0 または 1 に設定すると、入力ヘルプボタンがそれぞれオフまたはオンに切り替わります。
INTENSIFIED
INTENSIFIED = 1 と設定すると、入力項目の項目内容が黒から赤に変わります。出力項目の内容は、黒から青に変わります。
LENGTH
LENGTH コンポーネントは、入出力項目と出力専用項目に静的に定義された出力長 (表示長) よりも短い値に設定することができます。このコンポーネントを使用すると、これらの項目の出力長を短くすることができます。他の画面エレメントは、短くすることも長くすることもできません。
REQUEST
入力可能項目に REQUEST = 1 と設定した場合、PAI イベントにおける影響はユーザが項目内容を変更した場合と同じになります。すなわち、ユーザが実際に項目を変更したかどうかに関係なく、ON REQUEST または ON CHAIN-REQUEST を使用した条件モジュール呼出が実行されます。REQUEST は、自動的に 0 にリセットされます。
例
この例では、基本的な画面モディフィケーションについて説明します。プログラムDEMO_DYNPRO_MODIFY_SCREEN を使用して、可能なモディフィケーションをすべて示します。
動的な画面モディフィケーション
REPORT demo_dynpro_modify_simple. DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm. DATA flag(1) TYPE c. CALL SCREEN 100. MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
LOOP AT SCREEN.
IF screen-group1 = 'MOD'.
IF flag = ' '.
screen-input = '0'.
ELSEIF flag = 'X'.
screen-input = '1'.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE. MODULE cancel.
LEAVE PROGRAM.
ENDMODULE. MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'TOGGLE'.
IF flag = ' '.
flag = 'X'.
ELSEIF flag = 'X'.
flag = ' '.
ENDIF.
ENDCASE.
ENDMODULE.
Dynpro 100 の静的定義による次Dynpro は 100 です。この Dynpro は以下のようなレイアウトになります。
入出力項目は、ABAP ディクショナリの構造DEMO_CONN からコピーされています。下部の 4 つの入出力項目は、モディフィケーショングループ MOD に割り当てられています。
Dynpro 制御ロジックは以下のようになります。
PROCESS BEFORE OUTPUT.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
MODULE user_command_0100.
GUI ステータスSCREEN_100 で、機能コード TOGGLE が押ボタンとリンクされます。
プログラムが呼び出された際に、下部の 4 つの入出力項目は入力可能として表示されません。これは、最初に変数 flag に空白が含まれているためです。TOGGLE を使用して、入力可能ステータスのオン/オフを切り替えることができます。
LOOP AT SCREEN的更多相关文章
- 屏幕字段结构SCREEN的字段含义
在SAP屏幕中,一个字段就像.NET中的一个控件,这个字段对应一个SCREEN结构,就像控件的多个属性. SE11可以查看SCREEN结构中的字段,只是没有备注. 名称 长度 说明 NAME 屏幕字段 ...
- ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理. SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.PARAMETERS ...
- 选择屏幕(Selection Screen)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- sap screen design
定义屏幕: SAP 系统中的屏幕包含: 标准屏幕: 选择屏幕: 列表输出屏幕: 1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP ...
- ABAP screen
Instance One : SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-100. SELECTION-SCREEN BEGIN ...
- ABAP 订单-交货单-发货过账自动完成 案例
*&---------------------------------------------------------------------* *& Report ZSDR006 ...
- SAP 直营验单
*&---------------------------------------------------------------------* *& Report ZSDR005 ...
- 生产排产表DL-ZPPR002
*&---------------------------------------------------------------------* *& Report ZPPR002 * ...
- ABAP屏幕设计
转自 http://www.cnblogs.com/aBaoRong/archive/2012/06/05/2536591.html abap 屏幕控制 ******************** 屏幕 ...
随机推荐
- netstat 和 lsof 查看网络状态
netstat和lsof都是linux下的工具,可以用于查看系统的网络状态. netstat netstat可以打印 网络连接,路由表,接口统计数据,还有多播和masquerade连接相关的东西(不熟 ...
- simple2.py
#coding: utf-8 import xlsxwriter workbook = xlsxwriter.Workbook('chart.xlsx') worksheet = workbook.a ...
- linux shell中 if else以及大于、小于、等于逻辑表达式介绍
在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下, 比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注 ...
- 课堂笔记:HTML---------一般标签、常用标签
HTML:超文本标记语言 HTML标签---成对儿出现的是双标签元素,单个儿出现的是单标签元素 一.通用标签 1.格式控制标签 <font></font> 文字 color-文 ...
- 小练习——关于循环条件---for
1.打印100个“非常”的句子 static void Main(string[] args) { //打印20个“非常" Console.WriteLine("打印100个非常& ...
- 【转】不错的linux下通用的java程序启动脚本
虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...
- ids for this class must be manually assigned before calling save():
Caused by: javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: i ...
- o'Reill的SVG精髓(第二版)学习笔记——第八章
第八章:图案和渐变 要使用图案,首先要定义一个水平或者垂直方向重复的图形对象,然后用它填充另一个对象或者作为笔画使用.这个图形对象呗称作tile(瓷砖). 下面可以把SVG绘制的二次曲线作为图案. & ...
- Java面向对象知道这些就够了
面向对象 面向对象是一种思维方式,相对于面向过程而言的. 面向过程在流程中关注动作执行的每一个细节 — 自己动手做 面向对象重点找这个对象,只要找到了对象,那么这个对象所具有的功能就能够被使用 — 找 ...
- Oracle客户端与Toad、plsql developer安装
(一)oracle client与oracle instant client比较 当我们要使用Toad.plsql developer等工具连接数据库时,首先需要在自己的电脑上安装oracle cli ...