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