on 10-01-2014 6:54 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
You can also read a brief about the difference of the two dropdown approaches.
Thanks & Regards,
Tashi
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
User | Count |
---|---|
84 | |
23 | |
11 | |
9 | |
8 | |
5 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.