Skip to Content
0
Former Member
Mar 18, 2008 at 12:50 PM

Refresh chart content

182 Views

Hi there. I'm really confused about ABAP charts so maybe You could help me in that topic. I've got a code as below. Problem is that when I want to make a test ( PERFORM refresh_chart . - just to change 1 bar height) when I call

      CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ACTIVATE
                            IMPORTING RETVAL = RETVAL .

the chart content is disappearing 😔 Please give me some tip what could be wrong? Greetings.

*&---------------------------------------------------------------------*
*&      Module  STATUS_1020  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_1020 OUTPUT.
  PERFORM draw_chart .
ENDMODULE.                 " STATUS_1020  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1020  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  PERFORM refresh_chart .
ENDMODULE.                 " USER_COMMAND_1020  INPUT

*&---------------------------------------------------------------------*
*&      Form  draw_chart
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM draw_chart.

IF ( wcustom_container IS INITIAL ) .
  RETVAL = CL_GFW=>OK.
* IF FIRSTCALL IS INITIAL.
*   create, initialize and fill data container
    CREATE OBJECT wDC_INST.
    wDC_MANAGE = wDC_INST.
    CALL METHOD wDC_MANAGE->INIT IMPORTING ID = wMY_ID_AT_DC
                                             RETVAL = RETVAL.
    IF RETVAL <> CL_GFW=>OK.
      CALL METHOD CL_GFW=>SHOW_MSG EXPORTING MSGNO = RETVAL.
      CLEAR wDC_INST.
      CLEAR wDC_MANAGE.
    ELSE.
      PERFORM wFILL_DC CHANGING RETVAL.
      IF RETVAL <> CL_GFW=>OK.
        CALL METHOD CL_GFW=>SHOW_MSG EXPORTING MSGNO = RETVAL.
      ELSE.
*       create a container on the dynpro
        IF ( wcustom_container IS INITIAL ) .
          create object wcustom_container
            exporting container_name = 'C_WCHART01'.
        ENDIF .
*       create, initialize and activate graphics proxy
        CREATE OBJECT wGP_INST.
        CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~INIT
                 EXPORTING parent       = wcustom_container
                           DC           = wDC_INST
                           PROD_ID      = CL_GUI_GP_PRES=>CO_PROD_CHART
                           FORCE_PROD   = GFW_TRUE
                 IMPORTING RETVAL       = RETVAL.

        IF RETVAL = CL_GFW=>OK.
*         set dc attributes
          CALL METHOD wGP_INST->SET_DC_NAMES
                    EXPORTING
                       OBJ_ID    = 'OBJID'
                       DIM1      = 'X_VAL'
                       DIM2      = 'Y_VAL'
                       GRP_ID    = 'GRPID'
                    IMPORTING RETVAL = RETVAL.
        ENDIF. "// set dc attributes

*       set customizing objects
        IF RETVAL = CL_GFW=>OK.
          perform wset_customizing.
        ENDIF.

        IF RETVAL = CL_GFW=>OK.
          CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ACTIVATE
                               IMPORTING RETVAL = RETVAL.
        ENDIF.
        IF RETVAL <> CL_GFW=>OK.
          CALL METHOD CL_GFW=>SHOW_MSG EXPORTING MSGNO = RETVAL.
        ENDIF.
      ENDIF. "//fill_dc ok
*     FIRSTCALL = 1.
    ENDIF. "//create and init dc ok
* ENDIF.

* **** distribute changes (to all subscribed graphics proxies)
  IF NOT wDC_MANAGE IS INITIAL.
    CALL METHOD wDC_MANAGE->DISTRIBUTE_CHANGES
                         IMPORTING RETVAL = RETVAL.
    IF RETVAL <> CL_GFW=>OK.
      CALL METHOD CL_GFW=>SHOW_MSG EXPORTING MSGNO = RETVAL.
    ENDIF.
  ENDIF.
ELSE .
  PERFORM refresh_chart .
ENDIF .

ENDFORM.                    " draw_chart


*&---------------------------------------------------------------------*
*&      Form  wFILL_DC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_RETVAL  text
*----------------------------------------------------------------------*
FORM wFILL_DC CHANGING P_RETVAL.
  DATA: OBJ TYPE GFWDCPRES.
  DATA: intint TYPE i .
  DATA: charint(2) TYPE c .
  DATA: stab01_rows TYPE i .

  DATA: wpitab_ LIKE LINE OF wpitab .
  DATA: idx_ LIKE sy-tabix .
  DATA: dev TYPE i .

* fill dc with initial data
  IF wDC_MANAGE IS INITIAL.
    RETVAL = CL_GFW=>E_GP_DCHANDLE.
    EXIT.
  ENDIF.
  RETVAL = CL_GFW=>OK.

  DESCRIBE TABLE stab01 LINES stab01_rows .
  intint = 1 .
  LOOP AT wpitab .
    idx_ = sy-tabix + 1 .
    READ TABLE wpitab INDEX idx_ INTO wpitab_ .

    charint = intint .
    obj-objid = charint .
    obj-grpid = co_gfw_prog_series1 .
    obj-x_val = wpitab-price_l .
    obj-y_val = wpitab-fmenge .
    call method wDC_INST->set_obj_values
      exporting id     = wMY_ID_AT_DC
                obj    = obj
      importing retval = retval.
    if retval <> cl_gfw=>ok. exit. endif.

    dev = wpitab_-price_l - wpitab-price_h .
    IF ( dev > 1 ) .
      intint = intint + 1 .
      charint = intint .
      obj-objid = charint .
      obj-grpid = co_gfw_prog_series1 .
      obj-x_val = wpitab-price_h .
      obj-y_val = 0 .
      call method wDC_INST->set_obj_values
        exporting id     = wMY_ID_AT_DC
                  obj    = obj
        importing retval = retval.
      if retval <> cl_gfw=>ok. exit. endif.
    ENDIF .

    intint = intint + 1 .
  ENDLOOP .
* this last points only defines the right border of the last
* histogram class (i.e. you can omit an y_val)
  charint = intint .
  obj-objid = charint .
  obj-grpid = co_gfw_prog_series1.
  obj-x_val = wpitab-price_h .
  clear obj-y_val.
  call method wdc_inst->set_obj_values
    exporting id     = wmy_id_at_dc
              obj    = obj
    importing retval = retval.
  if retval <> cl_gfw=>ok. exit. endif.

ENDFORM.                    " wFILL_DC


*&---------------------------------------------------------------------*
*&      Form  wset_customizing
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM wset_customizing.
data:
  BUNDLE_DRAWING TYPE REF TO CL_CU_DRAWING_AREA,
  BUNDLE_SCALE1_X TYPE REF TO CL_CU_SCALE,
  BUNDLE_DISPLAY TYPE REF TO CL_CU_DISPLAY_CONTEXT,
  BUNDLE_VALUES1 TYPE REF TO CL_CU_VALUES,
  bundle_grid type ref to cl_cu_grid.

* create default display context
  CREATE OBJECT BUNDLE_DISPLAY EXPORTING INSTANCE_ID = 'GFWHI'.

* remove border line
  CALL METHOD BUNDLE_DISPLAY->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DISPLAY_CONTEXT=>CO_bl_STYLE
              VALUE   = 1. " line

* tell the proxy where to use the bundle
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_DIAGRAM
              BUNDLE = BUNDLE_DISPLAY
    IMPORTING RETVAL = RETVAL.

* drawing area
  CREATE OBJECT BUNDLE_DRAWING EXPORTING INSTANCE_ID = 'GFWHI'.

* set the title of the graphic
  DATA: tmp_text LIKE t023t-wgbez60 .
  DATA: desc LIKE t023t-wgbez60 .
  CLEAR tmp_text . CLEAR desc .
  SELECT SINGLE wgbez60 FROM t023t INTO tmp_text WHERE matkl = xmatkl .
  CONCATENATE xmatkl '-' tmp_text INTO desc SEPARATED BY SPACE .

  CALL METHOD BUNDLE_DRAWING->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DRAWING_AREA=>CO_TITLE
              VALUE   = desc .

* tell the proxy where to use the bundle
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_CHART
              BUNDLE = BUNDLE_DRAWING
    IMPORTING RETVAL = RETVAL.

* values (group 1)
  CREATE OBJECT BUNDLE_VALUES1 EXPORTING INSTANCE_ID = 'GFWHI1'.

* prepare display context for values
  CREATE OBJECT BUNDLE_DISPLAY EXPORTING INSTANCE_ID = 'dummy'.

* set line style
  CALL METHOD BUNDLE_DISPLAY->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DISPLAY_CONTEXT=>CO_BL_style
              VALUE   = 2. " line

* set color of data series
  CALL METHOD BUNDLE_DISPLAY->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DISPLAY_CONTEXT=>CO_BG_CLR_PLT_ID
              VALUE   = 6 . " green

* copy display context into values
  CALL METHOD BUNDLE_VALUES1->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_VALUES=>CO_CURVE_CONTEXT
              VALUE   = BUNDLE_DISPLAY .

* set chart type
  CALL METHOD BUNDLE_VALUES1->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_VALUES=>CO_STYLE
              VALUE   = 89 . " HistogramByRectStdDev

* tell the proxy where to use the bundle
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_CHART
              KEY    = co_gfw_prog_series1
              BUNDLE = BUNDLE_VALUES1
    IMPORTING RETVAL = RETVAL .

* scale of primary x-axis
  CREATE OBJECT BUNDLE_SCALE1_X EXPORTING INSTANCE_ID = 'GFWHI_X1'.

* prepare display context for scale
  CREATE OBJECT BUNDLE_DISPLAY EXPORTING INSTANCE_ID = 'dummy'.

* set orientation of labels
  CALL METHOD BUNDLE_DISPLAY->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DISPLAY_CONTEXT=>CO_TF_ORIENTATION
              VALUE   = 2. " label X position

* copy display context into scale
  CALL METHOD BUNDLE_scale1_x->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_SCALE=>CO_DISPLAY_CONTEXT
              VALUE   = BUNDLE_DISPLAY.

* tell the proxy where to use the bundle
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_CHART_X_PRIM_AXIS
              BUNDLE = BUNDLE_SCALE1_X
    IMPORTING RETVAL = RETVAL.

* grid lines (of primary x- and y-axis) are set to invisible
  CREATE OBJECT bundle_grid EXPORTING INSTANCE_ID = 'GFWHI'.

* prepare display context for scale
  CREATE OBJECT BUNDLE_DISPLAY EXPORTING INSTANCE_ID = 'dummy'.

* disable grid lines
  CALL METHOD BUNDLE_DISPLAY->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = CL_CU_DISPLAY_CONTEXT=>co_visibility
              VALUE   = gfw_false.

* copy display context into grid (for major and minor lines)
  CALL METHOD bundle_grid->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = cl_cu_grid=>co_major_context
              VALUE   = BUNDLE_DISPLAY.
  CALL METHOD bundle_grid->IF_CUSTOMIZING~SET
    EXPORTING ATTR_ID = cl_cu_grid=>co_minor_context
              VALUE   = BUNDLE_DISPLAY.

* tell the proxy where to use the bundle
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_CHART_Y_PRIM_AXIS
              BUNDLE = bundle_grid
    IMPORTING RETVAL = RETVAL.
  CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ADD_CU_BUNDLE
    EXPORTING PORT   = IF_GRAPHIC_PROXY=>CO_PORT_CHART_X_PRIM_AXIS
              BUNDLE = bundle_grid
    IMPORTING RETVAL = RETVAL.

ENDFORM.                    " wset_customizing


*&---------------------------------------------------------------------*
*&      Form  refresh_chart
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM refresh_chart.
  DATA: OBJ TYPE GFWDCPRES.
*  DATA: widx TYPE i .
*  DATA: wstr(2) TYPE c .

  CALL METHOD CL_GUI_CFW=>DISPATCH .
  IF NOT wGP_INST IS INITIAL .
*    LOOP AT wpitab .
*      OBJ-OBJID  = wpitab-graphid .
*      OBJ-GRPID  = co_gfw_prog_series1 .
*      OBJ-X_VAL  = wpitab-price_l .
*      OBJ-Y_VAL  = wpitab-fmenge .

      OBJ-OBJID  = '1' .
      OBJ-GRPID  = co_gfw_prog_series1 .
      OBJ-X_VAL  = 0 .
      OBJ-Y_VAL  = 100 .

      CALL METHOD DC_INST->SET_OBJ_VALUES
        EXPORTING ID = wMY_ID_AT_DC
                       KEY_VALUE = OBJ-OBJID
                       OBJ = OBJ .

      CALL METHOD wGP_INST->IF_GRAPHIC_PROXY~ACTIVATE
                            IMPORTING RETVAL = RETVAL .
*    ENDLOOP .
  ENDIF .

*  IF NOT wDC_MANAGE IS INITIAL.
*    CALL METHOD wDC_MANAGE->DISTRIBUTE_CHANGES
*                         IMPORTING RETVAL = RETVAL.
*    IF RETVAL <> CL_GFW=>OK.
*      CALL METHOD CL_GFW=>SHOW_MSG EXPORTING MSGNO = RETVAL.
*    ENDIF.
*  ENDIF.

ENDFORM.                    " refresh_chart