Get screen elements dynamically
Hi
Can we get the screen elements like input box or check box
dynamically in dialog programming?
Thanks & Regards
GVRao
HI,
ya this is possible in dialog programing.. what you can do is that define the screen elements and set there property as invisible.
Then at runtime according to the requirement you can modify SCREEN structure to make that element visible again..
Hope this will be usefull.. Reward Points!!!!!!!!!!
Similar Messages
-
Adding Screen Elements Dynamically
Hi!
<b>Is it possible to add screen elements at run time?</b>
I have tried doing
APPEND g_wa_screen TO screen
but it is not allowed.
Im trying to add new colums to my table control. I've already added columns in the cols sub-structure of my table control but nothing gets displayed. My hunch is that those fields arent defined in the screen structure.Hello Emir,
You might struggle to do this with dialog screens.
A better alternative would be to use ALV Grid control. Using this, you could dynamically add columns etc. You can even include a grid control on a dialog screen using a custom control in the screen painter. Look at transaction SE83 for examples of ALV grid control and the documentation on class CL_GUI_ALV_GRID.
Cheers,
Martin -
How to deal with dynamic selection screen elements when macros are used?
Hello experts,
This is regarding the dynamic selection screen elements. Actually the requirement is to modify the existing standard report program RFUMSV00 by copying it into a Z report, adding a few selection screen elements and new fields in the output. I actually did everything required except for the one thing that is going out of my reach.
There are a certain fields which are coming when they are not supposed to get displayed. I don't understand the code because of its obsoleteness. Neither can I debug it because it is just data declaration.
This is the code where there is a fault. If I copy the entire code into a new Z report, I'm getting new fields like Entry Date, Document Type, Reference Transaction, Reference key, Logical system.
DEFINE selection_screen_line.
selection-screen: begin of line.
parameters &3 like &4 default 'X' modif id mc4.
selection-screen: comment (30) &1 for field &3 modif id mc4.
selection-screen: comment pos_low(10) text-019
for field &2 modif id mc4. "neu
parameters &2 like rfums_alv-variante modif id mc4.
selection-screen:
position pos_high.
selection-screen: pushbutton (15) text-028
user-command &5 modif id mc4.
selection-screen end of line.
END-OF-DEFINITION.
Kindly, suggest me the right solution.In the program attributes ( SE38 > RFUMSV00 > GOTO > Properties ), you will find a logical database BRF declared. The include DBBRFSEL is part of the selection screen of this logical database.
The selection screen is actually the selection screen of this logical database.
Under the Logical Database field, there is a Selection screen field where you can input which selection screen of the logical database to be used.
But, this is just to change the selection screen that is displayed. To completely suppress it you need to remove logical database declaration from the properties of the program and call it inside your program through function module.
You cannot just remove it from the declaration because many of its variables are used in the program.
So call it using function module as the first step in INITIALIZATION section of the program.
The syntax and function module to call it in your program can be found in the following thread :
How to hide the selection screen of a Logical datebase?
Regards,
Ashish -
How to get selection screen elements and its table reference of a report ?
halo experts
How can I get selection screen elements and its table reference of a report ? . I tried rs_refresh_from_select_options. But I am unable to get the table and field it is referring to
For eg if my selection screen 1000 is
parameters: p_carrid type spfli-carrid,
select-options :s-_connid type sflight-connid.
is there any Fm or method which gives me what are the screen elements( p_carrid and s_connid ) and what table( splfi and sflight ) and field ( carrid and conid )it is referring to ?The following code is an example of how you might dynamically determine all your PARAMETERS and SELECT-OPTIONS variables at run time. The PARAMETERS and SELECT-OPTIONS only point to a dictionary element--not a specific table. Even though you may say "spfli-carrid" or "sflight-connid", the data type really references the dictionary type and not a specific table/structure.
REPORT ZTEST_PROG.
TABLES sflight.
DATA:
screen_tab TYPE STANDARD TABLE OF screen,
wa_screen TYPE screen,
scrn_nm TYPE string,
scrn_leftover TYPE string,
l_type TYPE REF TO cl_abap_typedescr,
typ_nm TYPE string,
typ_pre TYPE string.
FIELD-SYMBOLS <fs_data> TYPE ANY.
PARAMETERS p_carrid TYPE spfli-carrid.
SELECT-OPTIONS s_connid FOR sflight-connid.
INITIALIZATION.
LOOP AT SCREEN.
IF screen-group3 = 'PAR'
OR screen-group3 = 'LOW'.
APPEND screen TO screen_tab.
ENDIF.
ENDLOOP.
START-OF-SELECTION.
LOOP AT screen_tab INTO wa_screen.
ASSIGN (wa_screen-name) TO <fs_data>.
l_type = cl_abap_typedescr=>describe_by_data( <fs_data> ).
IF wa_screen-group3 = 'LOW'.
SPLIT wa_screen-name AT '-' INTO scrn_nm scrn_leftover.
TRANSLATE scrn_nm TO UPPER CASE.
ELSE.
scrn_nm = wa_screen-name.
ENDIF.
SPLIT l_type->absolute_name AT '=' INTO typ_pre typ_nm.
WRITE:
/ 'Screen Name: ', scrn_nm,
/ 'DDIC Type: ', typ_nm.
ENDLOOP.
When you get into defining internal tables you can determine those at run time with cl_abap_structdescr. The following is an example of how you might do that. You can loop through the "components_table" and evaluate each field of the structure in this way.
DATA: structure_reference TYPE REF TO cl_abap_structdescr,
components_table TYPE abap_compdescr_tab,
components_structure LIKE LINE OF components_table.
structure_reference ?= cl_abap_structdescr=>describe_by_data( any_structure ).
components_table = structure_reference->components.
I don't know if this answers any of your questions but I hope that some of it is useful. -
WD_BADI_DOMODIFYVIEW - dynamically set screen element as mandatory field
Hi,
I would like to use WD_BADI_DOMODIFYVIEW to dynamically set a standard screen element on my Webdynpro as a mandatory field. Does anyone know which method in which class that I can use to set the status from 'Normal field' to 'required' ?
This is a for standard SRM webdynpro screen. Unfortunately I could not get the configuration to set the standard metadata field as a mandatory field.
Also this standard field does not have an existing binding to a context element to manipulate the status of the field. Hence I need to find a method that can directly change the attribute of this standard screen element to mandatory. I do not want to modify the webdynpro to change the status of the field to 'required'.
<promise removed by moderator>
Thanks
Liam
Edited by: c958209 on Apr 28, 2011 1:32 PM
Edited by: Thomas Zloch on Apr 28, 2011 4:58 PMHi Kiran,
I think I understand what you are suggesting now. The trouble is IF_V_SC_DOFC_I_LIMITEM (the view I'm trying to enhance) does not exist in the BAdI.
When I go to the attributes of the View of the Webdynpro component that I'm trying to enhance I do see WD_THIS refto IF_V_SC_DOFC_I_LIMITEM.
It's just that in the BAdI WD_BADI_DOMODIFYVIEW this WD_THIS is not available and trying to define it like below does not work.
Make Product Category field mandatory
lo_node = wd_context->get_child_node( co_item_data ).
lo_value = lo_node->get_element( ).
Get value of context element SH_CATEGORY_ID
lo_value->get_attribute( EXPORTING name = co_sh_category_id
IMPORTING value = lv_sh_category_id ).
IF lv_sh_category_id IS INITIAL.
DATA: lo_message_manager TYPE REF TO if_wd_message_manager.
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA wd_this TYPE REF TO if_v_sc_dofc_i_limitem. <================ This gives a syntax error "The type IF_V_SC_DOFC_I_LIMITEM is unknown
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_attribute_error_message
EXPORTING
message_text = 'Please fill the Document Date'
element = lo_value
attribute_name = 'SH_CATEGORY_ID'.
ENDIF. -
How to get ICH Screen Element Objects
Would anyone tell me how to get ICH Screen element objects i.e Screen ID like ALRTOVW
Hi Bris,
You can run the transaction only from the normal SAPGUI. Try it once again in this format:
/N/SCF/SCREENCFG.
Best regards,
attila -
Change Screen Lables dynamically
HI
I want to change screen labels dynamically based on my sales area/Plant ... how can I achieve this task, what are steps I have to take to change the screen labels dynamically?
Please give your input/suggestion.
ThanksI wonder if you could use some of the SD user exits in Sales Order processing.
MV45AOZZ is for custom PBO routines.
MV45AIZZ is for custom PAI routines.
They are meant for the screen user exits (Additional Data tabs at the header and item level). They might get called for each screen. Because they are the "older style" of user exits, you still need a access key. However, SAP considers changes to these programs as enhancements, not modifications.
Same applies for USEREXIT_FIELD_MODIFICATION in MV45AFZZ. This is called for every screen in SD order processing. With a CASE statement against SCREEN-NAME and a check for the dynpro number, you might be able to manipulate the label values. If I had access to a system, I would check... but I don't right now.
Many of the labels reference the labels for the data elements in the data dictionary, so these userexits may not be able to over ride the values. -
How to give error message for the screen element text field when wrong i/p
How to give error message for the screen element text field when wrong i/p
when wrong input given
eg.
I have a text box with SBOOK-CARRID
so when user give wrong entry in text box i.e LG
then I should give some error stating that the the input is invalid or not available ,
now it showing the error of standard messages,
i want manual message to be displayed when error comes.
Thank you,
Regards,
Jagrut Bharatkumar ShuklaHi all,
Thank you for your valuable reply,
but the thing is that its a screen field,
i.e text box not a selection screen
i created in screen layout
with name sbook-carrid
now i want to get error message display if wrong i/p is given
thank you.
Regards,
Jagrut bharatkumar Shukla, -
Loading XML file with missing elements dynamically through ODI
Hi Guys ,
I have the below xml file with two nodes Employee and Address. On a daily basis , sometimes the address element might not come in from the source xml file , but my interface has columns mapped to address elements, and hence it can fail due to the source element not being found in the file or data might not get loaded due to the 'and' condition in the sql query generated between the employee and address elements. Is there a way where i can load the data dynamically where i can search in the file only for the elements (Employee) present and load data only for those elements dynamically?
XML File:
<?xml version="1.0" encoding="UTF-8" ?>
<EMP>
<Empsch>
<Employee>
<EmployeeID>12345</EmployeeID>
<Initials>t</Initials>
<LastName>john</LastName>
<FirstName>doe</FirstName>
</Employee>
<Address>
<WorkPhone>12345</WorkPhone>
<WorkAddress>Test 234</WorkAddress>
</Address>
</Empsch>
</EMP>
Thanks ,
Revanth TambisettyI was able to resolve it by using left outer joins and referring the table structure from the XSD
-
How to create a parameter id on screen element
How to create a parameter id on screen element
reply urgentHi Madan,
Check this info.
Parametere Id is the one which holds the memory for the particular field. when we need to pass the the field from one screen to another use the parameter Id.
The SAP Memory is a user-specific memory area of the application server, which is accessed by all main sessions of a user session at once. ABAP programs have access to SPA/GPA parameters stored in the SAP Memory (also called SET/GET parameters).
Eg. Of how to use Set parameter
you can give value of variable (dobj) to parameter ID 'pid'. This will store value in SAP memory
SET PARAMETER ID pid FIELD dobj.
When you want to use that value stored in SAP memory
you can use GET parameter.
GET PARAMETER ID pid FIELD dobj.
To fill the input fields of a called transaction with data from the calling program, you can use the SPA/GPA technique. SPA/GPA parameters are values that the system stores in the global, user-specific SAP memory. SAP memory allows you to pass values between programs. A user can access the values stored in the SAP memory during one terminal session for all parallel sessions. Each SPA/GPA parameter is identified by a 20-character code. You can maintain them in the Repository Browser in the ABAP Workbench. The values in SPA/GPA parameters are user-specific.
ABAP programs can access the parameters using the SET PARAMETER and GET PARAMETER statements.
To fill one, use:
SET PARAMETER ID <pid> FIELD <f>.
This statement saves the contents of field <f> under the ID <pid> in the SAP memory. The code <pid> can be up to 20 characters long. If there was already a value stored under <pid>, this statement overwrites it. If the ID <pid> does not exist, double-click <pid> in the ABAP Editor to create a new parameter object.
To read an SPA/GPA parameter, use:
GET PARAMETER ID <pid> FIELD <f>.
This statement fills the value stored under the ID <pid> into the variable <f>. If the system does not find a value for <pid> in the SAP memory, it sets SY-SUBRC to 4, otherwise to 0.
To fill the initial screen of a program using SPA/GPA parameters, you normally only need the SET PARAMETER statement.
The relevant fields must each be linked to an SPA/GPA parameter.
On a selection screen, you link fields to parameters using the MEMORY ID addition in the PARAMETERS or SELECT-OPTIONS statement. If you specify an SPA/GPA parameter ID when you declare a parameter or selection option, the corresponding input field is linked to that input field.
Check this link.
http://help.sap.com/saphelp_47x200/helpdata/en/f5/6a853c61c5140ee10000000a11405a/frameset.htm
Hope this resolves your query.
Reward all the helpful answers.
Regards -
How to create an UI element dynamically on action in drop down?
Hi,
How to create an UI element dynamically on action of selecting a value from the drop down?
help out with the steps i need to follow..Hi,
<u><i><b>Dynamic UI Element creation</b></i></u>
We can create it only in the WD Modify View.
Get the instance for the Root UI Element Container.
Create the UI element Ex: Input Field, Text View etc.
Bind the UI Element to the Attribute Value.
Now bind the UI Element to the Root UI Element Container.
IWDTransparentContainer root =(IWDTransparentContainer)view.getRootElement();
IWDDropdownByIndex DdbName = (IWDDropdownByIndex)view.createElement(IWDDropdownByIndex.class,"DdbName");
IWDDropdownByIndex DdbAge = (IWDDropdownByIndex)view.createElement(IWDDropdownByIndex.class,"DdbAge");
IWDDropdownByIndex DdbGender = (IWDDropdownByIndex)view.createElement(IWDDropdownByIndex.class,"DdbGender");
IWDNode Mad =wdContext.getChildNode("Person",0);
IWDAttributeInfo NameAtt = Mad.getNodeInfo().getAttribute("Name");
IWDAttributeInfo AgeAtt = Mad.getNodeInfo().getAttribute("Age");
IWDAttributeInfo GenderAtt = Mad.getNodeInfo().getAttribute("Gender");
DdbName.bindValue(NameAtt);
DdbAge.bindValue(AgeAtt);
DdbGender.bindValue(GenderAtt);
root.addChild(DdbName);
root.addChild(DdbAge);
root.addChild(DdbGender);
<u><i><b>Dynamic Action Creation</b></i></u>
Create the Action in the Action tab.
Create a Button.
Get the reference for the created action (Through the Event Handler).
Bind the Action to the Button.
Bind the Button to the Root UI element Container.
IWDButton ButGo = (IWDButton)view.createElement(IWDButton.class,"ButGo");
IWDAction ActGo = wdThis.wdCreateAction(IPrivateStartView.WDActionEventHandler.GO,"Click");
ButGo.setOnAction(ActGo);
root.addChild(ButGo);
Now write the required code for the Event Handler that is associated with the Action.
//@@begin onActionGo(ServerEvent)
IWDNode Mad = wdContext.getChildNode("Person",0);
wdComponentAPI.getMessageManager().reportSuccess(Mad.getCurrentElement().getAttributeAsText("Name"));
wdComponentAPI.getMessageManager().reportSuccess(Mad.getCurrentElement().getAttributeAsText("Age"));
wdComponentAPI.getMessageManager().reportSuccess(Mad.getCurrentElement().getAttributeAsText("Gender"));
//@@end
Regards
SURYA -
Issue with selection screen element on At slection scree
Hi All,
I am facing an issue with a checkbox which is present within the subscreen of a standard selection screen.
The issue is that the value of the combobox get toggled by itselfon the event mentioned below. I am unable to find out how this combo box value gets changed by itself on the screen events.I tried clear statemetns etc nothing is helping. I debugged with a watch point on this screen element and found this to happen.It just changes the value of the element to a previously held state.I m trying to clear the combobox but this event puts back the tick mark.How can I stop this.
AT SELECTION-SCREEN ON COL_FROM. "COL_FROM is another screen element diffrent from the combobox
ThanksHi Vighneswaran CE,
This event corresponds to the PAI module of the COL_FROM field. So, it gets executed each time you press any valid function code on the screen (unless there was an error in a previous field). Nothing abnormal here.
That's difficult to help you on that topic, you'd better tell us exactly what report it is, where you have added your code (and what code) to change the checkbox, ...
Best regards,
Sandra -
Let me know how to get screen size of user..
Hi.
I'm going to change a container size in a screen, dynamically.
I want to know that an user's screen is 1024X768 or others..
Let me know how to get screen size of user's computer.
Best Regards.
Kil - Nam.Look at Re: SAPgui window size (+)
Regards -
Getting column headers dynamically from input parameters in alv.
Hi all,
I am new to abap, can any one help me in getting column header dynamically through parameters in alv ?
Eg:-
i Have parametars for days field ,
user inputs days as 10 20 30 40.
Now I want to display in alv column headers as:-
1st column- 'FROM 0 TO 10'
2nd column- 'FROM 10 TO 20 '
3rd column- 'FROM 20 TO 30'
4th column- 'FROM 30 TO 40'
5th column- 'FROM 40 TO 50'
6th column- 'FROM 50 TO 60'
thanks in advance........Check this code snippet:
Step 1: Create a dynamic table based on the input in the selection screen.
TYPE-POOLS: abap.
DATA:
lr_structdescr TYPE REF TO cl_abap_structdescr,
lr_tabledescr TYPE REF TO cl_abap_tabledescr,
lr_datadescr TYPE REF TO cl_abap_datadescr,
lt_components TYPE abap_component_tab,
ls_component TYPE abap_componentdescr,
lr_wa TYPE REF TO data,
lr_tab TYPE REF TO data.
DATA: lv_index TYPE sy-index.
DATA: lv_index_num(5) TYPE n.
DATA: lv_index_char(5) TYPE c,
lv_iter TYPE i,
lv_low TYPE numc2 VALUE 0,
lv_high TYPE numc2 VALUE 10.
DATA: lr_alv TYPE REF TO cl_salv_table.
FIELD-SYMBOLS: <fs_field> TYPE ANY.
FIELD-SYMBOLS: <fs_wa> TYPE ANY.
FIELD-SYMBOLS: <fs_tab> TYPE table.
PARAMETERS p_numcol(2) TYPE n DEFAULT 50.
START-OF-SELECTION.
lv_iter = p_numcol DIV 10.
DO lv_iter TIMES.
IF sy-index > 1.
lv_low = lv_low + 10.
lv_high = lv_high + 10.
ENDIF.
lv_index_num = sy-index.
lv_index_char = lv_index_num.
CONCATENATE 'FROM' lv_low 'TO' lv_high INTO ls_component-name
SEPARATED BY '_'.
ls_component-type =
cl_abap_elemdescr=>get_p( p_length = 10 p_decimals = 2 ).
INSERT ls_component INTO TABLE lt_components.
ENDDO.
* get structure descriptor -> lr_STRUCTDESCR
lr_structdescr
= cl_abap_structdescr=>create( p_components = lt_components
p_strict = space ).
* create work area of structure lr_STRUCTDESCR -> lr_WA
CREATE DATA lr_wa TYPE HANDLE lr_structdescr.
ASSIGN lr_wa->* TO <fs_wa>.
lr_datadescr = lr_structdescr.
lr_tabledescr
= cl_abap_tabledescr=>create( lr_datadescr ).
* Create dynamic internal table
CREATE DATA lr_tab TYPE HANDLE lr_tabledescr.
ASSIGN lr_tab->* TO <fs_tab>.
* Populate the internal table
DO 10 TIMES.
DO.
lv_index = sy-index.
ASSIGN COMPONENT lv_index OF STRUCTURE <fs_wa> TO <fs_field>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
<fs_field> = sy-index.
ENDDO.
APPEND <fs_wa> TO <fs_tab>.
ENDDO. -
How to find Screen element names in a program programatically
Hi Experts,
I have to find out all the table control names in a program. I am able to find all the screen numbers for a program from the table D020S. Is there any functionality to find out the table controls in a program or atleast screen elements in a program?
Thanks and regards,
venkat.Hello
You can get the information by calling the below two FM's. First call the FM IAC_GET_DYNPRO_INFO by passing the program name and screen number. This will return an internal table with all the screen elements of structure D021S.
Next loop through this internal table and pass the structure to FM RS_SCRP_GET_FIELD_TYPE_TEXT to know what kind of screen element it is.
Also, if the FILL parameter of the first FM is 'T', then it is a table control.
Regards
Ranganath
Maybe you are looking for
-
Convert a date in String format to a Date
Hi, How can I convert a date in String format to a Date object? I have tried: import java.text.*; import java.io.*; import java.util.Date; import java.util.Locale; import java.sql.*; public class casa { public static Connection con = null; public sta
-
How can I get my music from my iPod onto my iTunes library?
I google searched it and everyone said to go onto 'my computer' and select the device and then go to tools to view the music folder however I do not have an option of tools, is there any other way I can get my music from my iPod onto my iTunes librar
-
I have renewed my iTunes Match subscription, but suddenly I'm getting advertising on iRadio. Why, and how to correct? Thanks in advance.
-
Hi Expert, I need to know how to use "relate to" on getting row data whereby I am making use of Basekey + BaseLine as the relate key in PLD. Example: I need to get the sale order date into the sales invoice printout wherey the sales invoice rows keep
-
Cannot Distribute IP addesses on new Comcast telephony modem
I recently switched to Comcast for phone and internet service. The modem provided does not distribute IP address. It will also not allow the base station to distribute IP addresses. If I set the base station to be an access point and not distribute I