ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SAP BPS 变量完美级联 - Variables in web interaces

SAP BPS 变量完美级联 - Variables in web interaces

原创 Linux操作系统 作者:leniz 时间:2011-05-27 17:42:05 0 删除 编辑

    在前一篇中,我们实现了级联的设计,但是存在缺陷,因为之前的设计没有把下一级本身的权限考虑进去,所以有可能会把用户没有的权限显示出来,所以在新的设计中,加入了非有效下级的剔除功能。

FUNCTION z_variable_user_exit_attr.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_AREA) TYPE  UPC_Y_AREA
*"     VALUE(I_VARIABLE) TYPE  UPC_Y_VARIABLE
*"     VALUE(I_CHANM) TYPE  UPC_Y_CHANM OPTIONAL
*"     VALUE(ITO_CHANM) TYPE  UPC_YTO_CHA
*"  EXPORTING
*"     REFERENCE(ETO_CHARSEL) TYPE  UPC_YTO_CHARSEL
*"  EXCEPTIONS
*"      FAILED
*"----------------------------------------------------------------------

* -------------------------------------------------------------------
* fill export table eto_charsel of structure UPC_YS_CHARSEL
*   fields: CHANM -  Characteristic
*           SEQNO -  Sequence Number
*           SIGN  -  +/- Sign of Selection Criterion
*           OPT   -  Selection Condition (EQ, BT, ...)
*           LOW   -  Lower Limit of the Selection Conditions
*           HIGH  -  Upper Limit of Selection Conditions
* --------------------------------------------------------------------

* clear export table
  CLEAR eto_charsel.


  DATA l_eto_charsel_wa TYPE upc_ys_charsel.
  DATA: l_month(2).
  DATA:
  l_source_var TYPE upc_y_variable VALUE '',
  l_source_area TYPE upc_y_area VALUE 'ZSDPLAN1',
  l_use_restricted_values TYPE boole-boole VALUE 'X',
  l_buffer_call TYPE boole-boole VALUE ''.
  DATA:
  l_subrc LIKE sy-subrc,
  ls_return LIKE bapiret2,
  l_type LIKE upc_var-vartype,
  lto_varsel_all TYPE upc_yto_charsel,
  lto_varsel TYPE upc_yto_charsel,
  lto_var TYPE upc_yto_charsel,
  lto_chanm TYPE upc_yto_cha.
  DATA: ls_varsel TYPE upc_ys_charsel,
  l_comp(4) TYPE c,
  l_entries TYPE i.

  DATA:

  l_error TYPE c,
  ls_hiesel TYPE upc_ys_api_hiesel,
  ls_cha TYPE upc_ys_cha,
  lt_cha TYPE STANDARD TABLE OF upc_ys_cha,
  ls_varsel_all TYPE upc_ys_api_varsel,
  lt_varsel_all TYPE STANDARD TABLE OF upc_ys_api_varsel,
  lt_return TYPE STANDARD TABLE OF bapiret2.

  CASE   i_variable .
    WHEN  'ZORGEX'.
* read source value
      l_source_var = 'ZCOMPANY'.
      l_source_area = i_area .

"这里把用户的原始权限抓取过来
      CALL FUNCTION 'API_SEMBPS_VARIABLE_GETDETAIL'
        EXPORTING
          i_area         = i_area
          i_variable     = 'ZSALESOG'  "AUTHORIZATION VARIABLE
        IMPORTING
          e_subrc        = l_subrc
          es_return      = ls_return
          e_type         = l_type
          es_hiesel      = ls_hiesel
        TABLES
          etk_cha        = lt_cha
          etk_varsel_all = lt_varsel_all.

      CALL FUNCTION 'Z_VARIABLE_GET_DETAIL'
        EXPORTING
          i_area         = l_source_area
          i_variable     = l_source_var
          i_buffer       = l_buffer_call
        IMPORTING
          e_subrc        = l_subrc
          es_return      = ls_return
          e_type         = l_type
          eto_varsel_all = lto_varsel_all
          eto_varsel     = lto_varsel
          eto_chanm      = lto_chanm.
      IF l_subrc <> 0.
        MESSAGE i136(upc_fw) WITH l_source_var.
* Values of variable &1 cannot be determined
        EXIT.
      ENDIF.

* We have a single value for the year and only one characteristic
* => our value is stored in the first line
      IF l_use_restricted_values IS INITIAL.
        lto_var = lto_varsel_all.
      ELSE.
        lto_var = lto_varsel.
      ENDIF.
      READ TABLE lto_var INTO ls_varsel INDEX 1.
* check prerequisites:
* - record found?
      IF sy-subrc <> 0.
        MESSAGE i147(upc_fw) WITH l_source_var.
* Variable &1 does not contain any values
        EXIT.
      ENDIF.
* - exactly one record and characteristic?
      DESCRIBE TABLE lto_var LINES l_entries.
      IF l_entries <> 1.
        MESSAGE i534(upc) WITH l_source_var.
* Variable &1 must be restricted to a value
        EXIT.
      ENDIF.
* is there a next year?
      l_comp = ls_varsel-low.

      CLEAR:l_eto_charsel_wa.
      l_eto_charsel_wa-chanm = i_chanm.
      l_eto_charsel_wa-seqno = '0000'.
      l_eto_charsel_wa-sign  = 'I'.
      l_eto_charsel_wa-opt   = 'EQ'.

*      l_eto_charsel_wa-low = l_comp .
      SELECT salesorg INTO l_eto_charsel_wa-low
      FROM  /bi0/msalesorg
      WHERE comp_code = l_comp.
        l_eto_charsel_wa-seqno = l_eto_charsel_wa-seqno + 1.

"把下级值和用户的原始变量值作对比,剔除无效的值
        READ TABLE lt_varsel_all TRANSPORTING NO FIELDS
        WITH KEY low = l_eto_charsel_wa-low.
        IF sy-subrc EQ 0.
          INSERT l_eto_charsel_wa INTO TABLE eto_charsel.
        ENDIF.
      ENDSELECT.


    WHEN 'ZOFFEX'.
      ......

  ENDCASE.


ENDFUNCTION.

通过以上,可以做到动态刷新取值,并且做到下级值的有效性检查。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-696452/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-31

  • 博文量
    448
  • 访问量
    1111290