多选画面的问题 [英] Problems with multiple selection screens

查看:24
本文介绍了多选画面的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

START-OF-SELECTION 在我的程序中没有被触发.我正在尝试使用 ABAP 中的多个选择屏幕根据书名和书作者获取书籍详细信息.有两个按钮,并根据这些选择屏幕打开.当我单击任何按钮时,将打开选择屏幕.但是在我从下拉列表中选择条目并单击执行按钮后,事务将使用按钮进入初始屏幕.根本不显示书籍详细信息.START-OF-SELECTION 未触发.请帮忙,我是ABAP的新手.这是我的程序

START-OF-SELECTION is not getting triggered in my program. I am trying to fetch book details based on book name and book author using multiple selection screens in ABAP. There are two pushbuttons and based on those selection screens are opened. When I click any of the push buttons, then selection screens are opened. But after I select entries from the dropdown list and click execute button, then the transaction goes to the initial screen with the pushbuttons. The book details are not displayed at all. START-OF-SELECTION is not triggered. Please help, I am a newbie in ABAP. Here is my program

 REPORT y_multiple_screen.

    TABLES: sscrfields.
    TYPE-POOLS: vrm.
    DATA: param    TYPE vrm_id,
          values   TYPE vrm_values,
          wa_value LIKE LINE OF values.



    DATA: it_ybook TYPE TABLE OF ybook,
          wa_ybook TYPE ybook.


    FIELD-SYMBOLS: <fs_book> TYPE ybook.


    SELECTION-SCREEN BEGIN OF BLOCK blocker WITH FRAME TITLE text-001 NO INTERVALS.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN PUSHBUTTON (30)  w_butn1 USER-COMMAND but1.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN PUSHBUTTON (30)  w_butn2 USER-COMMAND but2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP.

    SELECTION-SCREEN END OF BLOCK blocker.

    SELECTION-SCREEN BEGIN OF SCREEN 1100.
    PARAMETERS: p_author TYPE char255 AS LISTBOX VISIBLE LENGTH 20.


    SELECTION-SCREEN END OF SCREEN 1100.

    SELECTION-SCREEN BEGIN OF SCREEN 1200.

    PARAMETERS: p_bname TYPE char255 AS LISTBOX VISIBLE LENGTH 20.


    SELECTION-SCREEN END OF SCREEN 1200.

    INITIALIZATION.

      w_butn1 = 'Search by author name'.
      w_butn2 = 'Search by book name'.

      "At selection-screen output.

    AT SELECTION-SCREEN.
      IF sscrfields-ucomm EQ 'BUT1'.

        CALL SELECTION-SCREEN 1100.


      ELSEIF sscrfields-ucomm EQ 'BUT2'.

        CALL SELECTION-SCREEN 1200.
      ENDIF.

    AT SELECTION-SCREEN OUTPUT.

      CLEAR it_ybook.
      SELECT *
      FROM ybook
      INTO TABLE it_ybook.
      CLEAR values.
      CLEAR wa_ybook.
      CLEAR wa_value.
      LOOP AT it_ybook INTO wa_ybook.


        wa_value-key = wa_ybook-book_author.
        wa_value-text = wa_ybook-book_author.

        APPEND  wa_value TO values.
        CLEAR wa_ybook.
        CLEAR wa_value.
      ENDLOOP.



      CLEAR it_ybook.



      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          id              = 'P_AUTHOR'
          values          = values
        EXCEPTIONS
          id_illegal_name = 1
          OTHERS          = 2.


      CLEAR it_ybook.
      SELECT *
      FROM ybook
      INTO TABLE it_ybook.

      "CLEAR values.
      CLEAR wa_ybook.
      CLEAR wa_value.

      LOOP AT it_ybook INTO wa_ybook.


        wa_value-key = wa_ybook-book_name.
        wa_value-text = wa_ybook-book_name.

        APPEND  wa_value TO values.
        CLEAR wa_ybook.
        CLEAR wa_value.
      ENDLOOP.



      CLEAR it_ybook.



      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          id              = 'P_BNAME'
          values          = values
        EXCEPTIONS
          id_illegal_name = 1
          OTHERS          = 2.


    START-OF-SELECTION.
        WRITE:/10 'Book ID',40 'Book Name',70 'Book Author',100 'Book Price'.

        CLEAR it_ybook.
        CLEAR wa_ybook.
        SELECT *
        FROM ybook
        INTO TABLE it_ybook
        WHERE book_name = p_bname.
        LOOP AT it_ybook INTO wa_ybook.
          WRITE:/10 wa_ybook-book_id,40 wa_ybook-book_name,70 wa_ybook-book_author,100 wa_ybook-book_price.
          CLEAR wa_ybook.
        ENDLOOP.


        WRITE:/10 'Book ID',40 'Book Name',70 'Book Author',100 'Book Price'.

        CLEAR it_ybook.
        CLEAR wa_ybook.
        SELECT *
        FROM ybook
        INTO TABLE it_ybook
        WHERE book_author = p_author.
        LOOP AT it_ybook INTO wa_ybook.
          WRITE:/10 wa_ybook-book_id,40 wa_ybook-book_name,70 wa_ybook-book_author,100 wa_ybook-book_price.
          CLEAR wa_ybook.
        ENDLOOP.

推荐答案

START-OF-SELECTION 只会在您的主屏幕外触发(当您在第一个屏幕上点击执行时).

START-OF-SELECTION will only trigger off your main screen (when you hit execute on the first screen).

您可以通过更改 AT SELECTION-SCREEN 块来强制事件:

You can force the event by changing the AT SELECTION-SCREEN block:

AT SELECTION-SCREEN.
  IF sscrfields-ucomm EQ 'BUT1'.

    CALL SELECTION-SCREEN 1100.
    if sy-subrc = 0.  "the user clicked the execute button
      sscrfields-ucomm = 'ONLI'.  "set the system command for the next screen to execute
    endif.

  ELSEIF sscrfields-ucomm EQ 'BUT2'.

    CALL SELECTION-SCREEN 1200.
    if sy-subrc = 0.  "the user clicked the execute button
      sscrfields-ucomm = 'ONLI'.  "set the system command for the next screen to execute
    endif.

  ENDIF.

这篇关于多选画面的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆