搜索帮助--返回多列值

函数:F4IF_INT_TABLE_VALUE_REQUEST设置搜索帮助

  参数:retfield      返回字段的ID(如需返回多个字段值,参过参数(callback_form)设置)

                  callback_program  下面Form的程序

        callback_form    通过此参数传递Form名

                 表value_tab    可选择的值表

                 表return_tab    选择后,返回的选择值

函数:DYNP_VALUES_UPDATE更新画面字段值

  参数:dyname  程序sy-repid

       dynumb  画面sy-dynnr

     ynpfields  需要设置的字段和值

DATA: BEGIN OF lt_value OCCURS 0,"搜索帮助显示字段
          name  TYPE crhh-name,
          werks TYPE crhh-werks,
          ktext TYPE crtx-ktext,
          spras TYPE crtx-spras,
        END OF lt_value.
  DATA:lt_return LIKE ddshretval OCCURS 0 WITH HEADER LINE,
       lt_field  LIKE dfies OCCURS 0 WITH HEADER LINE.
  DATA:lt_dynpfields TYPE TABLE OF dynpread,
       ls_dynpfields TYPE dynpread.
* 取得搜索值
  SELECT crhh~name crhh~werks crtx~ktext crtx~spras INTO TABLE lt_value
    FROM crhh INNER JOIN crid ON crid~objty = crhh~objty
                             AND crid~objid = crhh~objid
              INNER JOIN crtx ON crid~objty = crtx~objty
                             AND crid~objid = crtx~objid
   WHERE crhh~objty = 'H'
     AND crtx~spras = sy-langu.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield               = 'NAME'     "选择后,返回的字段ID
      dynpprog               = sy-cprog
      dynpnr                 = sy-dynnr
      value_org              = 'S'       "C: cell by cell, S: structured
      callback_program       = sy-repid
      callback_form          = 'CB_FORM' "返回多列时的调用Form
    TABLES
      value_tab              = lt_value[]  "选择帮助显示值
*      field_tab              = lt_field
      return_tab             = lt_return    "选择值(如果多列会返回多条)
    EXCEPTIONS
      parameter_error        = 1
      no_values_found        = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
*  编辑画面字段值
    LOOP AT lt_return.
      ls_dynpfields-fieldname = lt_return-retfield. "选择字段ID
      ls_dynpfields-fieldvalue = lt_return-fieldval. "字段值
      APPEND ls_dynpfields TO lt_dynpfields.
    ENDLOOP.
*  上个函数返回第一次段为~,此处更新
    ls_dynpfields-fieldname = 'P_HNAME'.
    MODIFY lt_dynpfields FROM ls_dynpfields INDEX 1 TRANSPORTING fieldname.
*  更新画面字段值
    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        dyname               = sy-repid
        dynumb               = sy-dynnr
      TABLES
        dynpfields           = lt_dynpfields
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        undefind_error       = 7
        OTHERS               = 8.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  cb_form
*&---------------------------------------------------------------------*
FORM cb_form TABLES record_tab STRUCTURE seahlpres
              CHANGING shlp TYPE shlp_descr
                      callcontrol LIKE ddshf4ctrl.
  DATA: interface LIKE LINE OF shlp-interface.
  READ TABLE shlp-interface INTO interface INDEX 1.
*  interface-shlpfield+4(1) = '3'.
*  interface-valfield = 'P_HNAME'.
*  APPEND interface TO shlp-interface.
  interface-shlpfield+4(1) = '2'.     "设置选择值后需要返回的字段索引
  interface-valfield = 'P_WERKS'.   "设置返回字段的ID
  APPEND interface TO shlp-interface.

ENDFORM.                    "bo_callback_form
View Code

猜你喜欢

转载自www.cnblogs.com/li-wei-/p/10207625.html