Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How to refresh Graph

VijayaKrishnaG
Active Contributor
0 Kudos

Hi Experts, Good Day & Happy New Year.

I have developed a graphical report with the help of GRAPHICS_GUI_CE_DEMO. I have developed this in module pool programming.

My coding is like as below.

MODULE USER_COMMAND_0101 INPUT.  " (PAI - 101)

   

     CASE SY-UCOMM.

          WHEN 'EXEC'.

               " Business logic

               " I got required output data into one internal table.

               CALL SCREEN 301.

        

          WHEN 'XYZ'.

        

     ENDCASE.

ENDMODULE.

* -----------------------------------------------------------------------------------

MODULE STATUS_0301 OUTPUT.     " (PBO - 301)

   SET PF-STATUS 'GRAPH1'.

   SET TITLEBAR 'TITLE3'.

     " Here I have written the code that need to display graph

ENDMODULE.

* -----------------------------------------------------------------------------------

MODULE USER_COMMAND_0301 INPUT.

   CASE SY-UCOMM.

     WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

       CLEAR: SY-UCOMM.

       CLEAR : G_CE_CONTAINER,

                     L_IXML_DATA_DOC,

                     L_IXML_CUSTOM_DOC,

                     L_OSTREAM,

                     L_XSTR,

                     G_CE_VIEWER.

       LEAVE TO SCREEN 101.

   ENDCASE.

ENDMODULE.                 " USER_COMMAND_0301  INPUT


When I am executing graph for first time from screen 101, it's displaying fine. But once I go back to 101 and if I am executing again with new inputs the graph is not getting refreshed and it is displaying the previous graph only. All the data in internal tables refreshed and got new data related to new inputs but graph is not getting refreshed.

So, experts please guide me what might be the problem and solution for that. It seems I have to refresh some object. But I refreshed Container, Viewer object, Series, Element all these objects, but no change.

If still my query is not clear, please reply with required data.

Thanks & Regards,

- Vijay

1 ACCEPTED SOLUTION

VijayaKrishnaG
Active Contributor
0 Kudos

Hi Experts,

Please help me on this.

Thank you,

Vijay

9 REPLIES 9

hiriyappa_myageri
Participant
0 Kudos

Hi Vijaya Krishna,

Wish You Happy New year

You Can Use Free Container. and Flush.

Regards,

Hiriyappa

0 Kudos

Hi Hiriyappa,

Thanks for your wishes and reply.

I tried to free container object and flush, but no change. I have written as below,

MODULE USER_COMMAND_0301 INPUT.

   CASE SY-UCOMM.

     WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

       CLEAR: SY-UCOMM.

       CLEAR : G_CE_CONTAINER,

               L_IXML_DATA_DOC,

               L_IXML_CUSTOM_DOC,

               L_OSTREAM,

               L_XSTR,

               G_CE_VIEWER.

       FREE : G_CE_CONTAINER,

              G_CE_CONTAINER2,

              G_CE_VIEWER,

              L_IXML_DATA_DOC,

              L_IXML_CUSTOM_DOC,

              L_OSTREAM,

              G_IXML_SF,

              G_IXML.

       CL_GUI_CFW=>FLUSH( ).

       LEAVE TO SCREEN 101.

   ENDCASE.

ENDMODULE.


Please help me, it's high priority issue for me.


Thanks & Regards,

-Vijay

VijayaKrishnaG
Active Contributor
0 Kudos

Hi Experts,

Please help me on this.

Thank you,

Vijay

0 Kudos

Please paste your code where you are filling the data..Did you check in debug the internal tables were updated...?

0 Kudos

Hi Nabheet,

Yes I have checked in debugging and tables are updating well. I refreshed all the internal tables before leaving the Graph Container screen. So, when it calls for second time new data is filling.

MODULE STATUS_0301 OUTPUT.

   SET PF-STATUS 'GRAPH1'.

   SET TITLEBAR 'TITLE3'.

   DATA : LR_TABLE   TYPE REF TO CL_SALV_TABLE,

          LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,

          LR_COLUMN  TYPE REF TO CL_SALV_COLUMN_TABLE.

   DATA : L_FLD   TYPE C LENGTH 30,

          L_INDEX TYPE N.

*  DATA: L_IXML_DATA_DOC   TYPE REF TO IF_IXML_DOCUMENT,

*        L_IXML_CUSTOM_DOC TYPE REF TO IF_IXML_DOCUMENT,

*        L_OSTREAM         TYPE REF TO IF_IXML_OSTREAM,

*        L_XSTR            TYPE XSTRING.

   CLEAR : L_IXML_DATA_DOC,

           L_IXML_CUSTOM_DOC,

           L_OSTREAM,

           L_XSTR.

* CREATE GLOBAL OBJECTS

   G_IXML    = CL_IXML=>CREATE( ).

   G_IXML_SF = G_IXML->CREATE_STREAM_FACTORY( ).

   IF G_CE_CONTAINER IS INITIAL.

     CLEAR : G_CE_VIEWER_EH.

     CREATE OBJECT G_CE_CONTAINER

       EXPORTING

         CONTAINER_NAME = 'CONTAINER'.

     CREATE OBJECT G_CE_VIEWER

       EXPORTING

         PARENT = G_CE_CONTAINER.

     CREATE OBJECT G_CE_VIEWER_EH.

     SET HANDLER G_CE_VIEWER_EH->ON_CLICK FOR G_CE_VIEWER.

     SET HANDLER G_CE_VIEWER_EH->ON_VALUE_CHANGE FOR G_CE_VIEWER.

     SET HANDLER G_CE_VIEWER_EH->ON_PROPERTY_CHANGE FOR G_CE_VIEWER.

     PERFORM CREATE_DATA_DEMO USING L_IXML_DATA_DOC.

     L_OSTREAM = G_IXML_SF->CREATE_OSTREAM_XSTRING( L_XSTR ).

     CALL METHOD L_IXML_DATA_DOC->RENDER

       EXPORTING

         OSTREAM = L_OSTREAM.

     G_CE_VIEWER->SET_DATA( XDATA = L_XSTR ).

     CLEAR L_XSTR.

     PERFORM CREATE_CUSTOM_DEMO USING L_IXML_CUSTOM_DOC.

     L_OSTREAM = G_IXML_SF->CREATE_OSTREAM_XSTRING( L_XSTR ).

     CALL METHOD L_IXML_CUSTOM_DOC->RENDER

       EXPORTING

         OSTREAM = L_OSTREAM.

     G_CE_VIEWER->SET_CUSTOMIZING( XDATA = L_XSTR ).

   ENDIF.

   CALL METHOD G_CE_VIEWER->RENDER.

* --- * For Materials List * --- *

   CREATE OBJECT G_CE_CONTAINER2

       EXPORTING

         CONTAINER_NAME = 'CONTAINER2'.

*  TRY.

   CL_SALV_TABLE=>FACTORY(

     EXPORTING

       LIST_DISPLAY   = IF_SALV_C_BOOL_SAP=>FALSE

       R_CONTAINER    = G_CE_CONTAINER2

       CONTAINER_NAME = 'CONTAINER2'

     IMPORTING

       R_SALV_TABLE   = LR_TABLE

     CHANGING

       T_TABLE        = IT_LIST ).

*  CATCH CX_SALV_MSG .

*  ENDTRY.

   LR_COLUMNS = LR_TABLE->GET_COLUMNS( ).

   DO 4 TIMES.

     L_INDEX = SY-INDEX.

     CONCATENATE 'FLD' L_INDEX INTO L_FLD.

     LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( L_FLD ).

     LR_COLUMNS->SET_OPTIMIZE( 'X' ).

   ENDDO.

   LR_TABLE->DISPLAY( ).

ENDMODULE.                 " STATUS_0301  OUTPUT



FORM CREATE_DATA_DEMO USING P_IXML_DOC TYPE REF TO IF_IXML_DOCUMENT.

   DATA: L_SIMPLECHARTDATA    TYPE REF TO IF_IXML_ELEMENT,

         L_CATEGORIES         TYPE REF TO IF_IXML_ELEMENT,

         L_SERIES             TYPE REF TO IF_IXML_ELEMENT,

         L_ELEMENT            TYPE REF TO IF_IXML_ELEMENT,

         L_ENCODING           TYPE REF TO IF_IXML_ENCODING.

   DATA : LV_VAL1 TYPE STRING,

          LV_VAL2 TYPE STRING,

          LV_GLN  TYPE STRING.

   DATA : L_COUNT TYPE C LENGTH 2.

   P_IXML_DOC = G_IXML->CREATE_DOCUMENT( ).

   L_ENCODING = G_IXML->CREATE_ENCODING(

     BYTE_ORDER = IF_IXML_ENCODING=>CO_LITTLE_ENDIAN

     CHARACTER_SET = 'UTF-8' ).

   P_IXML_DOC->SET_ENCODING( L_ENCODING ).

   L_SIMPLECHARTDATA = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'SimpleChartData' PARENT = P_IXML_DOC ).

   L_CATEGORIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Categories' PARENT = L_SIMPLECHARTDATA ).

* ============================================================= *

   CLEAR : WA_GRAPHS, L_ELEMENT.

   LOOP AT IT_GRAPH1 INTO WA_GRAPHS.

*    LV_VAL1 = WA_GRAPHS-MATNR.

     LV_VAL1 = SY-TABIX.

     L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

               NAME = 'C' PARENT = L_CATEGORIES ).

     L_ELEMENT->IF_IXML_NODE~SET_VALUE( LV_VAL1 ).

     CLEAR L_ELEMENT.

   ENDLOOP.

   CLEAR L_SERIES.

   YEAR = YEAR - 1.

   CONCATENATE 'Year : ' YEAR INTO LV_GLN SEPARATED BY SPACE.

   L_SERIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Series' PARENT = L_SIMPLECHARTDATA ).

   L_SERIES->SET_ATTRIBUTE( NAME = 'label' VALUE = LV_GLN ).

   LOOP AT IT_GRAPH1 INTO WA_GRAPHS.

     LV_VAL2 = WA_GRAPHS-VALUE.

     L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

               NAME = 'S' PARENT = L_SERIES ).

     L_ELEMENT->IF_IXML_NODE~SET_VALUE( LV_VAL2 ).

     CLEAR LV_VAL2.

   ENDLOOP.

   CLEAR L_SERIES.

   YEAR = YEAR + 1.

   CLEAR : LV_GLN, L_SERIES.

   CONCATENATE 'Year : ' YEAR INTO LV_GLN SEPARATED BY SPACE.

   L_SERIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Series' PARENT = L_SIMPLECHARTDATA ).

   L_SERIES->SET_ATTRIBUTE( NAME = 'label' VALUE = LV_GLN ).

   CLEAR : WA_GRAPHS, LV_VAL2.

   LOOP AT IT_GRAPH2 INTO WA_GRAPHS.

     LV_VAL2 = WA_GRAPHS-VALUE.

     L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(

               NAME = 'S' PARENT = L_SERIES ).

     L_ELEMENT->IF_IXML_NODE~SET_VALUE( LV_VAL2 ).

     CLEAR LV_VAL2.

   ENDLOOP.

* ============================================================= *

ENDFORM.

FORM CREATE_CUSTOM_DEMO  USING L_IXML_CUSTOM_DOC TYPE REF TO IF_IXML_DOCUMENT.

   DATA: L_ROOT            TYPE REF TO IF_IXML_ELEMENT,

         L_GLOBALSETTINGS  TYPE REF TO IF_IXML_ELEMENT,

         L_DEFAULT         TYPE REF TO IF_IXML_ELEMENT,

         L_ELEMENTS        TYPE REF TO IF_IXML_ELEMENT,

         L_CHARTELEMENTS   TYPE REF TO IF_IXML_ELEMENT,

         L_TITLE           TYPE REF TO IF_IXML_ELEMENT,

         L_ELEMENT         TYPE REF TO IF_IXML_ELEMENT,

         L_ENCODING        TYPE REF TO IF_IXML_ENCODING.

   L_IXML_CUSTOM_DOC = G_IXML->CREATE_DOCUMENT( ).

   L_ENCODING = G_IXML->CREATE_ENCODING(

     BYTE_ORDER = IF_IXML_ENCODING=>CO_LITTLE_ENDIAN

     CHARACTER_SET = 'utf-8' ).

   L_IXML_CUSTOM_DOC->SET_ENCODING( L_ENCODING ).

   L_ROOT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'SAPChartCustomizing' PARENT = L_IXML_CUSTOM_DOC ).

   L_ROOT->SET_ATTRIBUTE( NAME = 'version' VALUE = '1.1' ).

   L_GLOBALSETTINGS = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'GlobalSettings' PARENT = L_ROOT ).

   L_ELEMENT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

               NAME = 'FileType' PARENT = L_GLOBALSETTINGS ).

   L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'PNG' ).

* Here you can give the Chart Type i.e. 2D, 3D etc

   L_ELEMENT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Dimension' PARENT = L_GLOBALSETTINGS ).

* For 2 Dimensional Graph write - PseudoTwo

* For 3 Dimensional Graph write - PseudoThree

   L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'Two' ).

* Here you can give the chart type

   L_ELEMENT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

               NAME = 'ChartType' parent = l_globalsettings ).

* For Bar Char write - Columns

* For Pie Chart write - Pie etc

   L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'Bar' ).

   L_ELEMENT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'FontFamily' PARENT = L_DEFAULT ).

   L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'Arial' ).

   L_ELEMENTS = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Elements' PARENT = L_ROOT ).

   L_CHARTELEMENTS = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'ChartElements' PARENT = L_ELEMENTS ).

   L_TITLE = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT(

             NAME = 'Title' PARENT = L_CHARTELEMENTS ).

* Give the desired caption for the chart here

   L_ELEMENT = L_IXML_CUSTOM_DOC->CREATE_SIMPLE_ELEMENT( NAME = 'Caption' PARENT = L_TITLE ).

   L_ELEMENT->IF_IXML_NODE~SET_VALUE(

              'Sales Comparision - Prev.Year v/s Curr.Year' ).

ENDFORM.                    " CREATE_CUSTOMIZING_DATA

Nabheeth, If you see my code I am having two containers in this screen. One is for Graph and another is to display ALV with Brands list. Here both the containers are not getting refreshed. Even ALV data also not getting refreshed.<text removed>

Thank you.

Vijay

Message was edited by: Matthew Billingham - do not mark your posts as urgent

0 Kudos
  • For ALV you can add LR_TABLE->REFRESH() method in aLV display call in PBO.

0 Kudos

Thanks Nabheet, What about graph? What might be the issue?

0 Kudos


Hi Vijaprakasha,


You can just free the container of Graph using Below statement.


if container is not initial.

    call method container->free.

free container.

endif


free container.

call method cl_gui_cfw=>flush.

Regards,

Hiriyappa

0 Kudos

Hi Vijaprakasha,


yes, most container objects inherit their own destructor method called FREE which is defined in Class CL_GUI_CONTAINER, in your case,



G_CE_CONTAINER2->FREE( ).

will destroy the GUI container. FREE G_CE_CONTAINER2 will just clear some memory space, a task that is performed automatically by the built-in garbage collector.

Regards,

Clemens