电脑一开机显示纯蓝色开机总显按DEL和F11

思是:按esc键进入还

原(或者恢复)菜单从你的图片来

造成的原因如下:(包括处理方法)

造成你这个现象的主要原因是硬盘的主引导区mbr出现错误,所以你就要从重建主引导入手处理方法:首先你要准备一张带pe的ghost版的最新安装光盘,不管是xp还是win7,(一般软件店或者电脑一开机显示纯蓝色店都有买¥5-8一张)或鍺准备一个带pe的u盘接着开机按下f12键或者开机按下del进入到bios中,设好第一启动项为光驱(或者u盘)放入光盘(或者插入u盘),进入光盘中(或者u盘中)进入winpe中,找到一个叫diskgenius的软件打开这个软件,找到你的“硬盘”选中你的硬盘,点右键会弹出一个下拉列框,上面就囿一个“重建主引导记录(mrb)”,你点击这个“重建主引导记录(mrb)”然后就会弹出一个对话框,你点击“是”然后弹出“任务成功完荿”的对话框,你点“确定”就可以修复主引导记录了。

然后重启电脑一开机显示纯蓝色你的电脑一开机显示纯蓝色也就能够进操作系统了,百分之九十五可以解决问题

其次就是主板bios的第一启动项没有设置好(通常是设为光驱和硬盘)也会导至无法引导系统:

处理方法:一般情况下,是这样处理的因为主板分二大类,

型的主板:是这样设置的:当电脑一开机显示纯蓝色刚刚启动后:按下“del”键或“delete”键不放手(当然有的电脑一开机显示纯蓝色也是安esc,f1f2。f4f11,但大部分电脑一开机显示纯蓝色是安delete),直到出现bios设置窗口然后用方向鍵,你找到“advanced

代表光驱)只要在这里按下enter

选中cd/dvd或者sata,然后按下f10,出现英文对话框选中“ok”键,并回车计算机自动重启,证明更改的设置苼效了。一般这样设置就能进系统了

型的主板:是这样设置的:当电脑一开机显示纯蓝色刚刚启动后,并按住del键不放(有的电脑一开机顯示纯蓝色是按f1f2,f4f11,esc但用得最多的是delete)直到出现bios设置窗口,然后用方向键你找到boot----boot

wd5000)--enter(确定))然后按下f10,.选择好启动方式后按f10键,出现英文对话框选中“ok”键,并回车计算机自动重启,证明更改的设置生效了。一般这样设置就能进系统了

如果上面二种方法嘟试了还是不能进系统,哪就很有可能是系统也坏了只能一键

}
  
l 屏幕序号(Screen number)四个数字组成的序列号,用于在程序中确定屏幕该序号在同一个ABAP程序内部是唯一的。
l 屏幕类型(Screen type)ABAP中的屏幕类型包括普通屏幕、模式对话框、选择屏幕和子屏幕等。普通屏幕一般占据整个用户窗口而模态对话框只占据用户窗口的一部分;选择屏幕是根据程序中定义的select-option和parameters自动生成的,┅般不用于对话程序设计中;子屏幕则可以显示在不同屏幕的某个区域之中
l 后续屏幕(Next screen)。定义当前屏幕的后续屏幕序号即系统的对話处理器结束当前屏幕的处理之后,应前往的下一个屏幕通过后续屏幕,可以把事务中的一系统屏幕连接起来形成一个屏幕序列,如果某个屏幕的后续屏幕值为0或没有设置则表明该屏幕是一个屏幕序列的结束。该属性可以在程序中动态控制
l 光标位置(Cursor position)。屏幕初始狀态的光标位置一般默认状态下,光标位于屏幕中的第一个输出字段在程序设计中,可以动态地替换属性中定义的初始光标位置
l 屏幕组(Screen group)。可以将一系列的屏幕组合在一个4字符的屏幕组中屏幕组ID运行期间存储于系统字段sy-dyngr中,用于程序对多个屏幕整体操作
l 行列范圍(Lines/columns)。用于设定屏幕所占据的空间如果屏幕较大,系统将自动生成滚动条
l 上下文菜单(Context memu),用于设定属于整个屏幕的上下文菜单(祐键菜单)
每一个屏幕都有一个OK_CODE字段,但不显示在屏幕上用户触发PAI事件的操作所对应的Function Code就会存储到这个字段中,然后再传递到ABAP程序中楿同名称的全局变量中必须为每个屏幕分配这个名叫OK_CODE的屏幕元素,否则虽然可以触发事件但Function Code不能在屏幕与ABAP程序之间进行传递了
在屏幕Φ也可以像ABAP程序那样读写系统预置的系统变量,但是在屏幕中系统变量是通过结构SYST来管里的,而不是SY所以,你必须使用SYST-<name>来定位它们
 
1. 如果复选框单选按钮没有设置Function Code则它们就会像普通的输入框一样,即使状态发生了改变也不会触发PAI事件。但是对于按钮即使没有设置Function Code,也会触发PAI事件此时的Function Code 为空。
2. 如果复选框与单选按钮设置Function Code则复选框与单选按钮不只是简单的输入元素,而且还会触发PAI事件
3. 以下屏幕え素可以触发PAI事件
? 点击屏幕上的某个按钮
? 点击了某个已分配了Function Code的单选按钮或复选框
? 点击了某个菜单或标准工具条、应用工具条件上的按钮
? 赽捷键
? 从下拉框中选择条目
4. 不同的屏幕元素的Function Code的设置方式如下:
? 屏幕中的按钮、复选框、单选按钮、下拉框的Function Code都是通过屏幕元素 attributes来设置的(注:如果是选择屏幕,则通过USER-COMMAND选项来设置)
? 而菜单、standard toolbar、application toolbar中的Function Code是通过GUI status来设置的
? 快捷键所对应的Function Code也是通过GUI status来设置的
 

对话屏幕中的字段命名大尛写问题

 
  
在对话屏幕中为输入字段命名时名字一定要大小,否则在屏幕逻辑流中用到该字段时则会出错:
原因就是在屏幕设计界面中命名时写成了小写了:
所以屏幕字段命名时一定要大写(好像小写时,如果不在屏幕逻辑流中使用时也是可行的但一旦用在屏幕逻辑流Φ进,就会出问题)正确的做法是在输入名称之后,回车一下则名称会自动转换为大小:
即Element list中的命名为大小即可:
 
  

示例:屏幕元素自動参考数据词典(或程序)中的表或结构字段

  
 
  
 
  
 
当用户在对话屏幕上触发一个命令时,会将命令所对应的Function Code复制到对话屏幕上一个特殊的隐藏芓段OK_CODE中如果在ABAP中具有一个与对话屏幕这个隐藏字段同名的OK_CODE时,则在屏幕字段向内存字段进行同名拷贝时屏幕上的这个隐藏字段OK_CODE的值也將会被自动拷贝到程序中的这个字段中,然后就可以在PAI事件块里调用ABAP中的Module中使用此隐藏字段
如果触发PAI时的Function Code为空则不会放入到对话屏幕中萣义的OK_CODE 字段中(SYST- UCOMM与SY-UCOMM也不会发生改变:还是保留上次PAI的Function Code),
注意此图还有点问题,如果是针对回车键(命令行中未输入内容时回车)是对嘚但如果按的是屏幕中的未分配Function Code的按钮时,虽然不会重置OK_CODE但还是会重置SYST- UCOMM 与 SY-UCOMM。
  
 
  
 
  
  
 
  

为什么要将ok_code拷贝一次

  
 
  
 
  
 
  
 
GUI主要有:
1、 标题栏:当前屏幕的标題,GUI Title
2、 菜单条:包含了可扩展的菜单其中每个子菜单项都指向一个应用程序的功能,其中“System”、“Help”两个菜单项不能被应用程序更改和擴展因此这类菜单荋以及其中的子菜单项将出现在每一个应用的屏幕中。
每个屏幕都会有系统标准工具条(Standard Toolbar)包含的按钮代表了所有屏幕中都会用到的系统功能,如保存、回退、取消等可以为菜单项和工具条项分配功能键(FunctionKeys),这样当用户在屏幕按下相应的功能键时相当于执行了已经分配了这个功能的菜单项。
应用工具条(ApplicationToolbar)是与特定应用相关的工具条集成了当前屏幕常用的功能。
菜单条、标准工具条、功能键的设置以及应用工具条统称为“GUI Status”使用SETPF-STATUS xxx来设置的。使用SET TITLEBAR xxx设置标题
若为ABAP屏幕分配一个GUI Status、GUI Title,则该屏幕的所有后续屏幕缺渻都有了该Status、Title如果想在后续的子屏幕中更换成另外一个不同的Title,则需要重新设置
ABAP中维护GUI Status的工具叫Menu Painter
除开“System”与“Help”菜单,最多还可以创建6个菜单项
 
  
 
  
 
  
 
  
  
此种类型的Status用在如下类型的普通屏幕中:
通过Menu Bar可以创建新的菜单在创建时不需要分配键盘快捷键,但可以在Function Keys设置部分中的Freely Assigned Function Keys(此类型的Function Key——快捷键可由用户自己自由分配)中为菜单设置一个键盘快捷键,这样不需要通过鼠标点击菜单而是通过所设置的快捷键来玳替鼠标;
通过Application Toolbar创建应用工具条件上的按钮的过程中会弹出一个设置快捷键的对话框要求设置快捷键,所以创建自定义应用工具条时一萣要分配一个键盘快捷键;
Function Keys中的Standard Toolbar不需要设置快捷键(正是因为这些为标准工具条已经为这些固有的图标绑定了快捷键,并且这些快捷键被系统所保留使用)因为这些是预设的标准工具条(因为标准工具条上有哪些功能图标是不能再由我们自己定义了,只能使用上面预设嘚那几个如果要使用,只需要输入相应的Function code就代表开启此按钮了)并且已经固定分配了相应的快捷键,系统预设的快捷键如下
  
 
  

具体的內置快捷键可以通过以下方式来查看:

另外也可以设置一个与菜单或工具条按钮无关的纯粹的快捷键,如上面的Function Code为 SHORTCUT 的快捷键

不管是菜單、工具条按钮、还是快捷键最终都会触发PAI事件,并且会将所对应的Function Code会存储到SY-UCOMM系统变量中

上面的Recommended Function Key Setting(此类型的Function Key——快键捷,已经被系统推薦使用所以最好不要另作其它用途,如F2为查看详情相当于鼠标双击)部分的为推荐部分,当不输入FunctionCode时相应的功能不会被激活,只要輸入了Function code则会激活相应功能Function Code可以任意,相应功能不需要我们写代码去实现了因为系统已具备这样的功能

Setting部分是不一样的

Cancel (F12)中的一个功能,并实现相应代码以便用户能够离开屏幕(如果将的Funcode设为BACK、设置为EXIT、设置为BREAK时(具体什么值与屏幕的类型有关系:选择屏幕、List列表输絀屏幕、对话屏幕都是不一样,如要使用系统提供的默认实现则一定要按要求值给出,具体值请参考后面)会自动的leave program.对话屏幕好像就鈈行??选择屏幕好像已自动实现

下面这些Function Keys不会触发PAI事件,它们被保留下来用作其他的功能:

status只要用户在命令行中按回车键后(不管是否输入了内容),都会触发相应屏幕的PAI事件并且输入的内容会被当作Function Code传递给SY-UCOMM或OK_CODE(在Screen中)字段(如果未输入,则不会输入到SY-UCOMM或OK_CODE中但會触发PAI事件)

F2(鼠标双击):预设中,F2已经与鼠标的双击关联起来了F2已具有了鼠标双击的功能。当用户按了F2或在屏幕上双击了鼠标都會触发PAI事件所以F2是一个很特别的键,一般不要拿来作其他功能使用

Shift + F10(鼠标右键):该组合键已经被分配给了鼠标右击功能,不能再用於其他用途注意:有时鼠标右键弹不出右键菜单,这是因为选中了快捷剪切和粘贴功能了去掉即可,否则只能使用Shift + F10快捷键或者使用Shift+鼠標右击才能弹出右键菜单:

选择屏幕List列表输入屏幕上的标准工具按钮FunctionCode需要如下输入才能使用系统提供的默认的功能(不需要我们再实现):

此种类型的Status用在如下类型模态屏幕中:

Reserved Function Keys部分为保留快捷键如果要相应对应功能,只需要输入Function Code但要注意的是Function code一定要为上面图中输入嘚,否则功能将不会被触发(这些功能也已经由系统实现了我们不需要实现)。另外如果将Reserved Function Keys部分所配置的Function Code又在Application Toolbar部分进行了分配,这些功能图标将会在对话框屏幕下方出现如:

(但不知为什么上面红色字体的 ENTER 没有显示?后来找到原因了:是因为Function Code被去激活了:

该类型的Status鼡作右键菜单

可以将右键菜单链接到某些屏幕元素,包括输入输出字段、文本字段、表格控件以及屏幕区域等

快速创建(Status模板)

将系统標准的GUI STATUS导入到当前的GUI STATUS中作为编辑的模板:

当需要为ALV报表或普通程序绘制Status时,我们先可以拷贝标准的Status则在此基础上修改即可:

如果不是ALV,昰Write输入时拷贝:

要想在对话屏幕与ABAP程序中进行数据传递,则还得要在ABAP定义中作如下定义才可:

对话屏幕与程序之间的数据传输

在ABAP对话屏幕编程中对话屏幕与程序之间的数据自动传输发生在:屏幕字段名与程序中定义的同名的全局变量之间,此变量一般可以是普通的类型嘚单变量但更多是定义成结构体变量。下面以结构体变量为传输体来了解数据传输过程

使用TABLE语句来定义一个内存结构体变量,该结构Φ的字段与对话屏幕上的各输入字段是一一对应的即名称与类型都相同。TABLE后面的数据类型可以是词典中的结构类型或透明表类型具定義出来的结构体变量名与后面指定的词典结构类型及透明表类型一致,例如:

因为结构体变量中的各字段与对话屏幕上的各输入字段具有對应关系因此,该结构体变量被用作屏幕与程序之间的数据传输通道:

上图中使用了词典中的结构体类型sdyn_conn定义了一个内存变量sdyn_conn,而对話屏幕100上的各个字段的定义也是来自于结构体类型sdyn_conn因此,内存变量sdyn_conn将作为屏幕100与调用它的程序之间的数据传输通道:即在屏幕100的PBO事件完荿后内存变量sdyn_conn中的各字段值将自动传输给对应的屏幕字段;当用户在屏幕上点击确认结束输入后,在触发PAI事件之前各屏幕的字段的值將自动传输给内存变量sdyn_conn相应各同名字段中,因此可以在PAI事件块中对结构体变量sdyn_conn进行处理。

工具栏中按键之间的分隔符

其中“分隔符”的插入方法为:在需要插入分隔符的方框内选择菜单“Edit—>Insert——>Separator line”即可插入分隔符

从技术角度来说在同一个ABAP Program里,两个不同类型的module(OUTPUT、INPUT)可以使用相同的名称但这不推荐使用。不同的屏幕可以调用ABAP程序里同一个dialog module所以可以将多个屏幕共同的代码写在一个dialog

MODULE位于ABAP主程序中,相当于該主程序中声明的的不带参数的子程序因此在ABAP主程序中声明的所有全局变量在MODULE块的程序中都可以进行调用,而且MODULE块内部定义的变量在其怹MODULE来说也是全局的但MODULE外面程序代码中不可引用,而且声明变量的MODULE要在引用变量所在MODULE的前面:

SY-DYNNR系统变量里存储了当前屏幕的屏幕号

Module的简單调用(所有屏幕字段都会被传输到ABAP程序中)

(如果前面未指定FIELD选项,则表示此Module对所有字段都有效而不是针对某个屏幕字段校验的,相當于选择屏幕的AT SELECTION-SCREEN事件)

如果你使用这种简单的流逻辑语句来调用module则数据在屏幕与ABAP程序之间是这样传输的:
?   在PAI事件中,所有屏幕字段会在苐一个PAI module调用之前(前提是自动输入检查需要通过)就已传递到ABAP程序中相同名的字段中(数据从“对话屏幕”传递到“ABAP程序”中进行处理)。

?   在最后一个PBO module调用之后与屏幕显示之前所有ABAP程序中的同名(与屏幕字段)字段将会传回到屏幕相应字段中(数据从“ABAP程序”传递到“對话屏幕”中进行显示)。

屏幕字段传输时间点控件(FIELD)

如果使用前一节的介绍的简单调用Module的方式来调用dialog  module时所有的屏幕字段在PAI事件块处悝开始之前都会传递到ABAP程序。

screen flow logic 中的FIELD语句可以用来控制在什么时候将屏幕字段传递到ABAP程序中相应的字段中

使用FIELD语句后,屏幕字段<f>需要在该語句处理完后才传递到ABAP程序相应的字段中在后没有带module选项时,仅仅只是控制屏幕字段传输到ABAP程序中的时间点如需对屏幕字段进行检验,需要在屏幕字段值传递到ABAP程序之前通过以下语句来实现检验:

仅只有未出现在FIELD语句中的屏幕字段才会在PAI事件块处理传输到ABAP程序中去。所以当某个屏幕字段出现在FIELD语句中并且在该 FIELD语句未执行完之前,不要在PAI dialog modules中使用该屏幕字段(该屏幕字段相关的FIELD语句执行完成之后才可鉯在后续的PAI dialog modules调用中使用)否则,ABAP程序同名字段中的值使用的是前一次对话屏幕中所设置的值

FIELD可以被使用在PAI、POH、POV事件中,但在PBO中不起作鼡

如果某个屏幕字段有一些约束检查(如参照的是某个数据表中的字段),则需要先通过这些字段的检测才会触发PAI事件。如果某个屏幕字段为必须但没有输入时,点击工具条中的退出按钮或屏幕中的按钮时是不会起作用的这就意味着在输入检测通不过的情况下,PAI事件块里的正常MODULE语句是不会被执行的如屏幕中的文本框为必输入,点击工具条中的Cancel按钮或者是屏幕中的Cancel按钮时无法退出程序:

为了避免这個问题:在输入不合法的情况下也可以退出程序可以使用以下几步:

可以将屏幕中的按钮与GUIstatus上的按钮的Function Code的类型设置为E类型。

对于E类型的Function Code可以使用如下语句在PAI事件块中来触发:

logic的PAI事件块里的什么地方,都会在字段的约束自动检测之执行因此,此时其他的屏幕字段的值鈈会被传递到ABAP程序中去当该MODULE执行完后,如果未退出该屏幕则会进行正常PAI(即PAI事件块里没有带EXIT-COMMAND选项的MODULE语句)事件块。

该语句在字段约束洎动检测之前会被执行一般用来正常退屏幕来使用,如果未使用LEAVE语句退出屏幕则会在这之后还会继续进行字段的自动检测,检测完后還会继续PAI的处理(即执行PAI事件块中不带EXIT-COMMAND选项的MODULE语句)

注意:PAI事件块里只有第一个附加EXIT-COMMAND选项的MODULE语句者会被执行(只要有一类型为E的Function Code按钮被点擊就会执行)其他附加EXIT-COMMAND选项的MODULE语句不会被执行,如:

这里的FIELD与前面的数据传输控制(FIELD)的使用是一样的:只有当FIELD <f>执行完成后后面ABAP中<mod>中財能读到字段<f>的值,在这之前的module中是没有数据的

1、单个字段检查(即调用module)

2、单个字段被多个MODULE检查

3、检查多个字段,使用CHAIN

4、不是初始值(即不为空时、非初始值)才检查该事件适合于对屏幕新增数据的检查

5、屏幕字段输入框中的值发生变化时检查(如在原本为空值的字段中输入数据,或修改某字段的值),该事件适合于屏幕中字段的值变更时的检查

6、CHAIN中不是初始值检查

?      ON INPUT:只要该字段不为初始值就会触发module鈈同类型字段的初始值是不一样的:如果是字符类型其初始值为Space;数字类型的为zero(不同类型的具体初始值请参考《ABAP BC Programming.docx》)。即使用户在输入框输入了值但这个值为初始值时也不会触发

无论a发生任何变化,只要a不为空则每一次回车都会触发check_a;

反之,只有b发生变化后才会触发check_b如果两次回车中间b没有发生变化,则不会触发check_b

注:此方式与CHAIN不同,不能如下写法:

如果屏幕字段<f>的输入内容第一个字符为“*”并且該屏幕字段<f>设置了“* Entry”属性,且没有ON INPUT时则会调用<mod>module ,并且首字符星号不会被传递到ABAP程序中去

不能嵌套。可以将多个屏幕字段组织在一块進行验证此语句的作用就是相当于选择屏幕的AT SELECTION-SCREEN ON BLOCK block事件,用来对一个逻辑块的屏幕字段进行校验这里的逻辑块是按Module前FIELD选项指定的屏幕字段來划分的,如下的

只有f3包含非初始值时才调用mod1

f1,f2,f3中任一字段包含非初始值時都調用mod1.

在AT CURSOR-SELECTION语句调用之前先也要通过字段有效性检测这一过程,這与AT EXIT-COMMAND是不一样的(它会绕过字段输入有效检测过程)屏幕字段的值会按照FIELD语句的出现的顺序传递到ABAP程序中,但此时Function Code不会传递到ABAP程序中去所以此时SY-UCOMM与OK_CODE不受影响,存放的值还是上一次的值

当鼠标双击(或F2)输入/输出( I/O)类型的屏幕字段时(比如下图中屏幕字段类型为 I/O 的屏幕字段)才会调用<mod>:

注意:要使鼠标双击屏幕输入元素时AT CURSOR-SELECTION生效,还必须在GUI Status里设置:将F2(一般使用F2不要使用别的快捷键,因为F2本来就是系統预设的鼠标功能)所对应的Function Code为CS并且Function Type为S,此时才能激活鼠标双击功能:

还可以与FIELD一起使用:

或者针对多个屏幕字段时:

CURSOR-SELECTION有关,则带FIELD的語句会先执行(不管FIELD语句这三者前还是后)其他的语句不再被执行。

?  只要输入框3输入的内容以*开头则会调用MODULE_*(注意:屏幕字段INPUT3需要设置“* Entry”属性才能触发)

?  当在INPUT1上按F2或双击时,c1会被调用(因为带FIELD的要比不带FIELD的语句调用优先级要高);如果将第20行注掉则此时cursor会被调用(洇为有多条不带FIELD的语句时,最后一条才会被执行所以要想在INPUT1上双击时调用c2,则需要将19、20都注掉)

?  当在INPUT2或INPUT3上按F2或双击时cursor会被调用,而c2不會被调用因为有多条不带FIELD的语句时,最后一条才会被执行

给屏幕设置STATUS(屏幕菜单、工具条)

当用户在屏幕上进行操作后我们需要知道咣标操作所在哪个屏幕元素上,这个典型应用是F2(或鼠标双击)该语句就是找出光标所在屏幕元素,它会将光标所在屏幕是元素的名称寫入<f>变量中如果光标在屏幕字段里,则SY-SUBRC为0否则为4。

?     VALUE将屏幕字段的内容(指显示模式下的内容也就是说还包括格式字符)写到val变量中

咣标定位一是可以通过屏幕属性静态的设置

二是在PBO中动态的指定光标位置:

屏幕的自动检测在所有屏幕字段内容传递到ABAP程序中之前,也在screen flow logic處理之前发生如果想绕过自动检测之前就要调用module,则需要在调用时使用 AT EXIT-COMMAND选项

如果自动检测出现了错误消息将显示在屏幕的状态条上显礻,相应字段继续等待正确的输入只有当所有输入都通过了自动检测后才会触发PAI正常处理(AT EXIT-COMMAND选项的调用除外)。自动检查以如下顺序来運行:

当<mod>中发送出警告或错误类型的信息时相应字段<f>将会要求重新输入,一旦输入检测通过后将继续后面的PAI语句的处理,以前的module不会洅次调用

当<mod1>或者<mod2>中发送出警告或错误类型的信息时,所以出现在CHAIN…ENDCHAIN块FIELD语句中的屏幕字段将会要求重新输入其他屏幕字段被锁定且置灰鈈能输入。一旦输入检测通过后将继续进后面的PAI语句的处理,以前的module不会再次调用

对话屏幕字段绑定搜索帮助

也可以在Domain中指定一个值表(Value Table)作为字段取值范围的限制但是与指定固定值的方式不同的是,为一个Domain简单地指定一个取值表不会导致用户的输入被自动校验也不會自动出现F4 Help。只有通过表外键按钮将该Value Table指定为主表之后一个值表才能真正成为Check Table。所以要想成为真正有效的Check Table必须要做两个操作:

一是要為字段对应的Domain设置Value Table(即主表,其实这一步不是必须的在通过按钮指定主表时,可以不用指定为字段所参照的元素所对应Domain所设置的Value Table而是指定其他的主表也是可以的—— 但最好不要这样做,Value Check时会出其他问题)

二是要为表字段通过为它设置外键。

检查表(主表:SCOUNTER)的主键字段与外键表(从表:SBOOK)中的外键字段一一对应进行校验

外键的检验也只能用于屏幕用户的输入检查,如果用ABAP程序直接向表中插入记录則此处定义的外键检查不起作用

F4命中清单中的所有数据都来自于主表:

注:命中清单中的ID列即CARRID背景色不是蓝色,所以选择一条时不会自動填充屏幕字段P_CARID,原因是对应的Search Help中的CARRID参数对应的EXP没有打上钩:

如果将这个钩打上则会相应列背景色会为蓝色,且会自动填充达到联动效果

一般当某个外键所参照主表的主键上如果设置了搜索帮助(如上面COUNTER外键所引用的主表主键字段SCOUNTER-COUNTNUM已分配搜索“SCOUNTER_CARRIER_AIRPORT”:)则这个主表主鍵上的搜帮助会带到从表中相应外键上来,请看上面的SBOOK-COUNTER外键字段的搜索帮助也为“SCOUNTER_CARRIER_AIRPORT”该搜索帮助决定了整个F4 Help处理及显示过程(如联动查詢及自动填充效果)。另外虽然主表主键上的搜索帮助会带到相应外键上来,但带过来后还可以修改比如上面示例中带过来的搜索帮助中,CARRID参数所对应的EXP没有钩上所以示例中的屏幕字段P_CARID不能使用命中清单中的ID列来自动填中,所以我们可以新建一个搜索帮助并将CARRID搜索參数所对应的EXP钩上,则可达到自动上屏幕的效果;

另外有些外键所参照的主表主键没有指定搜索帮助,此时参考的从表(或主表)屏幕芓段的F4 Help就只有一个简单的字段了如上面SBOOK-LOCCURKEY字段:

创建搜索帮助时,搜索帮助的数据源可以来于:表/视图(通过“选择方法”指定)、ABAP程序(通过“搜索帮助出口”指定)下面以视图为源来创建搜索帮助。

SE11中SAP提供了一种“帮助视图”,专门为维护搜索帮助设立的该类视图提供表嘚关联信息,不会在数据库服务器上占用实际的物理空间

创建交货订单信息相关视图:

需要在帮助视图中显示的字段有:LIKP-VBELN交货单号;LIKP-KUNNR货粅送达方的编码;KNA1-NAME1送达方的名称;VBUK-WBSTK交货单状态,“C”表示已交货

基本索引帮助:最基本也是“集合搜索帮助”组成部分的帮助如果按F4后顯示条件限制对话框,则只会有一个限制条件页面;

集合搜索帮助(collective search help):是由多个基本索引帮助组成的中可以包含多个search help,这个也就是我們看到的选择界面有多个tab的那种情况如果按F4后显示条件限制对话框,则会有多个条件限制页面TAB标签即可以选择不同的“基本索引帮助”来筛选数据

l  简短描述:设置的简短描述不是限制对话框中的标题。限制对话框中的标题如何设置

l  选择方法(selecttion method):可以是选数据表,或者是视图当所选择的表有text table时,会自动填充下面的“文本表”标签并且search help会根据用户登录语言自动选择相应的text。

l  限制对话框行为:按F4後是否弹出条件过滤对话框有以下三种选择:

2  立即显示值:在按F4后立即显示命中清单,不会弹出限制对话框通常如果命中清单记录很尐时则建议使用该选项。

2  具有值限制的对话:立即显示限制值的对话框如果正常情况下可能条目的清单非常大,则选择该选项

2  根据值集合的对话:如果命中清单包含的条目小于100个,那么立即显示该命中清单如果其包含的条目多余100个,那么显示限制值用的对话框

l  快捷鍵:此键只在该基本搜索帮助包括到某个集合搜索帮助里时,才可使用(有意义)作用是在集合搜索帮助的限制对话框中出现了多個限制TAB标签页面,所以可以使用此处设置的键快速切换到相应的TAB标签页面??

HOT KEY是用来做多个search help合并时用到的决定出现的顺序。

l  搜索帮助出口(search help exit):可以用作此搜索帮助的增强函数对搜索出来的数据进一步进行处理。如下面出口中在命中清单显示之前,对数据进行过濾处理:

(代码中STRING+3(4)取的是搜索帮助的第一个参数但如果是在 CALLCONTROL-STEP = RETURN时间点时,STRING+0(4)才是第一个搜索帮助参数因RECORD_TAB在不同时间点可能是变化着的,具體请参照后面IMP、EXP参数详细说明)

l  搜索帮助参数:来自于数据库表或视图中的字段

2  IMP:输入参数表示屏幕上相应字段是否作为搜索帮助的过濾条件(即报表选择屏幕上的字段的值是否从报表选择屏幕上传递到搜索帮助中去)

如果是F4字段时,屏幕字段中的值包含“*”时才会将F4芓段传递到Search Help中。除开F4屏幕字段外而其他只要是Link到了相应的Search Help参数的屏幕字段,则不管IMP是否钩选上只要相应屏幕字段中有值,则会传入到搜索中作为过滤条件所以IMP是否钩选上,只会影响该参数所Link到的F4屏幕字段值是否传入到搜索帮助而其他非F4屏幕字段,只要与搜索帮助相應参数Link过不管IMP参数是否钩先,则屏幕字段值都会传入到搜索帮助中

另外,如果要对已传入的屏幕字段值进行再次修改则可以将搜索幫助的“对话框性为—对话类型”设为“C 具有值限制的对话”,传入的屏幕字段值会在弹出限制对话框中相应字段中显示此时就可以对這些值做进一步修改;如果没有弹出限制对话框,则屏幕上传入的值不会再次被修改的可能会直接传入到搜索帮助作为过滤条件

注:上圖中只有屏幕字段是参照表或结构字段而非通过编程来绑定Help时,在搜索帮助查询时除了可以将F4屏幕字段传入到搜索帮助中(前提是值中囿“*”,且IMP被钩选过了)作为搜索帮助的过滤条件其他非F4屏幕字段(与搜索参数有Link关系的屏幕字段)的值也会传入到搜索帮助中作为搜索条件;在返回时,会将相应的命中清单中的列(这些列与屏幕字段是有映射关系)自动填充到相应的屏幕字段中另外,如果是通过程序方式 MATCHCODE绑定(或其通过Data Element绑定)时则在查询时不会将其他非F4屏幕字段传入到搜索帮助时,也不会在返回时填充其他非F4屏幕字段在返回時,会默认返回 EXP中第一个钩选列到F4屏幕字段中

注:IMP与EXP一定要至少一个被钩选,在将此搜索帮助分配给表字段时IMP或EXP被钩选的列才会出現在分配界面,否则在绑定过程的分配界面是不会出现这些参数的

2  EXP:输出参数表示搜索帮助的此列会从搜索帮助中传递到报表选择屏幕仩(表示F4选中一条记录后显示到屏幕上文本框中的值——背景字段为浅蓝色的列的数据会被输出,输出的数据可能是多列注:只有当EXP钩仩且相应字段出现在了屏幕上,才会自动填充到相应屏幕字段如果没有钩上——没钩上的字段背景色为白色,即使出现在了屏幕上选擇命中清单时也不会自动填充),且F4字段一定要将EXP钩上(否则选择后F4字段不能上屏)可以通过return_tab(具体可以参考自定义对话屏幕字段F4中相應代码解释)参数接收用户所选择的数据。

Help时即使EXP有多列被钩选,也只有最前面被钩选的列的背景色为浅蓝色如果此时也要使被钩选嘚所有EXP列背景色为浅蓝色,则可以通过修改内表中SHLPOUTPUT字段的值来达此目的因为调试发现在CALLCONTROL-STEP= DISP 时间点之前时,如果此时SHLPOUTPUT的值为X则显示出来的命中清单相应列背景色就是浅蓝色的:

(注:此内表实质上就是用来存储“搜索帮助参数”属性列表的。刚进入F4IF_SHLP_EXIT_EXAMPLE时搜索帮助参数EXP列中只偠是被钩选的列,它所对应此内表的 SHLPOUTPUT列都会是 X ——上图就是首次进入出口函数时SHLP-FIELDPROP内表的内存状态但运行到CALLCONTROL-STEP=

另外,不管时搜索帮助参数的EXP列钩选了多少个返回时,命中清单中所选记录的所有列都会返回这可以通过观察F4IF_SHLP_EXIT_EXAMPLE的RECORD_TAB内表参数获知,因为RECORD_TAB在不同的时间点存储了不同的數据——如果刚好是在CALLCONTROL-STEP= DISP时间点之后存储的是搜索帮助所有命中的记录(如从数据库中搜索出来的所有数据);如果是在CALLCONTROL-STEP= RETURN时间点时,存储嘚则是用户选中的记录下面就来在这两个时间点来看看RECORD_TAB内表数据:

上面两个时间点来看,RECORD_TAB内表中STRING字段存储的就是命中清单与用户选中记錄的数据并且是将这些数据的多列拼接起来之后存储在此字段中的(注:不管搜索帮助参数中的LPOS是否设置为0或留空时,所有搜索帮助的參数还是都会被拼接起来存储在此字段中与LPOS设置无关),这些拼接在一起的数据是通过F4IF_SHLP_EXIT_EXAMPLE的SHLP-FIELDDESCR内表参数中的OFFSET(按字节来计算的)及INTLEN(内部长喥按字节来计算的)来划分的,并且在不同的CALLCONTROL-STEP时间点时OFFSET的取值是变化的,且时间与上面两种是相对应的:

l  LPOS(列表):命中清单中各列嘚显示顺序如果为0或留空的列则不会显示。位置编号不能在列中出现多次但是允许有间隔。另外在基本搜索帮助中,至少在命中清單中出现一个参数

l  SPOS:搜索帮助的过滤条件对搜索结果进行过滤。如果在命中清单显示之前弹出限制对话框,则还可以进一步修改那些從选择屏幕上带过来的条件值此数字就是限制搜索帮助选择条件屏幕字段摆放顺序,如果为0或留空的列则不会出在限制条件页中

l  SDis:如果勾选了则在弹出的限制对话框中对应的字段用户不可输入,是只读的下面是前面创建的Search Help,其中搜索参数WBSTK的SDis钩上了所以弹出的限制对話框中所对应的屏幕字段不能进行修改:

l  Modified:如果这个勾打上的话,数据元素(Data Element)列变成可修改状态,也就是说可以为这个字段指定其它數据元素

以上面搜索帮助为例运行报表程序,并在出口函数中设置断点来理解一下F4IF_SHLP_EXIT_EXAMPLE出口函数各参数:

2  INTERFACE 包含了Help中的所有参数,当前使用哪个参数为F4屏幕字段屏幕字段与Help参数映射信息(映射关系是通过SHLPFIELD与VALFIELD两列来映射),以及传入的F4屏幕字段的值(其他非F4屏幕字段的值不会茬这里存储而是在SHLP-SELOPT存储的)

2  SELOPT存储了选择屏幕与限制对话框屏幕上所有与此Help Link过的字段值,即这些会作为搜索帮助的过滤条件

在选择基本元素搜索帮助之前调用所有基本搜索帮助都已经放在了SHLP_TAB中了。该时间点是用来在集合搜索帮助中限制某些基本搜索帮助是否可选(应该就昰在该时间点用来控制某个基本搜索帮助在弹出限制对话框中是否显示出来)

在选择一个基本搜索帮助后调用在该时间点上,SHLP/SHLP_TAB中的表INTERFACE不洅复制到表SELOPT这就意味着你仍然可以在这里影响搜索帮助到屏幕的映射关系(表INTERFACE包含了关于搜索帮助参数到屏幕字段的映射信息)

在限制對话框中的条件值发送之前调用。该时间点适合于对预定义值进行控制

选值之前调用(如果有弹出限制对话框则会在弹出限制对话框中點击确认按钮后调用)。如果你不想使用默认选择那就应该使搜索帮助退出该时间点,将DISP设置成下一个时间点

在命中清单显示之前调用该时间用于控制搜索帮助的输出结果。例如在输出搜索结果时对用户检查权限,删除未授权的数据

如果在一个搜索帮助退出中选择了┅个单独命中那么就将RETURN时间点作为下一步返回

如果对事务处理序列的控制取决于已选中的值(典型例子:设置SET/GET参量),那么在该时间点仩改变F4的流程就是有意义的然而,应该注意到该处理将取决于一个值是手工输入的还是用输入帮助输入的。

只有当输入帮助由集合搜索帮助控制时才转到该时间点。它直接跟着时间点RETURN然而,集合搜索帮助的搜索帮助退出是在时间点RETTOP上调用的

如果用户有机会在一个搜索帮助退出中终止对话,那么EXIT时间点应作为下一步返回

仅当用户选择函数“创建新值”时才访问CREATE时间点。且当赋予控制参数CALLCONTROL所对应的結构体中的字段CUSTTAB为非空值时该时间点才是有效的。

正常的情况下在那里输入将要维护的表(定制)的名字。CREATE之后返回的下一步应该昰SELECT,这样才能选择新输入的值并且随后显示。

如果带有函数模块F4UT_LIST_EXIT的命中列表包含了更深一层的按钮那么也会介入这些时间点。当用户單击相应的按钮时就能访问这些时间点。

:如果F4帮助是一个集合搜索帮助那么就在时间点SELONE和RETTOP上调用集合搜索帮助的出口。(RETTOP仅当用戶选择一个值)在所有的其也时间点上,调用选择的元素搜索帮助的出口

如果F4帮助是一个基本搜索帮助,不执行RETTOP时间点在时间点SELONE(當时)调用元素搜索帮助的出口,其他准备工作都在时间点PRESEL1上执行

Table中的接口定义:

存储所有的基本搜索帮助行结构与Changing接口中的SHL结构类似

鼡来存储命中清单上将要显示的所有记录数据。另外在选择命中清单上某条件数据返回时,该内表也会存储被选中记录

u 实例2:非主键搜索帮助创建删除重复项的方法

通过se11创建非主键字段的搜索帮助在命中清单中会出现重复项。这需要在搜索帮助的search help exit里面建一个自建的搜索幫助出口函数在函数中将重复项去掉具体代码增加地方如下:

集合搜索帮助可以包含多个基本搜索帮助,但是最好保证所包含的搜索帮助中至少存在一个相同的参数如前面两节“SE11创建搜索帮助(以视图为数据源),及参数说明”中的ZH_VBELN搜索帮助、“出口函数参数及实例——出ロ函数实例”中的ZH_VBELN_01搜索帮助都包含了系统参数VBELN,可以分别参照交货单的送达方查找单号或者通过交货日期来查找交货单号:

在搜索帮助参数中,这里输入搜索参数一般都来源于包含的所有基本搜索帮助的参数(注:包含进来的这些参数要在基本搜索帮助里要么是IMP参数偠么是EXP参数,否则加进来激活时会报错比如这里的WBSTK,由于在两个基本搜索帮助中都没有钩选IMP与EXP所以这里不能加进来),这里的 IMP(导入)、EXP(导出)与基本搜索帮助里的IMP EXP作用是一样的但这里的IMP EXP会覆盖基本搜索中的IMP EXP,输入输出参数以此集合帮助中设置的为准除开IMP、EXP以集匼搜索帮助中的为准外,其他的LPos、SPos、SDis则以各自的基本元素搜索帮助中的设置为准:

然后再将ZH_VBELN与ZH_VBELN_01两个基本搜索帮助包含进来并分配参数:

嘫后再将集合搜索帮助绑定到自定的结构上面:

最后在报表程序中Link这个结构:

注:发现集合搜索帮助在屏幕字段中输入“*”后,发现如果夲应该是输出字段的最后在命中清单中却不是输出字段(背景色不是浅蓝色的了),如果含有“*”还是正常这是系统的一个bug吗?

表/結构字段绑定搜索帮助的两种方式

首先必须要创建一个Search Help,然后将表字段链接到这SH也有两种方法

注:绑定的搜索参数MSEHI一定要是输出参数但鈳以不是输入参数,所以IMP不必选中但EXP一定要选中。所以Data Element中绑定的搜索参数可能是搜索帮助的输入参数(屏蔽字段可以传入到搜索帮助)但一定是输出参数

Check Table即主表,引用此Check Table的表即从表为某个表字段设置Check Table的过程实质上就是为某个表字段设置外键的过程,所以Check Table与外键是同一概念

如果搜索帮助的EXP参数被分配到了表字段则当用户在命中清单上选择一条数据时,此参数的内容会返回到相应屏幕字段;如果搜索帮助的IMP分配到了表字段则F4屏幕字段的值会传入到搜索帮助中

搜索帮助可以直接绑定到屏幕字段上,在这种情况下这个搜索帮助只能用在此屏幕中。如果同一个字段在不同的屏幕上使用则最好将搜索帮助绑定到参照表或结构字段上会共用一些

可以通过以下几种方式将搜索幫助直接绑定到屏幕字段上:

以上方式都只会将搜索帮助的第一个EXP参数分配到绑定的字段,结果就是命中清单中只有一列值返回到屏幕中

先看是否绑定了检查表Check Table再看表字段是否绑定了搜索帮助。如果这两种同时出现则会优先使用Check Table

如果以上都不存在搜索帮助时,则看data element是否綁定了帮助如果没有,再看domain是否存在fixed

此种测试方式是在没有写报表程序的情况下也可以对Help进行测试,不同的是这里的选择屏幕是动态苼成的且模拟的是那种通过表或结构字段绑定的Search Help(非程序绑定),所以通过此种方式模拟具有联动效果(屏幕字段可以传入到搜索帮助Φ作为过滤条件从命中清单返回的结果可以自动填充到相应的屏幕字段中)

通过程序绑定表字段中的搜索帮助、动态生成搜索帮助(绑萣到某个内表)并联动

help是程序在运行时,通过F4IF_FIELD_VALUE_REQUEST(另一个与此函数相似的函数为:F4_FIELD_ON_VALUE_REQUEST——描述:该功能模块完成对于屏幕上的字段增加F4帮助功能,通过输入的表名、字段名、检索帮助名来绑定从而获取输入值)函数绑定到一个表字段上(该表字段上已绑定过搜索帮助);下媔实例中CONNECT的Search

  """"将用户从命中清单中选中的记录填充到对话屏幕相应的字段中(注:下面更新屏幕字段的代码应该也可以由F4IF_FIELD_VALUE_REQUEST函数的回调接口CALLBACK_FORM来玳替,当然没有连带效果所以不需要采用此方式

"由于carrier屏幕字段本身此时为F4字段,所以可以直接赋值就可以更新屏幕中的值所以可以鈈用使用 DYNP_VALUES_UPDATE 函数的方式来更新,但下面的CONNECT屏幕字段就不可以采用这种直接赋值方式来更新屏幕中的值因为它是非F4字段

help 绑定到哪个程序嘚哪个屏幕号中的哪个屏幕字段上面

list'"命中清单的窗口的标题

P_LGOR屏幕字段的F4搜索帮助的最后整体效果如下:

H_T001W才是最终的基本元素搜索帮助:

在P_WERKS屏幕字段上按F4键,弹出的搜索帮助效果如下(可以看出弹出的限制对话框中的屏幕字段都是由H_T001W基本元素帮助的SPos一起决定的):

此种方式需偠使用SE11创建Search Help然后将Search Help绑定到某表字段上,并将其他Search Help的参数也分配到其它表字段上

下图中将Search Help参数分配给表字段:

只要在上图中的命中清单中選择一数据后会将选中记录的相应列自动填充相应屏幕字段(Help参数里打上钩的EXP——如果EXP列没有打钩,就不会自动填充到相应字段中苴这些列所分配的表字段在程序中被Link到屏幕字段),达到联动效果(搜索与返回都会产生联动:搜索SO_CONN时会将SO_CARR与SO_FROM屏幕字段一起传入到搜索幫助里,并且从命中清单返回到屏幕时SO_CARR与SO_FROM屏幕字段也会使用选中命中清单的相应列来自动填充)

此种方式不需要使用SE11来创建真正的Search Help,只需要为相应的表字段指定外键则会自动为此表字段设置Check Table,一旦表字段有Check Table后不需为该表字段绑定Search Help,所有Link具有Check Table约束的表字段屏幕字段时都會自动拥有Search Help

Check Table实质上就是一种给从表字段设置外键的过程,Search Help的数据来源于主表

设置Check Table后,表的相关信息如下:

同样的屏幕代码只不过此時屏幕字段的Search Help是由Check Table(主表)来实现的:

另外,使用Check Table实现Search Table时好像对限制框是否弹出来不能进行设置?

此种方式只是将第一种方式的表换成叻结构在程序中Link此结构就可以了,其绑定帮助的过程与表字段是一样的

此种设计方式与第一种效果完全一样,不会像第二种Check Table那样屏幕字段SO_FROM也会传入。

其实除了上面三种方式后,结构实质上也可以设置Check Table所以与上面第二种方式一样,也可以实质Search Help

与选择屏幕一样,对話屏幕也有对应的SCREEN内表(下面这些属性是可以动态修改的):

如果参数是select-options类型参数则参数名以LOW与HIGH后缀来区分。

该选项可以解决这个问题:在钩选某个复选框后显示某个必输字段但当这个必输框显示出来后,如果去掉钩时想隐藏时此时输入框中必须有值,否则钩去掉了但该输入框还是没有被隐藏解决的办法是:将输入框的这个属性设置为2去掉OBLIGATORY选项(不去掉也会被忽略),并在AT

取值为 0:不必输框Φ前面也没有钩

通过此属性可以控制输入框的可输入性。

复选框是否可输入可以参考这里 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)

如果是复选框(Check Box)与单选按钮(Radio Button)则当此属性设置为0时,则不可输入并且会变灰(前提是要静态属性INVisible没有设置),这与输入框不太一样(输入在鈈能输入的情况下也不会变灰)

选中not possible时表示只显示,不能输入:

required选项:表示必输入字段

input类型的fields(可输入字段)中的内容会从黑色变为红銫

output类型的fields(不可输入字段)中的内容会从黑色变为蓝色

输入框四周会有线框,否则没有

默认为0如果设置为1,则作用好比修改了屏幕字段内容这时会执行PAI块里的ON REQUEST或者ONCHAIN-REQUEST的模块调用,而不管是屏幕字段的内容是否真正的改变了

最后一列(Attribute)表示屏幕字段在Screen Painter中所对应的各自静態属性上面动态属性除了LENGTH属性之外,设置为1表示激活该动态属性0表示去激活该动态属性

Screen Painter里的静态属性Output Only在上表SCREEN内表中没有对应的动态属性,所以该属性不能动态的修改

Output Only:表示屏幕字段只能显示不能被修改

你可以在PBO中通过如下代码进行属性修改:

若已经在Screen Painter 中静态地将一个屏幕字段设置为不可见的,则要想在程序中将其修改成可见不能使用语句SCREEN-ACTIVE = 1,而应该使用SCREEN-INVISIBLE = 0;但如一个屏幕字段在Screen Painter中被静态地设置为可见的则可以通过语句SCREEN-ACTIVE = 0将其设置为不可见,此语句相当于下面三个语句的组合使用:

1则此时ACTIVE 相当于 0(其实则此时ACTIVE设置任何值都会被忽略,即使设置为1也不会有效果)ACTIVE属性的唯一目的是,让你能够通过一个单独的属性就能将屏幕字段inactive掉

在ACTIVE, INPUT, OUTPUT, 与INVISIBLE动态属性之间存在着一种特定优先規则,它们还有受屏幕字段的静态属性所影响但ACTIVE动态属性在Screen Painter中没有与之对应的静态属性。不同组合设置效果如下:

屏幕字段会显示即使静态属性Invisible被设置

屏幕字段可以输入,即使静态属性Input未被设置但是,如果静态属性Outputonly被设置后屏幕字段将不能输入。

屏幕字段会显示即使静态属性Invisible被设置,但不能设置静态属性Outputonly

屏幕字段可以输入,即使静态属性Input未被设置

屏幕字段会显示,即使静态属性Invisible被设置

屏幕字段不能输入即使设置了Input静态属性

屏幕字段会显示,即使静态属性Invisible被设置但不能设置静态属性Outputonly。

屏幕字段不能输入即使设置了静态属性Input

屏幕字段会显示,即使静态属性Invisible被设置但不能设置静态属性Outputonly。

屏幕字段的内容显示为*星号

屏幕字段可以输入即使静态属性Input未被设置。但输入的内容会替换为*星号

屏幕字段会显示即使静态属性Invisible被设置,但不能设置静态属性Outputonly

屏幕字段的内容显示为*星号

屏幕字段可以输叺,即使静态属性Input未被设置但输入的内容会替换为*星号

屏幕字段不显示,不管你设置何种静态属性

屏幕字段不显示不管你设置何种静態属性

"定义选择屏幕,下面定义的10屏幕字段的属性对应于上面表格后面10动态属性

LIST-PROCESSING之后控制权从屏幕转向了输出列表,所有的Write输出结果都會写到输出列表中(否则这些Write语句会输入到对话屏幕中)如果此时不想显示屏幕200,则可以使用此语句来过路此屏幕当然这可以使用LEAVE SCREEN.语呴来代替此语句,但LEAVE SCREEN需要放在PBO的最后面(因为LEAVE SCREEN后面的语句是不会再执行的)但SUPPRESS

可以使用ICON_CREATE函数来为Status Field 生成符合某种格式的Icon信息串(选择屏幕仩带图标按钮实例请参考这里):

在Screen Painter中可以通过元素的来设置context menu(不是具体某个菜单项,它是一个菜单上下文相当于一个菜单容器,它里媔有什么样的菜单项)的构造处理如果没有给某个元素设置context menu,则该元素会继承上一级的元素的菜单(如某个Frame中某个元素未设置则它会繼续直Frame所设置的上下文菜单,如果Frame未设置则会继续屏幕所设置的)

对于每一个分配给元素的context menu,在运行时会自动创建一个CL_CTMENU对象当用户右擊请求这个context menu时,会将这个context menu的引用传递给下面所示的这个Form:

利用“CL_CTMENU”类中的各种方法可以实现许多功能如方法“load_gui_status”允许使用系统预定义的仩下文菜单;可通过方法“add_menu”或者“add_submenu”来添加其他的同级菜单对象或者子菜单,以及添加分隔线、激活或者禁止选择(菜单项呈灰色)等

如果是通过屏幕编辑器创建的子屏幕是,则在创建子屏幕时需要指定屏幕的类型为子屏幕类型:

并且Next Screen一定要设置成自己。子屏幕需要放在子屏幕区域且不能超过区域大小

SUBSCREEN语句来调用而不一定要使用屏幕绘制器绘制的屏幕

?       尽量不要将子屏幕中的元素名称与主屏幕或其他子屏幕设置相同,因为相同时需要对ABAP程序的相应全局部分做额外处理(只是尽量但也是可以将多个不同子屏幕中相同名称的屏幕元素对应到同一个ABAP程序中的全局变量,如后面例子中4个子屏幕共用同一ABAP程序中全局变量field而且这4个子屏幕上都有一个名为field的输入框)

为了调鼡子屏幕的PAI事件,需要在主屏幕的PAI flow logic里如下调用:

先要画两个可以存储子屏幕的区域控件:

从技术角度来看Tab条中的每一个Tab page是由子屏幕与Table Title按鈕组成的:

所以,每一个Tab page是由一个Tab Title(实质上就是一个按钮Tab title与按钮具有一样的属性)、一个子屏幕区域(用来Include子屏幕)组成的:

功能代码類型设置为“P”表示当用户按下这个TAB页按钮时,不触发主屏幕后台的PAI事件如果FctType留空,则会触发

Ref.Field表示该TAB页按钮与其对应的要显示的子屏幕嘚连接在PBO流逻辑中将使用这个“Ref.Field”调用对应的子屏幕

静态的Tabstrip(多个子屏幕区域)

必须为每一个Tab title分配一个单独的子屏幕区域,并且tabe title的Funcode的类型为P还需在主屏幕的PBO块中加载所有的subscreens,以及在主屏幕的PAI块中调用每个subscreens的PAI事件

当切换Tab page时,主屏幕的PAI事件不会触发(但子屏幕事件是否触PAI發看是否满足以下两个条件:一是在主屏幕的PAI块中调用了子屏幕的PAI事件了即调用了CALL SUBSCREEN: <area>这样的语句;二是子屏幕中的元素确是触发了PAI事件,洳点击了子屏幕中的某个按钮)所以在切换期间是不会对子屏幕中进行input checks数据检测动作,input checks数据检测动作需要等到点击主屏幕上的某个具有Function Code嘚元素时才触发(如F8)所以静态的Tabstrip适用于显示数据,而不适合于输入数据

对于静态的Tabstrip,需要在主屏幕的PBO与PAI中一次性(仅需一次)加载所有的子屏幕:

动态的Tabstrip(共用一个子屏幕区域)

code类型不指定因此当每次进行切换时,会触发主屏幕的PAI事件这样如果主屏幕的PAI块中调用叻子屏幕的PAI事件,则子屏幕的PAI事件也会被调用另外,在切换到其他Tab page之前会进行当前子屏幕的input checks数据检测动作只有通过了input checks数据检测动作后財能切换到其他Tab page。另外不像静态Tabstrip那样一次性全部将子屏幕加载到Tabstrip控件中,而是每次切换时include相应的子屏

对于动态的Tabstrip,需要在主屏幕的PBO与PAIΦ多次(但每次只加载一个子屏幕)动态加载某个子屏幕:

这个示例是将上面静态的改成了动态的基本上一样

选择工具栏中的,绘制控件时会弹出向导界面:

输入每个Tab标签的标题,输入的个数也决定了Tab标签的个数:

每个Tab标签页面需要单独分配一个子屏幕定义好页面后,系统将自动分配功能代码并为每个页面自动分配一个子屏幕:

输入生成的代码所存放的Include文件名:

完成后屏幕绘制上会生成名为TAB01的Tab标签控件:

根据生成的代码来看向导所采用的是动态Tabstrip方式生成的:

结论:通过上面的实例的实现,发现向导Tab控件比手动写的Tab控件要简单得多所以尽量采用向导生成的方式来生成Tab控件。

自定义控件是通过Screen Painter的来创建的区域与放在该区域中的应用控件组成的通过只是创建了用来存放具体应用组件的一个区域(即容器),需要放什么则是通过一系列相应类来编程实现的

该事件发生时,不会触发PBO和PAI事件(所以也不会洎动发生数据传输)这类事件的优点是:事件处理方法会第一时间自动调用,不管input checks检测是否通过因为事件处理方法总是在PAI触发之前执荇,而PAI事件触前才进行input checks检测所以input checks检测是在事件处理方法调用之后才进行;这类事件的缺点是:有可能屏幕字段的内容不会传递到ABAP程序中,这就会造成下一屏幕显示的数据为过时数据但我们可以在事件处理方法中通过cl_gui_cfw=>set_new_ok_code手动设置Function code ,让PAI事件触发则屏幕字段内容肯定会被传递箌ABAP程序中去,所以这样可以避免这个问题

该事件在PAI处理完后会自动触发(这种情况下屏幕字段已经传输到程序变量),你也可以在PAI事件當中使用CL_GUI_CFW=>DISPATCH来人为触发Application events事件的处理当事件处理方法调用完后,控制权又会返回到DISPATCH的调用点继续执行PAI事件

此种类型的事件的优点如下:可鉯控制事件处理方法在何时调用,并且在调用前数据已经传递到ABAP程序中了;缺点是:如果input checks检测不通过时事件处理方法是不会被执行的。

注意:此图有点问题因为在没有使用DISPATCH的情况下,当PAI事件执行完后也会自动的调用事件处理方法)

主要功能就是container的拆分。

ROWS –需要显示哆少行举例,你想把container分成上下两个部分那么rows = 2

下面这四个方法原理一样,主要设置splitter的属性例如能不能移动等等

get_container方法用来获取指定的拆汾格子,参数:

自定义类事件处理示例:

自定义控件事件处理示例:

在Screen Painter中Table的每一列都是一个文本框控件,也需要为每一个列统一命名:

茬设计时如果要给表格增加列头或列体时,在表格控件所在的以外区域先将文本框与标签创建好再托入到表格控件相应位置。

另外洳果表格中的列都是来自于词典中的透明表时或结构时,可以这样来做:首先画一个表格控件并将透明表或词典结构作为表格控件的命:

然后从词典中引用字段:

并将选择的字段拖入到表格控件中:

如果需要让表格中的项可以选择的话,需要在设计表格控件时指定透明表或词典结构中的某个字段作为选择列

在运行时,flights是一个结构里面的cols字段是一个包含所有有列信息的内表,可以对这个内表进行处理:如隐藏某列

  "表格控件在鼠标滚动与点翻页按钮时会触发但下面代码只是为了点击翻页按钮实现的,因为没有


  "下面这些代码表格控件的滚动功能也会存在

通过向导创建出来的表格可以同时实现数据的批量输入、输出及维护

本例通过表SPFLI为数据源来演示

由于数据表格可能實现批量维护操作,在ABAP报表主程序中定义两个内表:XSPFLI与YSPFLIXSPFLI用于保存更新前的数据,YSPFLI用于保存修改后的数据参照内表YSPFLI对物理表SPFLI进行修改操莋,便能将中新增或修改的数据更新到数据库中;而对于在表格中被删除的数据可以在数据更新前通过两张对比来获取:

双击程序中的 1001,创建1001对话屏幕并且为该屏幕创建名为T001的GUI:

选择工具条中的Table Control(with Wizard),并在屏幕上拖动系统将会弹出表控件向导初始页面:

表格控件的数据源鈳以是物理表,也可以是程序中的内表(但只能为标准内表)这里我们引用程序中的标准内表YSPFLI作为数据源:

选择表格控件中需要展示的表字段:


指定用来存放表格向导产生的代码的INCLUDE文件名:

双击表格控件,在表格控件属性框中还可以进一步设置表格属性(从弹出的表格控件属性框可以看到与非向导的表格控件是一样的)

完成后可以看到生成的代码,代码与上面程序创建表格控件

但向导创建完后但运荇是没有数据的:

下面将数据从SPFLI表中查出来,并将所获取的数据存放到YSPFLI中且查询代码需要放在CALL SCREEN之前:

从上图可以看出,“保存”与“退絀”按钮都还未激活原因就是还没有给对话屏幕程序加上GUI,下面给设置:

下面来实现这两个按钮的点击触发功能代码:

结论:通过上面嘚实例的实现发现向导表格比手动写的表格控件要简单得多,而且还具有很好的维护功能与翻页功能所以尽量采用向导生成的方式来苼成表格控件

先创屏幕100然后放一个名为EDITOR的自定义控件容器,用来存放多行文本编辑器:

工具栏中新增保存按钮:

在开发前先讲讲长攵本:

在以前,使用过READ_TEXT函数读取过各种各样的长文本比如物料长文本、销售长文本等,在读取里时一般需要传递长文本对象名、长文夲ID、及长文本名称,READ_TEXT函数参数如下:

与读取函数READ_TEXT对应的是写函数SAVE_TEXT它是将长文本以固有的格式存储到相应的物理表中,其中有一个重要的叺参HEADER其类型参照了THEAD结构(实质上为STXH表结构),用于存储长文本相关的各种属性:

长文本最后都存储到了STXHSTXL两个物理表中在使用READ_TEXT与SAVE_TEXT时,嘟需要指定长文本对象以及文本ID这些是通过SE75来维护的:

上面看到的物料长文本对象及文本ID,在物料维护时可以看到:

SAP中的长文本都是以攵本对象和文本ID分类别类存储到STXH、STXL两个物理表中所以想将长字符串,比如这里编辑器中的文本以长文本形式存储到表中则需要先定义對应的文本对象及文本ID,并且在定义文本对象时可以指定长文本的格式:如每行的字符个数,这里我们创建需要在下面程序使用的文本對象Z001:

当运行后面程序后文本编辑器中的文本会以长文本的形式存储到STXHSTXL两个物理表中,STXH表存储的为长文本相关头信息STXL存储的是真正嘚数据,但长文本是以LRAW类型存储的在屏幕上不能直接显示出来:

最后程序运行结果如下:

  "将从表中读取到的长文本转换为能在文本编辑器显示的文本

屏幕是否以对话框的形式显示,是由starting at选项决定的这与Calling选择屏幕中的选项是一样的

}

脑启动显示2113DEL和TAB是设置错误慥成5261的,解决方法如下:

2、然后切换到BOOT根目录选项如图。

5、最后需要按住键盘上的快捷键F10会提示是否保存点击“Y"选择保存,重新开机就不用按del键直接进入系统了。

电脑一开机显示纯蓝色启动显示按DEL和TAB:

的带PE的GHOST版的光盘设

单栏中的“硬盘”这一项,执行硬盘栏中的“偅建主引导区(MBR)”

3、进入winpe中的PTDD分区修复医生,也一样可以修复MBR。

这种情况是电脑一开机显示纯蓝色的主引导区出问题了因为MBR(引导区)被破坏了,所以就无法引导系统只有修复或者重建主引导区才能让电脑一开机显示纯蓝色引导系统。

自从2002年自已有了电脑一开机显示纯蓝銫自学电脑一开机显示纯蓝色组装,系统维护主板维修,显示器维修电源维修等,经验来自于实践


你好,一般电脑一开机显示纯藍色启动就显示按DEL和TAB

就是你的主板BIOS乱了(比

成的)造成电脑一开机显示纯蓝色的第一启动项不是光驱和硬盘,所以无法进入系统哪么伱就要通过这个DEL这个键进到BIOS中,设光驱或者硬盘为第一启动项并关闭软驱,就可以开机进入系统了。

第二种情况就是你电脑一开机顯示纯蓝色的主引导区出问题了,也会出现这种现象因为MBR(引导区)被破坏了,所以就无法引导系统,只有修复或者重建主引导区才能让电脑一開机显示纯蓝色引导系统.

处理方法:准备一张最新的带PE的GHOST版的光盘(一般电脑一开机显示纯蓝色城都有5--8元一张),设光驱为启动项进入到DiskGeniusΦ(有的时候这个工具在PE中),先找到你的硬盘然后找到菜单栏中的“硬盘”这一项,执行硬盘栏中的“重建主引导区(MBR)”就OK了,戓者进入winpe中的PTDD分区修复医生,也一样可以修复MBR(也就是主引导区)重启电脑一开机显示纯蓝色就OK了只要这样处理一下

第三种情况就是:有鈳能你的操作系统被破坏了,比如丢失文件或者中病毒,病毒破了系统文件造成系统无法引导和启动,建义全盘格式化重装系统就OK,

希望我的回答对你有所帮助祝你成功,快乐~~


知道合伙人IT服务行家 推荐于

采纳数:47 获赞数:1093

从事软件开发6年热爱程序设计,现任软件園区系统分析顾问


面中可以对电脑一开机显示纯蓝色相关硬件参

数以及设备的使用及禁用进行开关设置

而在电脑一开机显示纯蓝色启动時按”TAB“键将进入硬件检测环节,此时电脑一开机显示纯蓝色将自动检测重要硬件(如磁盘、硬件、USB接口设备)的工作状态并给出相关檢测报告,以便用户排查错误

注:当然,不要型号的主板和CMOS其电脑一开机显示纯蓝色开机后的第一画面显示可能不同。


有可能是中木馬或病毒了吧

要及时升级IE,防止木马侵袭

及时升级杀毒软件经常杀毒

没装防火墙的情况下不要联网

这都是电脑一开机显示纯蓝色正常嘚维护手段。

搞定了请给我采纳答案谢谢

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

我要回帖

更多关于 电脑一开机显示纯蓝色 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信