dynamic modification at run time
TRANSCRIPT
-
7/27/2019 Dynamic modification at run time
1/25
1
Dynamic
Modificationsat Runtime
-
7/27/2019 Dynamic modification at run time
2/25
2
SAP AG 2005, ABAP Web Dynpro
z Introduction
z Modifying the context structure at runtime
z Modifying the UI Element hierarchy at runt ime
z The use of dynamic actions
Contents:
Dynamic Modifications at Runtime
-
7/27/2019 Dynamic modification at run time
3/25
3
SAP AG 2005, ABAP Web Dynpro
Dynamic Modifications at Runtime: Objectives
Af ter completing th is lesson, you will be able to:
z Understand what dynamic programming is
z Dynamically modify and create UI elements
z Dynamically create context elements
z Dynamically bind UI element values to context
elements
z Dynamically create actions
-
7/27/2019 Dynamic modification at run time
4/25
4
Dynamic Runtime ModificationsUp till now, we have looked exclusively at the declarative approach to Web Dynpro
programming. Now, we will turn our attention to the programmatic techniques
needed to perform programmatically, the steps that have so far, only been done
declaratively.
SAP AG 2005, ABAP Web Dynpro
Dynamic Runtime Modifications
What is type of dynamic modifications can be made at
runtime?
Dynamic Context ManipulationThe creation, modification and deletion of context nodes andattributes
Dynamic UI ManipulationThe creation, modification and deletion of UI elements
Dynamic Assignment of Act ions to UI Elements
-
7/27/2019 Dynamic modification at run time
5/25
5
Dynamic Runtime ModificationsUsually, you would declare the structure of a controllers context at design time,
and then create a static UI layout to display the data contained within the declared
context.
However, it is perfectly possible to create a context and UI layout hierarchy at
runtime. These techniques should only be used when they are required!
It is preferable to create as much of your context and UI layout hierarchy as
possible at design time.
SAP AG 2005, ABAP Web Dynpro
Dynamic Runtime Modifications
There are several situations in which type of coding could berequired:
When the structure of your data is not known until runtime
When you want the behaviour of a screen to be generic andtherefore dynamic
When you are writing utility components that must function ina generic manner
Etc
Under what circumstances should I write coding that
performs dynamic modifications?
-
7/27/2019 Dynamic modification at run time
6/25
6
WDDOMODIFYVIEW
This Standard Hook method is called just before the view layout is rendered. It is
the only method in which the programmer is allowed direct access to the UI
element objects themselves.
The FI RSTTI ME parameter is a boolean value that lets you know if the screen is
being rendered for the very first time, or re-rendered in response to an Action
event.
SAP AG 2005, ABAP Web Dynpro
Standard Hook Method View controller
Only a view controller has these hook methods.
The method WDDOMODIFYVIEW will only be called i f:
The view is part of the current view assembly and this is the
first time the view is required, or
The view is part of the current view assembly and an action
belonging to the same view controller has been processed.
-
7/27/2019 Dynamic modification at run time
7/25
7
SAP AG 2005, ABAP Web Dynpro
Dynamic Context Data Creation
Example of context
metadata to be created
dynamically?Context Root (c=1..1, s=true)FLIGHTS (c=0..n, s=true)
Context Metadata to be
created at runtime
BOOKINGS (c=0..n, s=false)
PRICE
CARRID
CONNID
FLDATE
BOOKID
CUSTOMID
CLASS
PASSNAME
-
7/27/2019 Dynamic modification at run time
8/25
8
Context node creationAll context nodes created by the application developer must have some other
node acting as their parent. This is why a context is always supplied containing a
root node. The root node is the anchor point for all other nodes, irrespective of
whether they created statically at design time, or dynamically at runtime.
Node creation principle
1.Create the nodes metadata
2.Create the node instance based on the new metadata
SAP AG 2005, ABAP Web Dynpro
Coding steps:
Obtain a reference to the metadata ofthe context node that will act as the new
nodes parent. In this case, we are
creating an independent node, therefore
we get a reference to the metadata of
the root node.
Call static method
create_nodeinfo_from_struct( ) from
helper class cl_wd_dynamic_tool
A DDIC Structure can be used for the
attribute creation.
Dynamic Value Node Creation (1)
Context Root (c=1..1, s=true)
FLIGHTS (c=0..n, s=true)
Context Metadata to be
created at runtime
BOOKINGS (c=0..n, s=false)
PRICE
CARRID
CONNID
FLDATE
BOOKID
CUSTOMID
CLASS
PASSNAME
DDIC Structure SFLIGHT
-
7/27/2019 Dynamic modification at run time
9/25
9
Creating an value node
We are now dealing with the structure of the context not the contents, therefore we
must work with the metadata that describes the context nodes and attributes,
rather than the runtime data contained within node collections. This means we will
be working with if_wd_context_node_info objects.
1.Get a reference to the metadata of the node acting as the parent of the new node.
2.Use method create_nodeinfo_from_struct from helper class cl_wd_dynamic_tool to create a
node from a structure.
SAP AG 2005, ABAP Web Dynpro
Dynamic Node Creation related to a structure
Coding steps:
Obtain a reference to the metadata of the context node that will act as the
new nodes parent.
Call static method create_nodeinfo_from_struct( ) from helper c lass
cl_wd_dynamic_tool to create from a DDIC structure a node.
DATA: rootnode_info TYPE REF TO if_wd_context_node_info,
table_name type string value 'SFLIGHT',
node_name type string value 'CONNECTIONS'.
* get root node info of context
rootnode_info = wd_context->get_node_info( ).
* create node named CONNECTIONS of sflight
cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
parent_info = rootnode_info
node_name = node_name
structure_name = table_name
is_multiple = abap_false
is_mandatory = abap_true ).Cardinality 11
-
7/27/2019 Dynamic modification at run time
10/25
10
SAP AG 2005, ABAP Web Dynpro
Dynamic Sub Node Creation related to a structure
DATA: dyn_node type ref to if_wd_context_node,
dyn_node_info TYPE REF TO if_wd_context_node_info,
. . .
* navigate from to via lead selection
dyn_node = wd_Context->get_Child_Node( Name = node_name ).
dyn_node_info = dyn_node->get_node_info( ).
* create sub node named BOOKINGS of sbook
cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
parent_info = dyn_node_info
node_name = 'BOOKINGS'
structure_name = 'SBOOK'
is_multiple = abap_false
is_mandatory = abap_true ).
Context Root (c=1..1, s=true)
FLIGHTS (c=0..n, s=true)
BOOKINGS (c=0..n,s=false)
PRICE
CARRID
CONNID
FLDATE
BOOKID
CUSTOMID
CLASS
PASSNAME
Structure SBOOK
Coding steps:
Obtain a reference to node and reference to the
metadata of the context node that will act as the new
nodes parent
Call static method create_nodeinfo_from_struct( ) to
create from a DDIC structure a node
-
7/27/2019 Dynamic modification at run time
11/25
11
SAP AG 2005, ABAP Web Dynpro
Add a Dynamic Attribute to a Node
Context Root (c=1..1, s=true)
UI_ATTRIBUTES
BUTTON_VISIBILITY
TEXT_VISIBILITY
* add context attribute to node
data: Ui_Attributes_info type ref to If_Wd_Context_Node_info.
data: ls_att type WDR_CONTEXT_ATTRIBUTE_INFO.
* get node info of context
Ui_Attributes_info = Node_Ui_Attributes->get_node_info( ).
ls_att-name = `TEXT_VISIBILITY`.
ls_att-TYPE_NAME = 'WDUI_VISIBILITY'.
Ui_Attributes_info->add_attribute( ATTRIBUTE_INFO = ls_att ).
Coding steps:
Obtain a reference to the metadata of the parent node
that will contain the attribute
Fill structure ( WDR_CONTEXT_ATTRIBUTE_INFO )
with attribute properties
Add at tr ibute to parent node
-
7/27/2019 Dynamic modification at run time
12/25
12
SAP AG 2005, ABAP Web Dynpro
Principles of UI element manipulation
The following coding principles must be adhered to during UI element
manipulation:
1. Only perform direct manipulation of UI element objects when it is notpossible to control their behaviour through context binding.
2. UI manipulation is only permitted within the wdDoModi f yVi ew( )
method of a view controller.
3. wdDoModi f yVi ew( ) has a boolean parameter called f i r st Ti me.
Typically, you will only build a dynamic UI element hierarchy whenf i r st Ti me == true. This avoids rebuilding the UI element hierarchy
unnecessarily.
4. Do NOT implement any coding in wdDoModi f yVi ew( ) that modifies
the context! The context should be considered read-only during theexecution of this method.
-
7/27/2019 Dynamic modification at run time
13/25
13
SAP AG 2005, ABAP Web Dynpro
Dynamic UI manipulation (1)
Context Root
Connections
PRICE
CARRID
CONNID
FLDATE
Context Metadata UI Element Hierarchy to
be created at runtime
RootUIElementContainer
CARRIDLabel
CARRIDInput
CONNIDLabel
CONNIDInput
FLDATELabel
FLDATEInput
PRICELabel
PRICEInput
-
7/27/2019 Dynamic modification at run time
14/25
-
7/27/2019 Dynamic modification at run time
15/25
15
SAP AG 2005, ABAP Web Dynpro
Dynamic UI manipulation (3)
Coding steps:
Create a new InputField UI
element object (bind to
context attribute
Create a new Label UI
element object
Set the Labels properties
as required
Add the Label object to the
UI element container
Set the InputFields
properties as required
Add the InputField to the
UI element container
InputField
UI Element Hierarchy to
be created at runtime
RootUIElementContainer
InputField
Label
Label
bind
add
Context Root
Connections
PRICE
CARRID
CONNID
FLDATE
Context Metadata
-
7/27/2019 Dynamic modification at run time
16/25
16
SAP AG 2005, ABAP Web Dynpro
* Create label and input field
** create a input field
wd_input_field = cl_wd_input_field=>new_input_field( view = view
bind_value = 'CONNECTIONS.CARRID').
** create a label for the input field
wd_label = cl_wd_label=>new_label( label_for = wd_input_field->id ).
** set matrix_head_data for the label
cl_wd_matrix_head_data=>new_matrix_head_data( element = wd_label ).
** add label to container
wd_container->add_child( wd_label ).
** set matrix_head_data for the label
cl_wd_matrix_data=>new_matrix_data( element = wd_input_field ).
** add input field to container
wd_container->add_child( wd_input_field ).
Dynamic UI manipulation (4)
-
7/27/2019 Dynamic modification at run time
17/25
17
SAP AG 2005, ABAP Web Dynpro
Dynamic Actions
Certain UI elements can trigger client-side events (e.g. pressing enterin an I nput Fi el d, toggling a CheckBox or selecting the row of a
table).
In order for the client-side event to trigger the execution of a server-
side method, Web Dynpro uses the concept ofActions.
Actions can either be assigned declaratively to UI element events at
design time, or dynamically at runtime.
Actions assigned dynamically can only refer to existing server-side
action handler methods. It is not possible to define the coding of an
action event handler dynamically; only to define which existing actionhandler will be called when a client-side event is trapped.
-
7/27/2019 Dynamic modification at run time
18/25
18
The action can only be declared at design time.
SAP AG 2005, ABAP Web Dynpro
Action Declaration
Declared action
Coding required
for dynamic
assigned action
-
7/27/2019 Dynamic modification at run time
19/25
19
A button can be created and be added to the UI element container.
SAP AG 2005, ABAP Web Dynpro
* Create button** create button UI element
wd_button = cl_wd_button=>new_button( text = 'Show Flights'
on_action = 'SELECT_FLIGHTS' ).
** set matrix_head_data for the label
cl_wd_matrix_head_data=>new_matrix_head_data( element = wd_button ).
** add button to container
wd_container->add_child( wd_button ).
Create a Dynamic Button
Coding steps:
Create a new Button UI
element object (assign an
predefined action)
Set the But ton properties
as required
Add the But ton to the UI
element containerButton
UI Element Hierarchy to
be created at runtime
RootUIElementContainer
InputField
Label
Context Root
Connections
PRICE
CARRID
CONNID
FLDATE
Context Metadata
Button
-
7/27/2019 Dynamic modification at run time
20/25
20
SAP AG 2005, ABAP Web Dynpro
Was this a good approach?
Development Principle
Only if the required functionality of your application does notpermit design time declarations, then use a dynamicmodification approach.
Al l context node/attribute and UI elements which can becreated during design time should be created during designtime.
-
7/27/2019 Dynamic modification at run time
21/25
21
SAP AG 2005, ABAP Web Dynpro
Example for Dynamic Programming
Display the content of
ANY table
Dynamic Context
Dynamic table UI element
Dynamic data retrieval
-
7/27/2019 Dynamic modification at run time
22/25
22
SAP AG 2005, ABAP Web Dynpro
Example for Dynamic Programming I
DATA:
group_1 TYPE REF TO cl_wd_uielement_container,
new_tab TYPE REF TO cl_wd_table,
dyn_node TYPE REF TO if_wd_context_node,
tabname_node TYPE REF TO if_wd_context_node,rootnode_info TYPE REF TO if_wd_context_node_info,
stru_tab TYPE REF TO data,
tablename TYPE string.
FIELD-SYMBOLS TYPE table.
* get node info of context root node
rootnode_info = wd_context->get_node_info( ).
* Get the name of the table to be created
tabname_node = wd_context->get_child_node( name = 'TABLE_DATA' ).
tabname_node->get_attribute( EXPORTING name = 'NAME' IMPORTING value =
tablename ).translate tablename to upper case.
* create sub node of structure (tablename)
cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
parent_info = rootnode_info
node_name = tablename
structure_name = tablename
is_multiple = abap_true ).
-
7/27/2019 Dynamic modification at run time
23/25
23
SAP AG 2005, ABAP Web Dynpro
Example for Dynamic Programming II
* remove "old" table UI element from view , if necessary
group_1 ?= view->get_element( 'GROUP_1' ).
group_1->remove_child( id = 'TESTTAB' ).
* * get instance of new node
dyn_node = wd_context->get_child_node( name = tablename ).
DATA new_tab TYPE REF TO cl_wd_table.
* create new UI element table
new_tab = cl_wd_dynamic_tool=>create_table_from_node(
ui_parent = group_1
table_id = 'TESTTAB'
node = dyn_node ).
** fill context node with data
* create internal table of (tabletype)CREATE DATA stru_tab TYPE TABLE OF (tablename).
ASSIGN stru_tab->* TO .
* Get table content
SELECT * FROM (tablename) INTO CORRESPONDING FIELDS OF TABLE .
* Bind internal table to context node
dyn_node->bind_table( ).
-
7/27/2019 Dynamic modification at run time
24/25
24
SAP AG 2005, ABAP Web Dynpro
You should now be able to:
z Understand what dynamic programming is
z Dynamically modify and create UI elements
z Dynamically create context elements
z Dynamically bind UI element values to context
elements
z Dynamically create actions
Web Dynpro Dynamic Programming: Summary
-
7/27/2019 Dynamic modification at run time
25/25
SAP AG2005
No part of this publication may be reproduced or transmitted in any form or for any purpose without the express
permission of SAP AG. The information contained herein may be changed without prior notice.
Some software products marketed by SAP AG and its distributors contain proprietary software components of other
software vendors.
Microsoft, Windows, Outlook, and PowerPoint are registered trademarks of Microsoft Corporation. IBM, DB2, DB2 Universal Database, OS/2, Parallel Sysplex, MVS/ESA, AIX, S/390, AS/400, OS/390, OS/400, iSeries,
pSeries, xSeries, zSeries, z/OS, AFP, Intelligent Miner, WebSphere, Netfinity, Tivoli, and Informix are trademarks or
registered trademarks of IBM Corporation in the United States and/or other countries.
Oracle is a registered trademark of Oracle Corporation.
UNIX, X/Open, OSF/1, and Motif are registered trademarks of the Open Group.
Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, and MultiWin are trademarks or registeredtrademarks of Citrix Systems, Inc.
HTML, XML, XHTML and W3C are trademarks or registered trademarks of W3C, World Wide Web Consortium,
Massachusetts Institute of Technology.
Java is a registered trademark of Sun Microsystems, Inc.
JavaScript is a registered trademark of Sun Microsystems, Inc., used under license for technology invented and
implemented by Netscape.
MaxDB is a trademark of MySQL AB, Sweden.
SAP, R/3, mySAP, mySAP.com, xApps, xApp, SAP NetWeaver and other SAP products and services mentioned herein
as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and in several other
countries all over the world. All other product and service names mentioned are the trademarks of their respective
companies. Data contained in this document serves informational purposes only. National product specifications may vary.
These materials are subject to change without notice. These materials are provided by SAP AG and its affiliatedcompanies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group
shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and
services are those that are set forth in the express warranty statements accompanying such products and services, if any.
Nothing herein should be construed as constituting an additional warranty.
Copyright 2005 SAP AG. All Rights Reserved