SAP 内存管理与ALV双击事件的实现(备忘)

文章目录
1.SAP内存分类
2.内部会话中程序之间的调用
3.ALV双击事件中调用事务码并实现窗口与SAP内存之件的读写访问

1.SAP内存分类
1.1 SAP内存

  • 主会话之件数据共享
  • 通过set/get parameter语句共享不同ABAP内存领域之间的内存
SET /GET  PARAMETER ID XXX FIELD XXX

SET是给 FIELD 后的字段设置PARAMETER ID ;GET是获取FIELD后的字段 到PARAMETER ID 指定的内存块中。
1.2 ABAP内存

  • 同一个外部窗口 里:内部会话之件共享的内存
  • 基本语句:
  • 写入内存:EXPORT xxx TO MEMORY ID xxx.
  • 读取内存:IMPORT xxx TO MEMORY ID xxx.
  • 删除内存: FREE MEMORY ID [key] 不加 key则会删除整个MEMORY ID 内存.
    使用 call transaction /submit/call dialog 等命令调用其他程序时,会生成内部会话并共享ABAP内存中的数据

2.内部会话中程序之间的调用(跟SAP以及ABAP内存无关,仅仅讲述内部会话之间调用的两种方式)

1.SUBMIT 调用程序

SUBMIT program
   WITH  p_1  =  val_1   //这里一般传的是PARAMWTER  中拿到的数据
   WITH  s_1  in s_1      //这里一般传参数传的是SELECTION-OPTIONS  中拿到的数据 ,当然也可以从RANGES 内表中拿,SELECT-OPTIONS和RANGES 都是带有表头行的内表
   VIA SELECTION SCREEN //调用程序时停留在被调用程序的选择界面
   AND  RETRURN.    //执行完毕后返回当前程序

2.直接调用事务码

CALL TRANSACTION  'TCODE'  AND SKIP FIRST SCREEN.

AND SKIP FIRST SCREEN 跳过初始界面
TPARA SAP 标准参数的数据库 SM30维护条目
1.ALV双击事件中调用事务码并实现窗口与SAP内存之件的读写访问
实现双击功能:双击执行事务码,并跳转到相应界面,通过PARAMETER ID 带一个参数过来

FORM user_command USING p_ucomm LIKE sy-ucomm
                        p_selfield TYPE slis_selfield.

  DATA: lv_grid TYPE REF TO cl_gui_alv_grid.

*  alv数据发生改变设置刷新
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lv_grid.

  CALL METHOD lv_grid->check_changed_data.
  p_selfield-refresh = 'X'.  "自动刷新

  CASE p_ucomm.
    WHEN '&IC1'.
//    IF p_selfield-sel_tab_field = '1-AUFNR'.

      IF p_selfield-fieldname = 'AUFNR'.
        READ TABLE gt_result INDEX p_selfield-tabindex.
        IF sy-subrc = 0.
        IF p_selfield-value IS NOT INITIAL.

//       CONCATENATE '00' p_selfield-value INTO p_selfield-value.
//         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
//           EXPORTING
//             input         = p_selfield-value
//          IMPORTING
//            OUTPUT        = p_selfield-value.

          SET PARAMETER ID 'BR1' FIELD gt_result-aufnr.
//        p_selfield-value.
          CALL TRANSACTION 'COR2' AND SKIP FIRST SCREEN .
        ENDIF.

        ENDIF.
      ENDIF.
//   ENDIF.
  ENDCASE.
ENDFORM.

双击事件的实现:

  1. List item在ALV按钮部分功能 中加入 WHEN '&IC1’这个选项,它既可以指代单击,也可以指代双击。
  2. 单击时一般要设置热点
    (1)可以在相应列的Fieldcat中打上X
    WA_FIELDCAT-HOTSPOT = ‘X’.其中 WA_FIELDCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV,
    (2)也可以在 layout 中的key-hotspot打上X.
  3. SE41中拷贝标准GUI状态
  4. 程序中给出的代码含义:先确定双击后所在列。双击所在的列名为AUFNR情况下,才会根据双击的单元格行读展示ALV展示用表,这个时候已经根据行列确定了唯一的一个单元格。如果p_selfield-value单元格内容不空,读gt_result-aufnr 到SAP内存中PARAMETER ID 为 BR1 的部分。

注释掉的部分实际上实现的相同的操作:含义是: IF p_selfield-sel_tab_field = ‘1-AUFNR’. 如果你点击的是ALV单元格中的’AUFNR’这列,执行以下操作,连接0到p_selfield-value中,读p_selfield-value的值到SAP内存中PARAMETER ID 为 BR1 的部分。
行: p_selfield-tabindex
列名:p_selfield-fieldname
单元格的值:p_field-value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值