ABAP指针

    技术2022-05-20  39

    1.      什么是ABAP指针:在ABAP里面,field symbol就相当于c语言的指针。如果你定义并且分配了相应的结构或者变量给它,其实它就指

    向这个结构或者变量的地址,如果修改了field symbol的值,则相应结构或者变量的值也随之更改。

    2.      如何定义指针:基本形式:FIELD-SYMBOLS <fs>.附加信息:  1. ... TYPE :定义一个数据类型,然后定义指针  2. ... TYPE REF TO :指针指向类或者接口  3. ... TYPE REF TO :指针指向数据结构  4. ... TYPE LINE OF :指针内表的行项目  5. ... LIKE :指针为数据库表类型  6. ... LIKE LINE OF :指针类型为数据库表的行项目

    3.      如何分配指针:(1). ASSIGN f TO .:分配一个指针,包括以下几种类型1. ... CASTING ... :主要对unicode系统地操作  1a. ... CASTING  1b. ... CASTING TYPE type  1c. ... CASTING ... DECIMALS dec  1d. ... CASTING LIKE f12. ... TYPE type :直接指定类型3. ... DECIMALS dec :指定小数点位数4. ... RANGE range:指定范围(2). 分配结构中的某个字段给指针ASSIGN COMPONENT idx  OF STRUCTURE struc TO .ASSIGN COMPONENT name OF STRUCTURE struc TO .(3). 分配类的方法给指针ASSIGN dref->* TO .(4). 从f开始,是f的n倍长之后的内容分配给指针ASSIGN f INCREMENT n TO .(5). 分配局部变量给指针ASSIGN LOCAL COPY    3a. ASSIGN LOCAL COPY OF f TO .    3b. ASSIGN LOCAL COPY OF INITIAL f TO .    3c. ASSIGN LOCAL COPY OF INITIAL LINE OF itab TO .    4c. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO .(6). ASSIGN dynamicJ:动态分配指针    4a. ASSIGN (f) TO .    4b. ASSIGN oref->(f) TO .    4c. ASSIGN (f1)=>(f2) TO .    4d. ASSIGN TABLE FIELD (f) TO .    4e. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO .    4f. ASSIGN LOCAL COPY OF ... (f) TO .

    4.      如何取消分配:    UNASSIGN .

     

     

    不清楚内表内表到底是itab还是itab2,但是又要访问内表里的第2个字段。所以在loop的时候不能用to到一个结构体,而要用assigning一个指向ANY的指针,然后进行后面的操作。

    IF n = 1.  ASSIGN itab[] TO <tab_fs>. " <tab_fs>是指向standard table的ELSE.  ASSIGN itab2[] TO <tab_fs>.ENDIF.LOOP AT itab[] ASSIGNING <wa_fs>.  ASSIGN COMPONENT 2 OF STRUCTURE <wa_fs> TO <field_fs>. ”filed_fs是ANY的  WRITE: / <field_fs>.ENDLOOP.

     

    具体实现:

     1.结构的动态查询

    DEFINE SELECT_DATA_TO_WA.  SELECT &1    FROM &2    INTO CORRESPONDING FIELDS OF &3   WHERE (&4).    EXIT.  ENDSELECT.END-OF-DEFINITION.

    2.变量的动态查询

    DEFINE SELECT_DATA_TO_VARIANT.  SELECT &1    FROM &2    INTO &3   WHERE (&4).    EXIT.  ENDSELECT.END-OF-DEFINITION.

    3.内表的动态查询

    DEFINE SELECT_DATA_TO_VARIANT.  SELECT &1    FROM &2    INTO CORRESPONDING FIELDS OF TABLE &3   WHERE (&4).    EXIT.  ENDSELECT.END-OF-DEFINITION.

    具体程序实现:

    DATA: L_FIELD(100) TYPE C,      L_TABLE(10)  TYPE C,      L_COND(100)  TYPE C.

    DATA: I_COND TYPE TALBE OF L_COND.

    FIELD-SYMBOLS TYPE ANY.

    START-OF-SELECTION.

      CONCATENATE 'CARRID' 'CONNID' 'CITYFROM'         INTO L_S  SEPARATE BY SPACE.

      CONCATENATE 'CONNID = ' '0123'         INTO L_COND.

    APPEND COND TO I_COND.

    L_TABLE = 'SPFLI'.

    IF IS ASSIGNED.

      UNASSIGN .  ASSIGN SPFLI TO .

    ELSE.

      ASSIGN SPFLI TO .

    ENDIF.

    SELECT_DATA_TO_WA (L_S) (L_TABLE) I_COND.


    最新回复(0)