cancel
Showing results for 
Search instead for 
Did you mean: 

Webdynpro Form

Former Member
0 Kudos

Dear Expertise

I  have created a ALV  Webdynpro Form.

There's a requirement that  i have to create a Drop down in which i have to take 3 options and display the data as

Approved

Pending

Rejected


Can anyone help me in this scenario what should i do ?




Regards

varun

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Varun,

please go through the below code .

*Data declarations for dropdown lists for f4
DATA: it_dropdown TYPE lvc_t_drop,
  ty_dropdown TYPE lvc_s_drop,
*data declaration for refreshing of alv
  stable TYPE lvc_s_stbl.


*Global variable declaration
DATA: gstring TYPE c.


*Data declarations for ALV
DATA: c_ccont TYPE REF TO cl_gui_custom_container, "Custom container object
  c_alvgd TYPE REF TO cl_gui_alv_grid, "ALV grid object
  it_fcat TYPE lvc_t_fcat, "Field catalogue
  it_layout TYPE lvc_s_layo. "Layout
*ok code declaration


DATA:
  ok_code TYPE ui_func.


*To create drop down for the field 'DAVO'   "put your field name instead of DAVO.
* with our own f4 help
  ty_dropdown-handle = '1'.
  ty_dropdown-value = ' '.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '1'.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '2'.
  APPEND ty_dropdown TO it_dropdown.
  ty_dropdown-handle = '1'.
  ty_dropdown-value = '3'.
  APPEND ty_dropdown TO it_dropdown.

CALL METHOD c_alvgd->set_drop_down_table
  EXPORTING
  it_drop_down = it_dropdown.

  LOOP AT it_fcat INTO lv_fldcat.
  CASE lv_fldcat-fieldname.

* To assign dropdown in the fieldcataogue
  WHEN 'DAVO'.
  lv_fldcat-drdn_hndl = '1'.
  lv_fldcat-outputlen = 15.
  MODIFY it_fcat FROM lv_fldcat.
  ENDCASE.
  ENDLOOP.

* MODULE pai INPUT.

*To change the existing values and refresh the grid
*And only values in the dropdown or in the default
*F4 can be given , else no action takes place for the dropdown
*and error is thrown for the default F4 help and font changes to red
*and on still saving, value is not changed
  c_alvgd->check_changed_data( ).*Based on the user input
*When user clicks 'SAVE;
  CASE ok_code.
  WHEN 'SAVE'.*A pop up is called to confirm the saving of changed data
  CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
  titlebar = 'SAVING DATA'
  text_question = 'Continue?'
  icon_button_1 = 'icon_booking_ok'
  IMPORTING
  answer = gstring
  EXCEPTIONS
  text_not_found = 1
  OTHERS = 2.
  IF sy-subrc NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*When the User clicks 'YES'
  IF ( gstring = '1' ).
  MESSAGE 'Saved' TYPE 'S'.
*Now the changed data is stored in the it_pbo internal table
  it_pbo = it_output.
*Subroutine to display the ALV with changed data.
  PERFORM redisplay.
  ELSE.
*When user clicks NO or Cancel
  MESSAGE 'Not Saved' TYPE 'S'.
  ENDIF.
**When the user clicks the 'EXIT; he is out
  WHEN 'EXIT'.
  LEAVE PROGRAM.
  ENDCASE.
  CLEAR: ok_code.ENDMODULE. " PAI INPUT
*&---------------------------------------------------------------------*
*& Form REDISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM redisplay .
*Cells of the alv are made non editable after entering OK to save  CALL METHOD c_alvgd->set_ready_for_input
  EXPORTING
  i_ready_for_input = 0.
*Row and column of the alv are refreshed after changing values  stable-row = 'X'.
  stable-col = 'X'.
*REfreshed ALV display with the changed values
*This ALV is non editable and contains new values
  CALL METHOD c_alvgd->refresh_table_display
  EXPORTING
  is_stable = stable
  EXCEPTIONS
  finished = 1
  OTHERS = 2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM. " REDISPLAY


Please reward if its helpful for you.


Regards,

Shambuling



Former Member
0 Kudos

Hi

getting this error as

ERROR: Exception condition "TYPE_NOT_FOUND" triggered (termination: RABAX_STATE)

Help

Regards

varun

Former Member
0 Kudos

Hi varun,

Have you mentioned the SAVE button as ok_code ?

Former Member
0 Kudos

Hi

I am not working on module pool.

so whats use of Ok_code.

problem is with select options .

help.

Regards

varun

former_member193460
Contributor
0 Kudos

Varun,

     Please explain your requirement precisely, its very vague as of now.

i havent understood whether you want a dropdown on the status field or you want to know a logic to populate approver name.

Help us understand your problem !

Regards,

Tashi

Former Member
0 Kudos

Hi

please help me to code for the approver one

first time when initiator approves it should be blank

then for first approver , it should show me the first approver name

and if first approver also passes , it should show approver2 name.

Help.

Regards

varun

former_member193460
Contributor
0 Kudos

The logic seems pretty straight forward But i see a decision you need to make regarding how you gonna display and store the user.

if you replace the approver field with user name(Person's name), then you will have difficulty later on to get report from user perspective. It always better to save the sap user name in the field rather than the person's actual name. If you want to have both, you need to use dropdown.

internal value will be the sap user and displayed will be the person's actual name.

Regarding the logic you wanted, i am still not sure of your requirement

Regards,

Tashi

former_member193460
Contributor
0 Kudos

Hi Varun,

     You can use dropdownbykey for this requirement. If the dropdown list is dynamically created then you should use dropdownbyindex.

i found this document which explains this scenario. Please refer

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/50d4f5b6-fd1b-2e10-3190-823bcaff9...

You can also read a brief about the difference of the two dropdown approaches.

Thanks & Regards,

Tashi

Former Member
0 Kudos

HI

this is my code of Submit click

method ONACTIONSUBMIT .

    DATA: RT_RFX_RANGE TYPE REF TO DATA,
         RT_DATE_RANGE TYPE REF TO DATA,
         RT_INIT_RANGE TYPE REF TO DATA,
         RT_PART_RANGE TYPE REF TO DATA.

   FIELD-SYMBOLS: <RFX_RANGE> TYPE TABLE,
                  <DATE_RANGE> TYPE TABLE,
                  <INIT_RANGE> TYPE TABLE,
                  <PART_RANGE> TYPE TABLE.

   DATA : IT_ERROR TYPE TABLE OF BBP_PDS_MESSAGES,
          WA_ERROR TYPE  BBP_PDS_MESSAGES.

* get message manager
   DATA LO_API_CONTROLLER     TYPE REF TO IF_WD_CONTROLLER.
   DATA LO_MESSAGE_MANAGER    TYPE REF TO IF_WD_MESSAGE_MANAGER.

   CALL METHOD WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD
     EXPORTING
       I_ID               = 'CRMT_OBJECT_ID_DB'
*     I_CHECK_OBLIGATORY = ABAP_TRUE
     RECEIVING
       RT_RANGE_TABLE     = RT_RFX_RANGE.

   ASSIGN RT_RFX_RANGE->* TO <RFX_RANGE>.

   CALL METHOD WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD
     EXPORTING
       I_ID               = 'BBP_POSTING_DATE'
*     I_CHECK_OBLIGATORY = ABAP_TRUE
     RECEIVING
       RT_RANGE_TABLE     = RT_DATE_RANGE.

   ASSIGN RT_DATE_RANGE->* TO <DATE_RANGE>.


   CALL METHOD WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD
     EXPORTING
       I_ID               = 'APB_ISR_USER'
*     I_CHECK_OBLIGATORY = ABAP_TRUE
     RECEIVING
       RT_RANGE_TABLE     = RT_INIT_RANGE.

   ASSIGN RT_INIT_RANGE->* TO <INIT_RANGE>.

   CALL METHOD WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD
     EXPORTING
       I_ID               = 'EMATNR'
*     I_CHECK_OBLIGATORY = ABAP_TRUE
     RECEIVING
       RT_RANGE_TABLE     = RT_PART_RANGE.

   ASSIGN RT_PART_RANGE->* TO <PART_RANGE>.

*************************************************************************
*  Display Error For no input value
*************************************************************************

   IF <RFX_RANGE> IS INITIAL AND <DATE_RANGE> IS INITIAL AND <INIT_RANGE> IS INITIAL AND <PART_RANGE> IS INITIAL.

     LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).

     CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
       RECEIVING
         MESSAGE_MANAGER = LO_MESSAGE_MANAGER.

* report message
     CALL METHOD LO_MESSAGE_MANAGER->REPORT_FATAL_ERROR_MESSAGE
       EXPORTING
         MESSAGE_TEXT = 'Input Selection Field'.
   ENDIF.

*****************************************************************
TYPES :BEGIN OF TY_ALV1,
         RFXNO TYPE ZACGT_QUOTHEADER-RFXNO,
         INITIATOR TYPE ZACGT_QUOTHEADER-INITIATOR,
         TYPE  TYPE ZACGT_QUOTHEADER-TYPE,
         MATRLTKN TYPE ZACGT_QUOTHEADER-MATRLTKN,
         STATUS TYPE ZACGT_QUOTHEADER-STATUS,
         FORMRDATE TYPE ZACGT_QUOTHEADER-FORMRDATE,
         PARTNO TYPE ZACGT_QUOTITEM-PARTNO,
         PARTDESC TYPE ZACGT_QUOTITEM-PARTDESC,
         VENDOR TYPE ZACGT_QUOTITEM-VENDOR,
         END OF TY_ALV1.

   DATA : IT_ALV TYPE TABLE OF TY_ALV1,
          WA_ALV TYPE TY_ALV1.



**TYPES: BEGIN OF TY_ALV,
**        RFXNO TYPE ZACGT_QUOTHEADER-RFXNO,
**        INITIATOR TYPE ZACGT_QUOTHEADER-INITIATOR,
**        TYPE  TYPE ZACGT_QUOTHEADER-TYPE,
**        FORMRDATE TYPE ZACGT_QUOTHEADER-FORMRDATE,
**        STATUS TYPE ZACGT_QUOTHEADER-STATUS,
**       END OF TY_ALV.


TYPES: BEGIN OF TY_ITEM,
        VENDOR TYPE ZACGT_QUOTITEM-VENDOR,
        PARTNO TYPE ZACGT_QUOTITEM-PARTNO,
        PARTDESC TYPE ZACGT_QUOTITEM-PARTDESC,
        END OF TY_ITEM.

DATA : IT_ITEM TYPE TABLE OF TY_ITEM,
        WA_ITEM TYPE TY_ITEM.

**DATA: IT_ALV TYPE TABLE OF TY_ALV,
**      WA_ALV TYPE TY_ALV.

DATA :it_stat TYPE STANDARD TABLE OF ZACGT_QUOTSTATUS,
       wa_stat TYPE ZACGT_QUOTSTATUS.

    DATA LO_ND_ALV TYPE REF TO IF_WD_CONTEXT_NODE.
    DATA LT_ALV TYPE WD_THIS->ELEMENTS_ALV.
    DATA LS_ALV TYPE WD_THIS->ELEMENT_ALV.
     DATA wa_fill_table TYPE ZACGST_ME11_STATUS.
     DATA wa_fill_table1 TYPE ZACGST_ME11_STATUS.
     DATA cnt TYPE i.
     DATA: cnt1 TYPE i,
           SR type i VALUE '1',
           INFO TYPE ZACGT_ME11_INFO-MESG.

*  navigate from <CONTEXT> to <ALV> via lead selection
    LO_ND_ALV = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_ALV ).


** SELECT RFX_NO APPROVER STA_DATE REMARK STATUS
**        FROM ZACGT_QUOTSTATUS
**        INTO TABLE LT_ALV
**        WHERE rfx_no in <RFX_RANGE> OR STA_DATE in <DATE_RANGE>.

**SELECT RFXNO INITIATOR TYPE FORMRDATE STATUS FROM ZACGT_QUOTHEADER
**       INTO TABLE IT_ALV
**       WHERE RFXNO in <RFX_RANGE> AND FORMRDATE in <DATE_RANGE> AND INITIATOR in <INIT_RANGE>.


SELECT a~RFXNO a~INITIATOR a~TYPE a~MATRLTKN a~STATUS a~FORMRDATE
        b~partno b~partdesc b~vendor
        INTO TABLE IT_ALV
        FROM ZACGT_QUOTHEADER AS a INNER JOIN ZACGT_QUOTITEM AS b
        ON a~RFXno = b~RFXNO
        WHERE a~RFXNO in <RFX_RANGE>
          AND a~FORMRDATE in <DATE_RANGE>
          AND a~INITIATOR in <INIT_RANGE>
          AND b~partno in <PART_RANGE>.


SORT IT_ALV ASCENDING BY RFXNO.

LOOP AT IT_ALV INTO WA_ALV.

MOVE-CORRESPONDING WA_ALV to LS_ALV.
LS_ALV-RFX_NO = WA_ALV-RFXNO.


SELECT * FROM ZACGT_QUOTSTATUS INTO TABLE it_stat WHERE RFX_NO = WA_ALV-RFXNO.

SORT it_stat DESCENDING by srno.

READ TABLE it_stat INTO wa_stat INDEX 1.
*data: var type i.
*data: approver1 TYPE string,
*      approver2 type string.
*DESCRIBE TABLE it_stat LINES var.
*If var is INITIAL.
*var = approver1.
*elseif
*  var = approver2.

CLEAR: cnt,cnt1,wa_fill_table1.

if WA_ALV-STATUS = 'N'.
LS_ALV-STATUS = 'New'.

ELSEIF WA_ALV-STATUS = 'A'.
*LS_ALV-FORMDATE = wa_stat-sta_date.
LS_ALV-STATUS = 'Approved'.


ELSEIF WA_ALV-status = 'P'.

*LOOP AT wd_this->IT_MAIN INTO wa_fill_table.
*
*cnt = cnt + 1.
*if wa_stat-approver = wa_fill_table-approver.
*
*cnt1 = cnt + 1.
*
*READ TABLE wd_this->IT_MAIN INTO wa_fill_table1 INDEX cnt1.
*
*LS_ALV-approver = wa_stat-approver.
LS_ALV-STATUS = 'In-Process'.
******************Get the logged in Purchaser
   data: USERNAME type BAPIBNAME-BAPIBNAME,
         ADDR TYPE BAPIADDR3,
         RET TYPE TABLE OF BAPIRET2,
         FULLNAME TYPE STRING.
   CLEAR: USERNAME, ADDR, RET, FULLNAME.
   USERNAME = wa_stat-approver.
   "********Use FM to get the detail of user
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
   EXPORTING
     username             = wa_stat-approver
    CACHE_RESULTS        = 'X'
  IMPORTING
    ADDRESS              = ADDR
   tables
     return               = RET
           .
CONCATENATE ADDR-FIRSTNAME ADDR-LASTNAME INTO FULLNAME SEPARATED BY ' '.

LS_ALV-approver = fullname.
*ENDIF.


*ENDLOOP.

ELSEIF WA_ALV-STATUS = 'R'.

*LS_ALV-FORMDATE = wa_stat-sta_date.
LS_ALV-STATUS = 'Rejected'.

ENDIF.

*-******************************ITEM DATA*************
**SELECT PARTNO PARTDESC VENDOR FROM ZACGT_QUOTITEM INTO TABLE IT_ITEM WHERE RFXNO = WA_ALV-RFXNO.
**
**LOOP AT IT_ITEM INTO WA_ITEM.

**LS_ALV-PARTNO = WA_ITEM-PARTNO.
**LS_ALV-PARTDESC = WA_ITEM-PARTDESC.
**LS_ALV-VENDOR = WA_ITEM-VENDOR.
*LS_ALV-APPROVER = wa_stat-approver.
LS_ALV-FORMDATE = wa_stat-sta_date.
LS_ALV-SRNO = SR .

SELECT SINGLE MESG FROM ZACGT_ME11_INFO INTO INFO WHERE FORMNO = WA_ALV-RFXNO
                                                     AND PARTNO = WA_ITEM-PARTNO
                                                     AND VENDORNEW = WA_ITEM-VENDOR AND INFO_TY = 'ME11'
                                                     AND MSG_TY = 'S'.

if INFO IS NOT INITIAL.
LS_ALV-INFOSTATUS = 'YES'.
ELSE.
LS_ALV-INFOSTATUS = 'NO'.
ENDIF.

APPEND LS_ALV to LT_ALV.

SR = SR + 1.

CLEAR: INFO.
*ENDLOOP.
*APPEND LS_ALV to LT_ALV.
CLEAR: LS_ALV,WA_ALV.
*endif.
ENDLOOP.

SORT LT_ALV ASCENDING by SRNO.

    LO_ND_ALV->BIND_TABLE( NEW_ITEMS = LT_ALV SET_INITIAL_ELEMENTS = ABAP_TRUE ).


wd_this->CONF_ALV( ).


endmethod.


and output is


now in table stat ,it has send for approval.

so , now the name of approver should be different for particular RFxNO.


Now, what should be the condition i should fill?


Actually requirement is

if initiator send for approval

first it is blank

then first approver name


last if approved approver 2 name.


Help.


Regards

varun

former_member193460
Contributor
0 Kudos

Hi Varun,

     i didnt understand your requirement properly. It will be good if you can explain it instead of pasting the code.

Are you trying to replace the field status with a dropdown field ?

As i mentioned earlier, you can use dropdownbykey, with the value as "N" or "A and text as "New" and Approved ..so on for all other values.

If you need a dropdown whose valuelist changes according to the data in the record, you should use dropdownbyindex which is different from DDKey

Former Member
0 Kudos

Hi

getting this error as

ERROR: Exception condition "TYPE_NOT_FOUND" triggered (termination: RABAX_STATE)

Help

Regards

varun