用法

主に、画面の属性を変更させるために使用する。

照会モードでは入力不可とするが入力可能モードでは入力可能とする、ラジオボタン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的更多相关文章

  1. 屏幕字段结构SCREEN的字段含义

    在SAP屏幕中,一个字段就像.NET中的一个控件,这个字段对应一个SCREEN结构,就像控件的多个属性. SE11可以查看SCREEN结构中的字段,只是没有备注. 名称 长度 说明 NAME 屏幕字段 ...

  2. ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段

    Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理. SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.PARAMETERS  ...

  3. 选择屏幕(Selection Screen)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. sap screen design

    定义屏幕:     SAP 系统中的屏幕包含:         标准屏幕:         选择屏幕:         列表输出屏幕: 1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP ...

  5. ABAP screen

    Instance One : SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-100. SELECTION-SCREEN BEGIN ...

  6. ABAP 订单-交货单-发货过账自动完成 案例

    *&---------------------------------------------------------------------* *& Report  ZSDR006 ...

  7. SAP 直营验单

    *&---------------------------------------------------------------------* *& Report  ZSDR005 ...

  8. 生产排产表DL-ZPPR002

    *&---------------------------------------------------------------------* *& Report ZPPR002 * ...

  9. ABAP屏幕设计

    转自 http://www.cnblogs.com/aBaoRong/archive/2012/06/05/2536591.html abap 屏幕控制 ******************** 屏幕 ...

随机推荐

  1. c++下各种编码格式转换的方法

    1.利用c++11新特性 std::wstring_convert配合std::codecvt模板类 作者:Gomo Psivarh链接:https://www.zhihu.com/question/ ...

  2. BZOJ4566:[HAOI2016]找相同字符(SAM)

    Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别 ...

  3. 服务器安装anaconda

    SSH连接服务器可以用putty 网址:https://repo.continuum.io/archive/ 下载安装脚本 wget https://repo.anaconda.com/archive ...

  4. 行高 line-height

    一.行高的定义 line-height(行高):两行文字基线之间的距离 1.什么是基线? 2.为何是基线? 3.需要两行吗? 1.什么是基线? 我们上学的时候都用过,抄写英文字母的时候.其中有一条红线 ...

  5. linux服务基础之CentOS6编译安装mariadb

    1. 下载mariadb https://downloads.mariadb.org/mariadb/+releases/ 2. 解压到指定目录 # tar xf mariadb--linux-x86 ...

  6. java实现按拼音排序

    List<WaPayFileVO> list =(List<WaPayFileVO>) dao.execQueryBeanList(pagesql, params.toArra ...

  7. An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL'

    An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL' 下载 ...

  8. tomcat解决端口号占用问题

    1.第一种方法 更改tomcat自己的端口号: conf 目录下 找到 server.xml,把默认的8080端口改个别的试试,tomcat 一般端口号改的要大于 6000,. 2.第二种方法 关闭端 ...

  9. 数据库优先生成EF CRUD演示

    ①准备我们的数据库: Northwind ②新建 实体数据模型,由数据库优先创建 ③创建控制器,这里我们只针对了Customers这张表做演示,实际会复杂的多 注:你可以把上面两步合成一步来写,创建控 ...

  10. 表达式过滤器 lowercase

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...