REPORT ZDANY_DYN_LOCAL_TYPES.
****************** hardcoded "old style" local type*******************
* This is a normal hardcoded local type
types : begin of typ_hardcoded,
l_count type i,
lt_sflight type sflight.
types : end of typ_hardcoded.
* create a table based on hardcoded type
data : lt_hardcoded type table of typ_hardcoded.
****************** dynamic "new wave" local type *******************
types: typ_count type i.
field-symbols : <lt_dynamic> type any table.
data: dref type ref to data,
itab_type type ref to cl_abap_tabledescr,
struct_type type ref to cl_abap_structdescr,
elem_type type ref to cl_abap_elemdescr,
comp_tab type cl_abap_structdescr=>component_table,
comp_fld type cl_abap_structdescr=>component.
* We read information about each fields of SFLIGHT (see ABAP FAQ #2)
struct_type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT' ).
* We also need the information about the type "typ_count", note that
* we should use class cl_abap_elemdescr instead of cl_abap_typedescr
elem_type ?= cl_abap_elemdescr=>describe_by_name( 'TYP_COUNT' ).
* we read all fleids of SFLIGHT and create a component table
comp_tab = struct_type->get_components( ).
* We add manually the counter
comp_fld-name = 'L_COUNT'.
comp_fld-type = elem_type.
insert comp_fld into comp_tab index 1.
* we create the structure
struct_type = cl_abap_structdescr=>create( comp_tab ).
* ... and the internal table
itab_type = cl_abap_tabledescr=>create( struct_type ).
* The new thing here is the "type handle" which create a pointer to a handle
create data dref type handle itab_type.
* we finally assign a field symbol to the pointer because we cannot directly access a pointer.
assign dref->* to <lt_dynamic>.
* At the end of this small program, internal table lt_hardcoded and lt_dynamic are the same
分享到:
相关推荐
13. **动态编程**:ABAP允许动态地创建SQL语句、调用函数模块和处理变量,增加了代码的灵活性。 以上只是ABAP编程技术的一部分,实际应用中还有更多高级特性和技术,如WebDynpro、ABAP in Java(ABAP JVM)、Open ...
只有 Procedures 可以拥有自己的局部变量,而且程序语句是内部调用,而前两者处理块之间实行外部调用。 四、应用程序类型 应用程序类型可以分为两种:以 Report 关键字引导的应用程序可以执行,但不能定义功能模块...
- 用户可以使用`TYPES`声明自定义数据类型,`DATA`定义变量,`CONSTANTS`定义常量,`STATICS`定义局部静态变量,`FIELD-SYMBOLS`则用于通过地址访问变量。 4. **内表操作** - 内表是ABAP中的动态数组,可以用于...
- **字段符号的概念**:字段符号是一种动态数据对象,用于引用不同类型的数据对象。 - **定义字段符号**:创建字段符号的方法。 - **为内部字段定义字段符号**:针对内部字段的字段符号定义。 - **定义结构化的字段...
其中,仅Procedures可以拥有自己的局部变量,并且内部调用程序语句;而前两者之间的调用为外部调用。 - **应用程序类型**: - 可执行的(以Report关键字引导,不能定义功能模块但可以调用) - 模块池的(以...
- 变量声明:变量的定义和初始化是程序设计的基础,包括全局变量、局部变量和参数。 - 语句结构:包括IF-THEN-ELSE、CASE、LOOP等控制流结构。 3. **程序结构** - 程序头:定义程序的名称、接口和数据声明。 - ...
- **声明**:在ABAP中,变量、常量和数据类型都需要预先声明。例如,`DATA: lv_string TYPE string.` 定义了一个名为`lv_string`的变量,类型为字符串。 - **程序结构**:ABAP程序通常由几个部分组成,如初始化...
例如,使用`DATA`关键字声明局部变量,使用`TYPE`关键字定义数据类型。 2. **控制流**:包括条件语句(如`IF`、`ELSEIF`、`ELSE`)、循环语句(如`WHILE`、`DO`、`FOR`)以及选择结构(如`CASE`)。 3. **程序结构...
变量可以声明为全局或局部,根据其作用域决定生命周期。 3. **语句结构**:ABAP支持IF...THEN...ELSE,CASE,WHILE,DO等控制流语句,用于程序逻辑的控制。 4. **内部表**:内部表是一种动态的数据结构,用于存储...
- **Procedures**:具有局部变量和内部调用语句的独立过程。 4. **应用程序类型**: - **可执行的(Report)**:通过Report关键字定义,不包含功能模块,但能调用它们。 - **模块池的(Program)**:需要通过...
- **工作区**:通常使用局部变量来实现,用于在程序的不同部分之间传递数据。 ##### 2.6 使用字段符号 字段符号是一种特殊的指针,用于引用内表中的行。它们在处理不确定数量的数据时非常有用。 ##### 2.7 模块化...
- DATA声明:用于创建局部变量,例如`DATA: lv_variable TYPE i.` 这里定义了一个名为`lv_variable`的整型变量。 - CONSTANTS定义:用于创建常量,例如`CONSTANTS: lc_constant VALUE 'Constant Value'.` 2. 逻辑...
除了基本数据类型,ABAP还支持用户定义的数据类型,通过`TYPES`语句创建。例如,可以定义新的整数类型或包含多个字段的结构。这些自定义类型可以局部或全局定义,全局定义的类型可以通过SAP事务代码SE11进行管理。 ...
规范会规定子程序和函数模块的定义、参数传递、局部变量的使用,以及如何避免全局变量的滥用。 8. **日期**:处理日期和时间是常见的业务需求,规范会指导如何正确、高效地进行日期操作。 9. **NATIVE SQL**:ABAP...
局部变量仅在其被定义的作用域内可见,而全局变量在整个程序中都可被访问。 #### 1.10 Form、Function - **FORM**:用于定义子程序,可以包含多个执行部分。 - **FUNCTION**:用于定义可重用的代码块,通常用于执行...
只有过程可以拥有局部变量,并且内部调用语句。 5. **应用程序类型**: - **Report** 开头的程序是可执行的,它们可以直接运行,但不能定义功能模块。 - **Program** 开头的属于模块池程序,需要通过事务代码启动...
- **变量和函数**:Script支持定义局部变量和使用内置函数,增强格式的动态性。 - **表格和循环**:处理多行数据时,可以使用表格和循环结构。 - **国际化**:SAP Script支持多语言环境,可以轻松适应不同语言的...
- **表单变量**:定义和使用局部变量以存储和处理数据。 - **域和验证**:应用数据格式规则,确保输入数据的准确性和一致性。 - **函数模块集成**:调用SAP函数模块以执行特定业务逻辑或计算。 - **重复区域**:...