2016-08-22 5 views
2

Я новичок в ABAP. Я создал отчет, который в основном обрабатывает CRUD для базы данных, уже построенной с помощью функциональных модулей. Он имеет несколько экранов выбора для каждой функции. Есть ли способ выполнить READ и распечатать его на экране с помощью «write», а затем вернуться к первоначальному экрану выбора?ABAP вернуться к первоначальному экрану выбора после записи

DATA: lv_response1 TYPE flag, 
     lv_response2 TYPE flag, 
     lv_response3 TYPE flag. 



SELECTION-SCREEN BEGIN OF SCREEN 100. 
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-t01. 

PARAMETERS: s1 RADIOBUTTON GROUP g1, 
      s2 RADIOBUTTON GROUP g1, 
      s3 RADIOBUTTON GROUP g1, 
      s4 RADIOBUTTON GROUP g1, 
      s5 RADIOBUTTON GROUP g1. 

SELECTION-SCREEN END OF BLOCK B1. 
SELECTION-SCREEN END OF SCREEN 100. 

SELECTION-SCREEN BEGIN OF SCREEN 200. 
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-t02. 
PARAMETERS: p_skill TYPE Z0B_SKILL_ACR, 
      p_skills type Z0B_SKILL_SUBDOM_ACR, 
      p_skilld TYPE Z0B_SKILL_NAME, 
      p_skilll TYPE z0b_linguistic. 
SELECTION-SCREEN END OF BLOCK B2. 
SELECTION-SCREEN END OF SCREEN 200. 

SELECTION-SCREEN BEGIN OF SCREEN 300. 
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-t03. 
PARAMETERS: p_skid TYPE z0b_skillid, 
      p_all TYPE flag. 
SELECTION-SCREEN END OF BLOCK B3. 
SELECTION-SCREEN END OF SCREEN 300. 

SELECTION-SCREEN BEGIN OF SCREEN 400. 
SELECTION-SCREEN BEGIN OF BLOCK B4 WITH FRAME TITLE TEXT-t04. 
PARAMETERS: p_skacr TYPE z0b_skill_acr, 
      p_skdesc TYPE z0b_skill_name. 
SELECTION-SCREEN END OF BLOCK B4. 
SELECTION-SCREEN END OF SCREEN 400. 

SELECTION-SCREEN BEGIN OF SCREEN 500. 
SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-t05. 
PARAMETERS p_dskid TYPE z0b_skillid. 
SELECTION-SCREEN END OF BLOCK B5. 
SELECTION-SCREEN END OF SCREEN 500. 

CALL SELECTION-SCREEN 100. 
IF s1 = 'X'. 
    "Create skill 
    CALL SELECTION-SCREEN 200. 
    CALL FUNCTION 'Z0B_ADD_NEW_SKILL' 
    EXPORTING 
     IV_SKILL_ACR   = p_skill 
     IV_SKILL_SUBDOM  = p_skills 
     IV_SKILL_DESC  = P_skilld 
     IV_SKILL_LINGUISTIC = p_skilll 
    IMPORTING 
     EV_CHECK_SUBDOM  = lv_response1 
     EV_CHECK_SKILL_ACR_A = lv_response2 
     EV_CHECK    = lv_response3. 
    IF lv_response1 eq 0. 
    WRITE:/ 'Subdomain does not exist.'. 
    ENDIF. 
    IF lv_response2 eq 1. 
    WRITE:/ 'Skill already exists.'. 
    ENDIF. 
    IF lv_response3 eq 0. 
    WRITE:/ 'Database error.'. 
    ENDIF. 
    IF lv_response1 eq 1 AND lv_response2 eq 0 AND lv_response3 eq 1. 
    WRITE:/ 'Skill created successfully.'. 
    ENDIF. 
    EXIT. 
ENDIF. 
*********************************************************************************************************** 
IF s2 = 'X'. 

    "Read skill 

    CALL SELECTION-SCREEN 300. 
    data: lt_skills type Z0B_MY_SKILLS_T, 
     ls_skills type z0b_skills_t. 
    IF p_all is not INITIAL. 
    CALL FUNCTION 'Z0B_GET_ALL_SKILLS' 
    IMPORTING 
     ET_NONLINGUISTIC_SKILLS  = lt_skills 
     EV_CHECK      = lv_response2 
* EXCEPTIONS 
* NO_SKILL      = 1 
* OTHERS      = 2 
       . 
    write 'Non-linguistic skills'. 
    LOOP AT lt_skills into ls_skills. 
     write:/ls_skills-skillid, ls_skills-skill_text, ls_skills-skill_acr. 
    ENDLOOP. 
    CALL FUNCTION 'Z0B_GET_LANG' 
    IMPORTING 
     ET_LINGUISTIC_SKILLS  = lt_skills 
     EV_CHECK     = lv_response3 
* EXCEPTIONS 
* NO_SKILL     = 1 
* OTHERS      = 2 
     . 
    write:/. 
    write:/ 'Linguistic skills'. 
    LOOP AT lt_skills into ls_skills. 
     write:/ls_skills-skillid, ls_skills-skill_text, ls_skills-skill_acr. 
    ENDLOOP. 

    IF lv_response3 eq 0 and lv_response2 eq 0. 
     WRITE:/ 'No entries.'. 
    endif. 
    exit. 
    ENDIF. 

    CALL FUNCTION 'Z0B_READ_MASTERDATA_SKILL' 
    EXPORTING 
     IV_SKILLID = p_skid 
    IMPORTING 
     ET_SKILLS = lt_skills 
     EV_CHECK = lv_response3 
* EXCEPTIONS 
*  NO_DATA = 1 
*  OTHERS  = 2. 

    IF lv_response3 eq 0. 
    WRITE:/ 'Database error.'. 

    ENDIF. 
    LOOP AT lt_skills into ls_skills. 
    write:/ls_skills-skill_text, ls_skills-skill_acr. 
    ENDLOOP. 
endif. 
*********************************************************************************** 
IF s3 = 'X'. 
    " Update a skill 
    CALL SELECTION-SCREEN 400. 
    CALL FUNCTION 'Z0B_MODIFY_SKILL' 
    EXPORTING 
     IV_SKILLS_ACR  = p_skacr 
     IV_SKILLS_DESC  = p_skdesc 
    IMPORTING 
    EV_CHECK    = lv_response1 
* EXCEPTIONS 
* NO_SKILL    = 1 
* NO_DATA    = 2 
* NO_UPDATE   = 3 
* OTHERS    = 4 
      . 
    IF lv_response1 = 0. 
    WRITE 'Failed.'. 
    else. 
    write 'Skill modified successfully'. 
    ENDIF. 
ENDIF. 
*********************************************************************************** 
IF s4 = 'X'. 
    CALL SELECTION-SCREEN 500. 
    CALL FUNCTION 'Z0B_DELETE_SKILL' 
    EXPORTING 
     IV_SKILLS_ID  = p_dskid 
    IMPORTING 
    EV_CHECK   = lv_response1 
* EXCEPTIONS 
* NO_SKILL   = 1 
* NO_MOVE   = 2 
* NO_DELETE_1  = 3 
* NO_DELETE_2  = 4 
* SKILL_USED   = 5 
* OTHERS    = 6 
      . 
    IF lv_response1 = 0. 
    WRITE 'Failed.'. 
    else. 
    write 'Skill deleted successfully'. 
    ENDIF. 
ENDIF. 
+2

Показать код. И прекратите удаление вопросов после того, как найдете ошибку, иначе люди больше не будут вам помогать. – vwegert

ответ

2

Удалить SELECTION-SCREEN BEGIN/END OF SCREEN 100. Таким образом, экран 100 станет стандартным экраном выбора (1000), тогда также нет необходимости называть его больше. Итак, замените CALL SELECTION-SCREEN 100 на START-OF-SELECTION. С этими изменениями вы вернетесь к экрану выбора, когда вы нажимаете стрелку назад на экране вывода.

Возможно, вам также придется удалить EXIT.

+0

Решил мою проблему. Спасибо! –