设为首页 收藏本站
查看: 1653|回复: 0

[经验分享] [SAP ABAP开发技术总结]搜索帮助Search Help (F4)

[复制链接]

尚未签到

发表于 2015-9-22 07:34:05 | 显示全部楼层 |阅读模式
DSC0000.gif
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4265212.html
12.10.      Search help(F4)...95
12.10.1.           VALUE CHECK、fixed Values、Value Table.95
12.10.2.           检查表Check Table --- Value Table.96
12.10.3.           SE11检查表与搜索帮助关系...96
12.10.4.           F4搜索帮助联动的决定因素...98
12.11.      搜索帮助参数说明...100
12.12.      F4IF_SHLP_EXIT_EXAMPLE帮助出口...102
12.12.1.           修改数据源...102
12.12.2.           删除重复...103
12.13.      搜索帮助优先级...103
12.14.      搜索帮助创建函数...103
12.10.            Search help(F4)
12.10.1.     VALUE CHECK、fixed Values、Value Table
PARAMETERSp_1TYPEzmy_dm_200VALUE CHECK."注:SELECT-OPTIONS没有此选项
如果选择屏幕字段参考数据元素所对应的Domaim设置了固定值(fixed Values)或值表(Value Table)时,使用VALUE CHECK选项后,会验证输入值是否在固定值或值表(若要使值表检查生效,则首先需要将此Domain引用到表字段,再对此表字段通过 DSC0001.png 按钮进行外键分配,并且外键一定是来自的值表的主键,最后使用PARAMETERS定义屏幕参数时要参照此表字段,否则如果只是直接参照所对应的DataElement是不起作用,Value Table一定要经过转换为Check Table后再起作用)范围之内
注:如果要使用VALUE CHECK选项,则Domain的类型只能是C或者N类型,否则运行会抛异常。另外,如果未使用该选项,但F4 Help还是会出现(有固定值或检查表的情况下),但不进行有效性检查了
DSC0002.png
12.10.2.     检查表Check Table --- Value Table
也可以在Domain中指定一个值表(Value Table)作为字段取值范围的限制,但是与指定固定值的方式不同的是:为一个Domain简单地指定一个取值表不会导致用户的输入被自动校验,也不会自动出现F4 Help。只有通过表外键 DSC0003.png 按钮将该Value Table指定为主表之后,一个值表才能真正成为Check Table。所以要想成为真正有效的Check Table,必须要做两个操作:
一是要为字段对应的Domain设置Value Table(即主表,其实这一步不是必须的,在通过 DSC0004.png 按钮指定主表时,可以不用指定为字段所参照的元素所对应Domain所设置的Value Table,而是指定其他的主表也是可以的——但最好不要这样做,Value Check时会出其他问题),二是要为表字段通过 DSC0005.png 为它设置外键。
12.10.3.     SE11检查表与搜索帮助关系
当某个表字段有检查表,并且又有搜索帮助,则数据一般来自源于检查表,而F4的输入输出则由搜索帮助来决定
PARAMETERSp_caridTYPEsbook-carridVALUE CHECK.
PARAMETERSp_cuterTYPEsbook-counterVALUE CHECK.
DSC0006.png
命中清单中的ID列即CARRID背景色不是蓝色,所以选择一条时,不会自动填充屏幕字段P_CARID,原因是对应的Search Help中的CARRID参数对应的EXP没有打上钩:
DSC0007.png
如果将这个钩打上,则会相应列背景色会为蓝色,且会自动填充,达到联动效果
DSC0008.png
一般当某个外键所参照主表的主键上如果设置了搜索帮助(如上面COUNTER外键所引用的主表主键字段SCOUNTER-COUNTNUM已分配搜索帮助“SCOUNTER_CARRIER_AIRPORT”: DSC0009.png ),则这个主表主键上的搜帮助会自动带到从表中相应外键上来,请看上面的SBOOK-COUNTER外键字段的搜索帮助也为“SCOUNTER_CARRIER_AIRPORT”,该搜索帮助决定了整个F4 Help处理及显示过程(如哪些列将作为联动查询条件、哪些列将显示在F4列表中、F4列表中的哪些列会输出到相应屏幕字段中)。另外,虽然主表主键上的搜索帮助会带到相应外键上来,但带过来后还可以修改,比如上面示例中带过来的搜索帮助中,CARRID参数所对应的EXP没有钩上,所以不能使用命中清单中的ID列来自动填充示例中的屏幕字段P_CARID,所以我们可以新建一个搜索帮助,并将CARRID搜索参数所对应的EXP钩上,则可达到自动上屏幕的效果;

另外,有些外键所参照的主表主键没有指定搜索帮助,此时参照从表的屏幕字段的F4 Help就只有简单的一列了(如何让检查表SCURX中的CURRDEC字段也显示出来,请看后面的F4搜索帮助联动的决定因素),如下面SBOOK-LOCCURKEY字段:
DSC00010.png
PARAMETERSp_curTYPEsbook-LOCCURKEYVALUE CHECK.
DSC00011.png
12.10.4.     F4搜索帮助联动的决定因素
上节SE11检查表与搜索帮助关系中,屏幕字段参考sbook-LOCCURKEY时,搜索帮助输出列表只有简单一列,如果要让主表中的SCURX-CURRDEC列也显示出来,则需要为sbook-LOCCURKEY字段绑定一个搜索帮助,该搜索帮助数据来源于主表(或检查表)SCURX,搜索参数包括CURRKEY、CURRDEC两列,并且让这两列在F4输出列表中显示(即在搜索参数“列表”栏位编号):
DSC00012.png
由于SBOOK不能直接修改,ZSBOOK从SBOOK拷贝过来,将搜索帮助ZSCURX_JZJ绑定到ZSBOOK-LOCCURKEY:
DSC00013.png
PARAMETERSp_curTYPEzsbook-LOCCURKEYVALUE CHECK.
DSC00014.png
上面检查表中的SCURX-CURRDEC列(即F4中的小数位)已显示来了,但如何让其背景色为蓝色(虽然上面已将搜索参数CURRDECEXP打上了钩,但底色还是白色的),即选择时自动填充到屏幕上去?由于上面在将搜索帮助ZSCURX_JZJ绑定到从表字段zsbook-LOCCURKEY字段上时,搜索帮助中的搜索参数CURRDEC(即主表中的字段SCURX-CURRDEC)在从表ZSBOOK找不到相应的外键,所以上图绑定过程中,搜索参数CURRDEC为空。但在这里可以手动分配一个,由于在从表ZSBOOK中找不到此字段,所以就暂时参照自己(主表SCURX-CURRDEC)吧:
DSC00015.png
如果此时选择屏幕的代码还是上面那样:
PARAMETERSp_curTYPEzsbook-LOCCURKEYVALUE CHECK.

则F4搜索输出列表中的“小数位”列底色还是白色,但如果加上以下屏幕参数,但会变以蓝色,并可联动(如果搜索帮助的CURRDEC参数的IMP打上钩,还可以实现联动查询):
PARAMETERSp_cur2TYPESCURX-CURRDECVALUE CHECK
DSC00016.png
此时的下拉框也会只有两列:
PARAMETERSp_cur3TYPEzsbook-LOCCURKEYas LISTBOX VISIBLE LENGTH 20.
DSC00017.png
所以,联动的决定性条件是要求选择屏幕上的字段要参照SE11为表字段所绑定搜索帮助过程中所分配的表字段,如下图中的zsbook-loccurkey、scurx-currdec,这两个字段分别与搜索帮助的CURRKEY、CURRDEC参数绑定了,所以屏幕上参照这两个表字段时,就会具有联动效果了:
DSC00018.png
12.11.            搜索帮助参数说明
DSC00019.png
2 IMP:输入参数。表示屏幕上相应字段是否作为搜索帮助的过滤条件(即报表选择屏幕上的字段的值是否从报表选择屏幕上传递到搜索帮助中去

如果是F4字段时,屏幕字段中的值包含“*”时,才会将F4字段传递到Search Help中。除开F4屏幕字段外,而其他只要是Link到了相应的Search Help参数的屏幕字段,只要相应屏幕字段中有值,则会传入到搜索中作为过滤条件(而其他非F4屏幕字段所对应的Help参数不管是否钩上IMP都会传递
DSC00020.png
DSC00021.png
2 EXP:输出参数,表示搜索帮助的此列会从搜索帮助中传递到报表选择屏幕上(表示F4选中一条记录后显示到屏幕上文本框中的值——背景字段为浅蓝色的列的数据会被输出,输出的数据可能是多列。注:只有当EXP钩上且相应字段出现在了屏幕上,才会自动填充到相应屏幕字段,如果没有钩上——没钩上的字段背景色为白色,即使相应参数字段出现在了屏幕上,选择命中清单时也不会自动填充),且F4字段一定要将EXP钩上(否则选择后F4字段不能上屏)。

2 LPOS(列表):F4输出命中清单中各列的显示顺序,如果为0或留空的列则不会显示

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

2 SDis:如果勾选了,则在弹出的限制对话框中对应的字段用户不可输入,是只读的。

12.12.            F4IF_SHLP_EXIT_EXAMPLE帮助出口
12.12.1.     修改数据源
FUNCTIONzfvbeln_find_exit.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      SHLP_TAB TYPE  SHLP_DESCT
*"    RECORD_TABSTRUCTURE  SEAHLPRES
*"  CHANGING
*"     VALUE(SHLP) TYPE  SHLP_DESCR
*"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*"----------------------------------------------------------------------
"此内表用于存储命中清单数据.注:字段的名称一定要与搜索参数名一样,但顺序可以不同,
DATA:BEGIN OFlt_tabOCCURS0,
        wbstkTYPEwbstk,
        lfdatTYPElfdat_v,
        vbelnTYPEvbeln_vl,
   END OFlt_tab.
"用于存储从选择屏幕上传进的屏幕字段的选择条件值
DATA:r_vbelnTYPE RANGE OFvbeln_vlWITH HEADER LINE,
        r_lfdatTYPE RANGE OFlfdat_vWITH HEADER LINE,
        r_wbstkTYPE RANGE OFwbstkWITH HEADER LINE,
        wa_seloptLIKE LINE OFshlp-selopt."
  "callcontrol-step该字段的值是由系统设置,并且你可以在程序中进行修改它。出口函数会在处理的每一步(时间点)都会调用一次
IFcallcontrol-step='SELECT'."如果有弹出限制对话框,则会在弹出限制对话框中点击确认按钮后step值才为SELECT
   "shlp-selopt存储的是经过映射转换后选择屏幕上字段的值,而不是直接为
   "选择屏幕字段名,而是转映射为Help参数名后再存储到selopt内表中,
   "屏幕字段到Help参数映射是通过shlp-interface来映射的
   LOOP ATshlp-seloptINTOwa_selopt.
     CASE wa_selopt-shlpfield.
       WHEN'VBELN'."由于屏幕字段已映射为了Help相应参数,所以这里不是S_VBELN
         MOVE-CORRESPONDINGwa_seloptTOr_vbeln.
         APPENDr_vbeln.
       WHEN'LFDAT'.
         MOVE-CORRESPONDINGwa_seloptTOr_lfdat.
         APPENDr_lfdat.
       WHEN'WBSTK'.
         MOVE-CORRESPONDINGwa_seloptTOr_wbstk.
         APPENDr_wbstk.
     ENDCASE.
   ENDLOOP.
   "根据屏幕上传进的条件查询数据
   SELECTlikp~vbeln likp~lfdat vbuk~wbstkINTO CORRESPONDING FIELDS OF TABLElt_tab
     FROMlikp INNERJOINvbukONlikp~vbeln=vbuk~vbeln
     WHERElikp~vbelnINr_vbelnAND
            likp~lfdatINr_lfdatAND
            vbuk~wbstkINr_wbstk.
   "该函数的作用是将内表lt_tab中的数据转换成record_tab,即将某内表中的数据显示在命中清单中
   CALL FUNCTION'F4UT_RESULTS_MAP'
     TABLES
        shlp_tab   =shlp_tab
        record_tab =record_tab
        source_tab =lt_tab
     CHANGING
        shlp       =shlp
        callcontrol=callcontrol.
   "注:下一个时间点一定要直接设置为DISP,否则命中清单不会有值,也不显示出来
   "从表面上看,SELECT时间点下一个就是DISP时间点,按理是不需要设置为DISP,
   "但如果不设置为DISP,出口函数在执行完后,系统会转入DISP时间点执行(即再次调用此出口函数)
   ",但再次进入此出口函数时,record_tab内表已经被清空了(是否可以通过判断callcontrol-step的值来决定走什么新的逻辑代码来解决此问题?)。如果这里直接设置为DISP,就好比欺骗了系统一样,告诉系统当前执行的正是DISP时间点,而不是SELECT,系统就不会再转到DISP时间点了而是直接显示
   callcontrol-step = 'DISP'. "DISP:在命中清单显示之前调用,表示数据已经查出,下一步就该显示了。该时间用于控制搜索帮助的输出结果。例如,在输出搜索结果时对用户检查权限,删除未授权的数据
ENDIF.
ENDFUNCTION.
12.12.2.     删除重复
FUNCTIONzeh_lxsecond.
  IFcallcontrol-step='DISP'.
   SORTRECORD_TAB.
      DELETE ADJACENT DUPLICATES FROMRECORD_TABCOMPARING ALL FIELDS."zsecond.
   EXIT.
ENDIF.
ENDFUNCTION.
12.13.            搜索帮助优先级
PROCESSONVALUE-REQUEST,AT SELECTION-SCREEN ONVALUE-REQUEST
再PARAMETERS/ SELECT-OPTIONSMATCHCODEOBJECT
检查表Check Table,再(或结构)字段是否绑定搜索帮助
data element是否绑定帮助,再domain是否存在fixed values
最后才是DATSTIMS

Domain只设置Value Table也可以出F4,同时Data Element绑定了搜索帮助,则DataElement上绑定的搜索帮助优先于Domain上的Value Table????????
12.14.            搜索帮助创建函数
在屏幕的ON VALUE-REQUEST事件里可以通过下面几个函数来创建搜索帮助:
F4IF_FIELD_VALUE_REQUEST:函数的作用是在运行时,可以动态的为某个屏幕字段指定Search Help,这个被引用的Help来自某个表(或结构)字段上绑定的Help
F4IF_INT_TABLE_VALUE_REQUEST:在程序运行时,将某个内表动态的用作Search help的数据来源,即使用该函数可以将某个内表转换为Search help,可实现联动效果
TR_F4_HELP:简单实现Search Help,数据来源于内表

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116904-1-1.html 上篇帖子: [Step By Step]SAP Visual Intelligence 安装 下篇帖子: SAP中的通配符和转义符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表