您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SAP的ABAP4语言中文培训教材第三部分第十章编写字段-和值-帮助程序
1第十章编写字段-和值-帮助程序概览F1或为用户提供当前光标所在字段的帮助文本。F4或组合框(如果可用的话)提供可在该字段中输入的值的列表。用户可将列表中的光标放到所选值上并按下F2或双击鼠标,将该值复制到字段中。内容编写字段-和值-帮助程序............................................................................................................1定制F4-值-请求.............................................................................................................................1定制F1-帮助....................................................................................................................................4字段-帮助的功能模块..................................................................................................................4具有匹配代码的字段-帮助.............................................................................................................5用这种方法输出的信息保存在ABAP/4库中。在对话程序中,屏幕处理器自动显示各字段的数据元素的帮助文本。可能值的F4列表通常会引用某个域的有效值的固定设置或相关值表中的数据。标准列表对于用户自己开发的应用程序通常也是够用的。但是,根据具体的对话程序不同,也可以建立更详细或稍有不同的文档和可能值列表。可以用PROCESSONHELP-REQUEST(POH)和PROCESSONVALUE-REQUEST(POV)事件来编写帮助文本和可能值列表程序。这些事件可以在屏幕处理逻辑中与PROCESSBEFOREOUTPUT和PROCESSAFTERINPUT事件一起执行。PROCESSONHELP-REQUEST:语法PROCESSONHELP-REQUEST.FIELDfieldMODULEmodule.FIELDfieldMODULEmodule...通过FIELD语句将模块调用分配给屏幕字段。如果按下F1或,就会执行光标所在字段的POH模块。PROCESSONVALUE-REQUEST:语法PROCESSONVALUE-REQUEST.FIELDfieldMODULEmodule.FIELDfieldMODULEmodule...用户按下F4或激活屏幕字段中的组合框之后,会发生POV事件。如果该字段包含FIELD语句,则调用指定的POV模块而不是帮助处理器。在调用屏幕时,将执行PROCESSBEFOREOUTPUT事件。然后就会出现自动传输给屏幕的字段。如果在屏幕中选定F1帮助或F4值列表,则系统会再次发送动态程序,但不执行PBO事件,也不执行字段转移以将所有字段转移给动态程序。在POV后,只为光标所在字段和通过F2键或双击而选定的字段的内容进行传输。如果POV处理需要附加字段传输,则可以使用DYNP_VALUES_READ和DYNP_VALUES_UPDATE功能模块。其它功能模块可简化特定上下文的帮助文本和输入值的编程。匹配代码对于可能值帮助也会有所帮助。本章最后一节包含一个示例。以下主题提供详细信息:定制F4-值-请求(页1)定制F1-帮助(页4)字段-帮助的功能模块(页4)具有匹配代码的字段-帮助(页5)定制F4-值-请求在为字段建立自己的F4值帮助时,可以使用固定值或相关域的检查表。如果标准的F4帮助不充分或不适合特定的上下文,则可以使用PROCESSONVALUE-REQUEST事件编写自己的F4值帮助程序。2示例事务TZB0包含编程的“出发机场”和“目的机场”字段的可能值帮助。通过F2或双击鼠标可在列表中选定出发机场和目的机场。这两个字段都引用S_AIRPID域。建立标准F4帮助的最简单方法就是在ABAP/4词典中为该域分配一个检查表。但是,如果结果值列表不符合要求,则必须自己编写值帮助程序。下面以事务TZB0为例,讲述一种编程方法。首先,事务TZB0的屏幕200的处理逻辑必须指定要为其提供值帮助的字段。在其中某个字段上使用F4键会导致执行该字段的POV模块。PROCESSONVALUE_REQUEST.FIELDSPFLI-AIRPFROMMODULEVAL_REQ_AIRPORT.FIELDSPFLI-AIRPTOMODULEVAL_REQ_AIRPORT.PAI模块VAL_REQ_AIRPORT包含对同名子程序的调用。MODULEVAL_REQ_AIRPORTINPUT.PERFORMVAL_REQ_AIRPORT.ENDMODULE.VAL_REQ_AIRPORT子程序由以下三部分组成:-使用DYNP_VALUES_READ功能模块从屏幕上读取字段内容。-为编程的值帮助调用VALUE_REQUEST_AIRPORT功能模块。-使用DYNP_VALUES_UPDATE功能模块将字段内容写回到屏幕上。完全处于演示目的才将DYNP_VALUES_READ和DYNP_VALUES_UPDATE功能模块集成到该示例事务中。如果在POV处理中需要多个字段传输,则可以使用它们。如果在调用VALUE_REQUEST_AIRPORT功能模块后,打算使用MOVE命令将选定字段值复制到SPFLI-AIRPFROM和SPFLI-AIRPTO字段中,则可以将这些功能模块从该特殊示例事务中省略掉。在VAL_REQ_AIRPORT子程序中,DYNP_VALUES_READ功能模块获取请求值帮助的字段内容。然后将该值传送给帮助处理器。在输出参数DYNAME和DYNUMB中指定程序名和屏幕号。DYNPFIELDS表参数需要一个具有ABAP/4词典结构DYNPREAD的表。本例中该表命名为SCR_FIELDS。在DYNP_VALUES_READ功能模块的该表中指定要读取的屏幕字段。该表应包含值帮助所需值的字段。用GETCURSOR命令找到字段名然后将其复制到SCR_FIELDS表中。FORMVAL_REQ_AIRPORT.DATA:CURSORFIELD(30),SCR_FIELDSLIKEDYNPREADOCCURS1WITHHEADERLINE,AIRPORTLIKESPFLI-AIRPFROM.GETCURSORFIELDCURSORFIELD.SCR_FIELDS-FIELDNAME=CURSORFIELD.APPENDSCR_FIELDS.CALLFUNCTION'DYNP_VALUES_READ'EXPORTINGDYNAME='SAPMTZB0'DYNUMB=SY-DYNNRTABLESDYNPFIELDS=SCR_FIELDSEXCEPTIONSUNDEFIND_ERROR=08OTHERS=04.IFSY-SUBRCNE0.MESSAGEI007.EXIT.ENDIF.VAL_REQ_AIRPORT子程序从SCR_FIELDS表中顺序读取机场名并用AIRPORT更改参数调用VALUE_REQUEST_AIRPORT功能模块。该功能模块负责输出带有机场列表的弹出窗口。用户选定机场之后,该值通过AIRPORT变量传回调用程序。READTABLESCR_FIELDSINDEX1.AIRPORT=SCR_FIELDS-FIELDVALUE.CALLFUNCTION'VALUE_REQUEST_AIRPORT'CHANGINGAIRPORT=AIRPORTEXCEPTIONSCANCELLED=1NO_VALUES=2OTHERS=3.3IFSY-SUBRC=2.MESSAGEI008.ENDIF.CHECKSY-SUBRC=0.使用DYNP_VALUES_UPDATE功能模块将AIRPORT参数的内容读入SCR_FIELDS表并将当前字段内容放到屏幕上。READTABLESCR_FIELDSINDEX1.SCR_FIELDS-FIELDVALUE=AIRPORT.MODIFYSCR_FIELDSINDEX1.CALLFUNCTION'DYNP_VALUES_UPDATE'EXPORTINGDYNAME='SAPMTZB0'DYNUMB=SY-DYNNRTABLESDYNPFIELDS=SCR_FIELDSEXCEPTIONSOTHERS=04.ENDFORM.VAL_REQ_AIRPORTVALUE_REQUEST_AIRPORT功能模块负责该程序中值列表的输出。首先检查是否输入了一般机场名。如果是,则对特殊字符进行转换,以便后面的SELECT语句能使用该一般输入。*----------------------------------------------------------------**Localinterface:*CHANGING*VALUE(AIRPORT)LIKESPFLI-AIRPFROM*EXCEPTIONS*CANCELLED*NO_VALUES*----------------------------------------------------------------IFAIRPORTCA'+*'.SELECTION=AIRPORT.TRANSLATESELECTIONUSING'*%+_'.ELSE.SELECTION='%'.ENDIF.RETURN='BEGIN'.CALLSCREEN100STARTINGAT105ENDINGAT4115.CASERETURN.WHEN'SELE'.AIRPORT=SELECTION.WHEN'BREAK'.RAISECANCELLED.WHEN'NOVAL'.RAISENO_VALUES.ENDCASE.ENDFUNCTION.屏幕100(用CALLSCREEN调用)用作值帮助的弹出屏幕。在屏幕制作器中将该屏幕创建为空屏蔽。用SELECT获取数据,然后将其写入屏幕100的PBO模块LIST_PROCESSING的弹出屏幕中。MODULELIST_PROCESSINGOUTPUT.LEAVETOLIST-PROCESSINGANDRETURNTOSCREEN0.NEW-PAGELINE-SIZE31.SETPF-STATUS'POP_PICK'.SETTITLEBAR'TIT'.SELECT*FROMSAIRPORTWHEREIDLIKESELECTION.WRITE:/SY-VLINENO-GAP,SAIRPORT-IDCOLOR4INTENSIFIEDOFFNO-GAP,SY-VLINENO-GAP,SAIRPORT-NAMECOLOR2INTENSIFIEDOFFNO-GAP,SY-VLINENO-GAP.HIDESAIRPORT.ENDSELECT.IFSY-SUBRCNE0.RETURN='NOVAL'.ENDIF.ULINE.LEAVESCREEN.ENDMODULE.LIST_PROCESSINGOUTPUT在编写PROCESSONVALUE-REQUEST程序时,要记住必须能选定值并能将其复制到所属的屏幕中。在执行HIDESAIRPORT时,用SELECT获取的所有值都被记录下来。然后,用光标选定一行并按下菜单制作器中被赋予PICK功能的功能键(通常为F2)之后,对ATLINE-SELECTION进行处理,即自动用存储值对该
本文标题:SAP的ABAP4语言中文培训教材第三部分第十章编写字段-和值-帮助程序
链接地址:https://www.777doc.com/doc-2849193 .html