dynamic modification at run time

Upload: khaleelinnovator

Post on 14-Apr-2018

221 views

Category:

Documents


0 download

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