什么是NGAP(下一代ABAP平台)?SAPNetWeaver7.40与其ABAPApplicationServerASABAP7.40一起发布。在ASABAP7.40中,ABAP语言有一些不错的新特性。ASABAP7.40是ASABAP7.31(又名ASABAP7.03)的后继版本,后者是ASABAP7.02的后继版本,后者构建于ASABAP7.0之上。请注意,关于ABAP语言和ABAP语言环境,ASABAP7.31及其ASABAP7.40不是ASABAP7.30的后续版本。相反,ASABAP7.03已重命名为ASABAP7.31,因此ASABAP7.40是ASABAP7.02的继承者。ASABAP7.0发布后,ABAP语言的进一步发展主要在7.10、7.20、7.30代码行中完成,而大多数用户仍在使用7.0x代码行。为了让更大的开发者社区可以使用所有好的开发,几年前从7.2到7.02完成了一个主要的功能反向移植。7.2的所有功能(除了为RFC启用的基于类的异常和来自包违规的语法错误)在7.02中可用。7.2和7.3或7.02和7.03(又名7.31)之间没有ABAP语言增强。同时关闭7.10、7.20、7.30行代码。由于这一行的大部分开发(尤其是那些与ABAP语言本身无关的增强)无论如何都被反向移植到7.03,因此7.03被重命名为7.31,并且两条线合并为一条:7.0x->Line7.31。期间又开放了一行ABAP代码供SAP内部使用:ABAP8.0to8.04basedon7.2。这是有史以来第一行以非向后兼容方式进一步开发ABAP的代码行。事实上,许多被认为过时的功能已从这行代码中删除(甚至是逻辑数据库)。新的ASABAP是为NGAP(下一代ABAP平台)制作的,SAP在内部用于现代面向对象和基于框架的新产品开发,例如BusinessbyDesign。当然,遗留的ABAP程序很难在NGAP上运行。随着HANA的出现,ABAP需要在7.0x->7.31系列进一步发展。第一个结果是7.40。再一次,一个大的反向移植发生了。这次从8.0x到7.40。为NGAP开发的许多有用的ABAP功能回到了7.0x系列——这次是通过保持完全向后兼容性(由于这个限制,仍然有一些功能尚未向后移植)。从7.40开始,ABAP在与内核版本捆绑的支持包中得到进一步发展。提供给客户的第一个捆绑支持包是带有内核7.40的SP02。紧随其后的是带有核心741的SP05。更多捆绑的SP即将推出,每个都有自己的核心,因此具有新的ABAP功能。条件*&--------------------------------------------**&报告ZCAST2*&-------------------------------------------------------------------**&*&--------------------------------------------------------------------*报告zcast2.CLASSc1DEFINITION.ENDCLASS.CLASSc2DEFINITIONINHERITINGFROMc1.ENDCLASS.DATA:ref1TYPEREFTOc1,ref2TYPEREFTOc2.ref1=NEWc2().IFref1是c2.ref2的实例?=ref1.ENDIF.TRY.ref2?=ref1.CATCHcx_sy_move_cast_error.ENDTRY.DATA:jerry1TYPEREFTOc1,jerry2TYPEREFTOc2.DATA(lv)=COND布尔值(当jerry1是c2的实例时,则abap_true否则abap_false)。写入:lv.ASSERTlv=abap_false。上面代码中,变量lv是boolean类型,其值通过WHEN...THEN...ELSE...代码块进行计算。又如:DATA:lv_stringTYPEstring,lv_countTYPEint4value1.lv_string='Jerry'&&COND#(WHENlv_count=1THEN'Hello'ELSE'default').WRITE:/lv_string.FILTERS直接到一个内表执行根据一定的条件进行过滤操作,返回过滤后的新内表:*&---------------------------------------------------------------------**&报告ZFILTER*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORTZFILTER.CLASSdemoDEFINITION.PUBLICSECTION.CLASS-METHODS主要。ENDCLASS.CLASS演示实现。方法主要。数据载体TYPEspfli-carridVALUE'LH'。cl_demo_input=>add_field(CHANGINGfield=carrid)。来自VALUE'Frankfurt'的TYPEspfli-city的数据城市。cl_demo_input(更改字段=cityfrom)。数据spfli_tab类型标准表spfli带空键带非唯一排序键carr_cityCOMPONENTScarridcityfrom。从spfli中选择*进入表@spfli_tab。DATA(extract)=FILTER#(spfli_tabUSINGKEYcarr_cityWHEREcarrid=CONV#(to_upper(carrid))ANDcityfrom=CONV#(to_upper(cityfrom)))。cl_demo_output=>显示(提取)。DATA(rest)=FILTER#(spfli_tabEXCEPTUSINGKEYcarr_cityWHEREcarrid=CONV#(to_upper(carrid))ANDcityfrom=CONV#(to_upper(cityfrom)))。断言行(提取)+行(其余)=行(spfli_tab)。ENDMETHOD.ENDCLASS.START-OF-SELECTION。demo=>main().另一个例子:*&------------------------------------------------------------------**&报告ZFILTER_TEST*&----------------------------------------------------------------**&*&------------------------------------------------------------------*报告ZFILTER_TEST。*这里,内表itab必须至少有一个排序键或一个散列键用于访问。*这可以是不指定USINGKEY使用的主表键或*通过在USINGKEY后指定其名称primary_key,*或次要表键通过在USINGKEY.TYPES之后指定其名称来使用的表键:ty_language的开始,名称TYPE字符串,年份TYPEi,ty_language.TYPES结束:tt_languageTYPE标准表ty_language键PRIMARY_KEYCOMPONENTSnamewithUNIQUESORTEDKEYaaCOMPONENTSyear。“类型:tt_languageTYPETYPESTANDARDTABLEOFty_language.TYPES:BEGINOFty_employee,empl_nameTYPEstring,lang_nameTYPEstring,yearTYPEi,ENDOFty_employee.TYPES:tt_employeeTYPETYPESTANDARDTABLEOFty_employeeWITHKEYempl_name.data:lt_languagetypett_language。lt_language=value#((name='ABAP'year=10)(name='Java'year=7)).DATA:lt_employee1TYPEtt_e??mployee,lt_employee2TYPEtt_language.*way1LOOPATlt_languageASSIGNINGFIELD-SYMBOL(
