20
Generated by Jive on 2012-04-05+02:00 1 harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import of transport requests Posted by Harald Wetzel Jun 16, 2011 What this blog is about Have you ever faced issues with inactive BW objects like Multi Provider, Cubes, Update Rules, Transformations or Transfer structures after changes have been imported? Implement included ABAP program which either sends you an update of inactive objects via Email (job schedule) or just provides you a simple list of inactive objects. Step-by-Step Solution Please follow the steps below. Step 1: create an ABAP- report, e.g. ZZ_INA_OBJECTS_SENTINEL (refer to the end of this document for the complete ABAP- code)

Abap Inactive Bw Objects

Embed Size (px)

Citation preview

Page 1: Abap Inactive Bw Objects

Generated by Jive on 2012-04-05+02:001

harald.wetzel: SAP BW: monitor inactiveobjects (Multiprovider, Cubes, Update Rulesetc.) after the import of transport requests

Posted by Harald Wetzel Jun 16, 2011

What this blog is aboutHave you ever faced issues with inactive BW objects like Multi Provider,

Cubes, Update Rules, Transformations or Transfer structures after changes have

been imported? Implement included ABAP program which either sends you an

update of inactive objects via Email (job schedule) or just provides you a simple

list of inactive objects.

Step-by-Step SolutionPlease follow the steps below.

Step 1: create an ABAP- report, e.g. ZZ_INA_OBJECTS_SENTINEL (refer to the end

of this document for the complete ABAP- code)

Page 2: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:002

Step 2: maintain the selection texts:

Step 3: create a variant which you will use for job scheduling:

e.g.

Step 4: define and schedule a job for this program/ variant.

Page 3: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:003

=> you will receive an email wich contains de-activated BW- objects from the last

3 days.

Alternative to Step 3 and Step 4:

Run the program in SA38 w/o ticking the send email box. Then you will get a list of

inactive objects.

=>

Page 4: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:004

ConclusionIn order to re-activate the inactive objects there are different options: either

activate and re-transport them from development to productive system or run

appropriate activation program for multi cubes, transfer rule etc. in your productive

landscape directly (remark: not for all objects a program exists/ is usable!).

With an automated process (job scheduling, email), you are prevented from

failing process chains caused by inactive objects since you are able to react on it

beforehand.

Page 5: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:005

Report Code (Complete)

*&---------------------------------------------------------------------*

*& Report ZZ_INA_OBJECTS_SENTINEL

*&---------------------------------------------------------------------*

* Date: 31.05.2011 Created by: H.Wetzel

* Version Change Request 20110519-0189/M013676.

*

* How to use this program?

* Schedule this program using a job (sm36/sm37) at regular frequency.

* The frequency should closely follow the transport request import

* frequency.

*

* Content:

* this program lists inactive objects like multi provider, cubes, update

* rules, transformations and transfer structures based on a certain time

* range you can specify in the selection screen.

*

* Selection-screen help:

* 1) Number of days to Consider

* Enter a value between 0 and 999 days (=D); depending on that the

* program looks for all changed objects in the time range from D till

* today (sy-datum)

* 2) Send email?

* Mark this checkbox, if you want to send email notification. If you

* don't mark it, then you get a list as an output.

* 3) Email receipients

* The list of people to be notified is entered here, but only if

* 'Send email?' is flagged.

Page 6: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:006

* ***************

* Date: dd.mm.yyyy Changed by: X. XXXXXXX Highlighted with: HW001

* Version Change Request XXXXX.

* Content:

***************************************************************

REPORT z_ina_obj_watch_dog_02

NO STANDARD PAGE HEADING MESSAGE-ID 00.

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

* Constants

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

CONSTANTS:

gc_false TYPE rs_bool VALUE ' ',

gc_true TYPE rs_bool VALUE 'X'.

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

* Internal tables *

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

DATA: wa_ur TYPE rsupdinfo,

wa_transf TYPE rstran.

DATA: l_t_data_cube TYPE STANDARD TABLE OF rsdcube,

l_s_data_cube TYPE rsdcube.

DATA: l_t_data_ur TYPE STANDARD TABLE OF rsupdinfo,

l_s_data_ur TYPE rsupdinfo.

DATA: l_t_data_transf TYPE STANDARD TABLE OF rstran,

l_s_data_transf TYPE rstran.

DATA: l_t_data_trstr TYPE STANDARD TABLE OF rsts,

l_s_data_trstr TYPE rsts.

DATA: i_date_cube LIKE sy-datum,

i_date_ur LIKE sy-datum,

i_date_transf LIKE sy-datum,

i_date_trstr LIKE sy-datum.

Page 7: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:007

DATA: recv LIKE somlreci1 OCCURS 1 WITH HEADER LINE,

v_document_data LIKE sodocchgi1.

DATA: object_id LIKE sofolenti1-object_id,

objcont LIKE soli OCCURS 10 WITH HEADER LINE,

v_dt_mail(10),

v_tm_mail(8).

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

* Variables *

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

DATA:

gv_receiver TYPE somlreci1-receiver,

gv_date1 TYPE sy-datum,

gv_date2 TYPE sy-datum,

gv_timestmp1 TYPE ad_tstamp,

gv_timestmp2 TYPE ad_tstamp,

gv_sts_cube TYPE sy-subrc,

gv_sts_ur TYPE sy-subrc,

gv_sts_transf TYPE sy-subrc,

gv_sts_trstr TYPE sy-subrc.

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

* Selection-Screen *

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

SELECTION-SCREEN BEGIN OF BLOCK om1 WITH FRAME TITLE text-555.

PARAMETERS: p_days(3) TYPE n DEFAULT 1.

SELECTION-SCREEN END OF BLOCK om1.

SELECTION-SCREEN BEGIN OF BLOCK om2 WITH FRAME TITLE text-556.

PARAMETERS:

p_email AS CHECKBOX DEFAULT 'X'.

SELECT-OPTIONS: s_mail FOR gv_receiver LOWER CASE NO INTERVALS.

SELECTION-SCREEN END OF BLOCK om2.

AT SELECTION-SCREEN.

Page 8: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:008

IF p_email = gc_true.

READ TABLE s_mail INDEX 1.

IF sy-subrc <> 0.

MESSAGE e001 WITH 'Please enter at least one email address'.

ENDIF.

ENDIF.

LOOP AT s_mail.

IF NOT s_mail-high IS INITIAL.

MESSAGE e001 WITH s_mail-high 'is not valid. Please enter with no intervals'.

ENDIF.

ENDLOOP.

START-OF-SELECTION.

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

* Date conversions *

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

gv_date1 = sy-datum.

gv_date2 = sy-datum - p_days.

* today

PERFORM convert_date USING gv_date1

gv_timestmp1.

* lower date-range value

PERFORM convert_date USING gv_date2

gv_timestmp2.

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

* Check out inactive objects *

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

SELECT * FROM rsdcube INTO

CORRESPONDING FIELDS OF TABLE l_t_data_cube

WHERE objvers = 'A' AND

objstat = 'INA' AND

Page 9: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:009

( timestmp LE gv_timestmp1 AND

timestmp GE gv_timestmp2 ).

gv_sts_cube = sy-subrc.

SELECT * FROM rsupdinfo INTO

CORRESPONDING FIELDS OF TABLE l_t_data_ur

WHERE objvers = 'A' AND

objstat = 'INA' AND

( timestmp LE gv_timestmp1 AND

timestmp GE gv_timestmp2 ).

gv_sts_ur = sy-subrc.

SELECT * FROM rstran INTO

CORRESPONDING FIELDS OF TABLE l_t_data_transf

WHERE objvers = 'A' AND

objstat = 'INA' AND

( timestmp LE gv_timestmp1 AND

timestmp GE gv_timestmp2 ).

gv_sts_transf = sy-subrc.

SELECT * FROM rsts INTO

CORRESPONDING FIELDS OF TABLE l_t_data_trstr

WHERE objvers = 'A' AND

objstat = 'INA' AND

( timestmp LE gv_timestmp1 AND

timestmp GE gv_timestmp2 ).

gv_sts_trstr = sy-subrc.

IF gv_sts_cube = 0 OR gv_sts_ur = 0 OR gv_sts_transf = 0 OR gv_sts_trstr = 0.

* output email

IF p_email = gc_true.

objcont-line = 'The below-listed Objects are inactive which most probably will

cause issues.'.

APPEND objcont.

Page 10: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0010

objcont-line = 'Please check and take appropriate action!'.

APPEND objcont.

IF gv_sts_cube = 0.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

CONCATENATE sy-vline 'System ' sy-vline 'Provider ' sy-vline 'Type ' sy-vline

'Changed by ' sy-vline 'Changed on ' INTO objcont-line.

APPEND objcont.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

LOOP AT l_t_data_cube INTO l_s_data_cube.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_cube-timestmp

IMPORTING

e_dat = i_date_cube.

PERFORM send_email USING l_s_data_cube-infocube

l_s_data_cube-cubetype

l_s_data_cube-tstpnm

i_date_cube.

ENDLOOP.

ENDIF.

IF gv_sts_ur = 0.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

CONCATENATE sy-vline 'System ' sy-vline 'Update Rule ' sy-vline 'Target '

sy-vline 'Source' sy-vline 'Changed by ' sy-vline 'Changed on ' INTO

objcont-line.

APPEND objcont.

WRITE: sy-uline(66) TO objcont-line.

Page 11: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0011

APPEND objcont.

LOOP AT l_t_data_ur INTO l_s_data_ur.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_ur-timestmp

IMPORTING

e_dat = i_date_ur.

PERFORM send_email02 USING l_s_data_ur-updid

l_s_data_ur-infocube

l_s_data_ur-isource

l_s_data_ur-tstpnm

i_date_ur.

ENDLOOP.

ENDIF.

IF gv_sts_transf = 0.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

CONCATENATE sy-vline 'System ' sy-vline 'Transformation ' sy-vline 'Target '

sy-vline 'Source' sy-vline 'Changed by ' sy-vline 'Changed on ' INTO

objcont-line.

APPEND objcont.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

LOOP AT l_t_data_transf INTO l_s_data_transf.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_transf-timestmp

IMPORTING

e_dat = i_date_transf.

Page 12: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0012

PERFORM send_email03 USING l_s_data_transf-tranid

l_s_data_transf-targetname

l_s_data_transf-sourcename

l_s_data_transf-tstpnm

i_date_transf.

ENDLOOP.

ENDIF.

IF gv_sts_trstr = 0.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

CONCATENATE sy-vline 'System ' sy-vline 'Transferstructure ' sy-vline

'Changed by ' sy-vline 'Changed on ' INTO objcont-line.

APPEND objcont.

WRITE: sy-uline(66) TO objcont-line.

APPEND objcont.

LOOP AT l_t_data_trstr INTO l_s_data_trstr.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_trstr-timestmp

IMPORTING

e_dat = i_date_trstr.

PERFORM send_email04 USING l_s_data_trstr-transtru

l_s_data_trstr-tstpnm

i_date_transf.

ENDLOOP.

ENDIF.

REFRESH recv.

CLEAR recv.

LOOP AT s_mail.

Page 13: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0013

* receivers

recv-receiver = s_mail-low. "recipient

recv-express = 'X'.

recv-rec_type = 'U'. "internet email

APPEND recv.

ENDLOOP.

* document data - description is subject line

v_document_data-obj_name = 'Inactive Objects Watchdog'.

v_document_data-obj_descr = 'Inactive BW- Objects!'.

* send mail message

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'

EXPORTING

document_data = v_document_data

document_type = 'RAW'

put_in_outbox = 'X'

commit_work = 'X'

IMPORTING

new_object_id = object_id

TABLES

object_content = objcont

receivers = recv

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

OTHERS = 8.

IF sy-subrc <> 0.

Page 14: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0014

MESSAGE s001 WITH 'Email was not sent'.

ELSE.

MESSAGE s001 WITH 'Email was successfully sent'.

ENDIF.

ELSE.

* output list

IF gv_sts_cube = 0.

SKIP 2.

WRITE: / 'Multiprovider/ Cubes', sy-datum .

ULINE AT /(46).

WRITE: / sy-vline, (9) 'Provider', sy-vline,

'Type', sy-vline,

(10) 'Changed by', sy-vline,

(10) 'Changed on', sy-vline.

ULINE AT /(46).

LOOP AT l_t_data_cube INTO l_s_data_cube.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_cube-timestmp

IMPORTING

e_dat = i_date_cube.

WRITE: / sy-vline, (9) l_s_data_cube-infocube, sy-vline,

(4) l_s_data_cube-cubetype, sy-vline,

(10) l_s_data_cube-tstpnm, sy-vline,

(10) i_date_cube, sy-vline.

ULINE AT /(46).

ENDLOOP.

ENDIF.

IF gv_sts_ur = 0.

Page 15: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0015

SKIP 2.

WRITE: / 'Update Rules', sy-datum .

ULINE AT /(81).

WRITE: / sy-vline, (25) 'UpdateRule', sy-vline,

(10) 'Target', sy-vline,

(10) 'Source', sy-vline,

(10) 'Changed by', sy-vline,

(10) 'Changed on', sy-vline.

ULINE AT /(81).

LOOP AT l_t_data_ur INTO l_s_data_ur.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_ur-timestmp

IMPORTING

e_dat = i_date_ur.

WRITE: / sy-vline, (25) l_s_data_ur-updid, sy-vline,

(10) l_s_data_ur-infocube, sy-vline,

(10) l_s_data_ur-isource, sy-vline,

(10) l_s_data_ur-tstpnm, sy-vline,

(10) i_date_ur, sy-vline.

ULINE AT /(81).

ENDLOOP.

ENDIF.

IF gv_sts_transf = 0.

SKIP 2.

WRITE: / 'Transformations', sy-datum .

ULINE AT /(88).

WRITE: / sy-vline, (32) 'Transformation', sy-vline,

(10) 'Target', sy-vline,

Page 16: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0016

(10) 'Source', sy-vline,

(10) 'Changed by', sy-vline,

(10) 'Changed on', sy-vline.

ULINE AT /(88).

LOOP AT l_t_data_transf INTO l_s_data_transf.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

i_timestamp = l_s_data_transf-timestmp

IMPORTING

e_dat = i_date_transf.

WRITE: / sy-vline, (32) l_s_data_transf-tranid, sy-vline,

(10) l_s_data_transf-targetname, sy-vline,

(10) l_s_data_transf-sourcename, sy-vline,

(10) l_s_data_transf-tstpnm, sy-vline,

(10) i_date_transf, sy-vline.

ULINE AT /(88).

ENDLOOP.

ENDIF.

IF gv_sts_trstr = 0.

SKIP 2.

WRITE: / 'Transfer Strcutures', sy-datum .

ULINE AT /(62).

WRITE: / sy-vline, (32) 'Transfer Structure', sy-vline,

(10) 'Changed by', sy-vline,

(10) 'Changed on', sy-vline.

ULINE AT /(62).

LOOP AT l_t_data_trstr INTO l_s_data_trstr.

CALL FUNCTION 'RS_TBBW_CONVERT_TIMESTAMP'

EXPORTING

Page 17: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0017

i_timestamp = l_s_data_trstr-timestmp

IMPORTING

e_dat = i_date_trstr.

WRITE: / sy-vline, (32) l_s_data_trstr-transtru, sy-vline,

(10) l_s_data_trstr-tstpnm, sy-vline,

(10) i_date_trstr, sy-vline.

ULINE AT /(62).

ENDLOOP.

ENDIF.

ENDIF.

ELSE.

MESSAGE s001 WITH 'No data for used selection'.

ENDIF.

*&---------------------------------------------------------------------*

*& Form send_email

*&---------------------------------------------------------------------*

* text

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

* --> p1 text

* <-- p2 text

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

FORM send_email USING p_provider TYPE rsdcube-infocube

p_cubetype TYPE rsdcube-cubetype

p_changer TYPE rsdcube-tstpnm

p_date TYPE sy-datum.

CLEAR objcont.

CONCATENATE sy-vline sy-sysid(7) sy-vline p_provider(8) sy-vline p_cubetype(1)

sy-vline p_changer(8) sy-vline p_date(8) INTO objcont-line.

APPEND objcont.

Page 18: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0018

ENDFORM. " send_email

*&---------------------------------------------------------------------*

*& Form send_email02

*&---------------------------------------------------------------------*

* text

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

* --> p1 text

* <-- p2 text

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

FORM send_email02 USING p_updid TYPE rsupdinfo-updid

p_infocube TYPE rsupdinfo-infocube

p_isource TYPE rsupdinfo-isource

p_tstpnm TYPE rsupdinfo-tstpnm

p_date TYPE sy-datum.

CLEAR objcont.

CONCATENATE sy-vline sy-sysid(7) sy-vline p_updid sy-vline p_infocube sy-vline

p_isource sy-vline p_tstpnm sy-vline p_date INTO objcont-line.

APPEND objcont.

ENDFORM. " send_email02

*&---------------------------------------------------------------------*

*& Form send_email03

*&---------------------------------------------------------------------*

* text

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

* --> p1 text

* <-- p2 text

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

FORM send_email03 USING p_tranid TYPE rstran-tranid

p_targetname TYPE rstran-targetname

p_sourcename TYPE rstran-sourcename

p_tstpnm TYPE rstran-tstpnm

Page 19: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0019

p_date TYPE sy-datum.

CLEAR objcont.

CONCATENATE sy-vline sy-sysid(7) sy-vline p_tranid sy-vline p_targetname

sy-vline p_sourcename sy-vline p_tstpnm sy-vline p_date INTO objcont-line.

APPEND objcont.

ENDFORM. " send_email03

*&---------------------------------------------------------------------*

*& Form send_email04

*&---------------------------------------------------------------------*

* text

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

* --> p1 text

* <-- p2 text

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

FORM send_email04 USING p_transtru TYPE rsts-transtru

p_tstpnm TYPE rstran-tstpnm

p_date TYPE sy-datum.

CLEAR objcont.

CONCATENATE sy-vline sy-sysid(7) sy-vline p_transtru sy-vline p_tstpnm sy-vline

p_date INTO objcont-line.

APPEND objcont.

ENDFORM. " send_email04

*&---------------------------------------------------------------------*

*& Form convert_date

*&---------------------------------------------------------------------*

* text

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

* --> p1 date

* <-- p2 timestamp

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

Page 20: Abap Inactive Bw Objects

harald.wetzel: SAP BW: monitor inactive objects (Multiprovider, Cubes, Update Rules etc.) after the import oftransport requests

Generated by Jive on 2012-04-05+02:0020

FORM convert_date USING p_date TYPE sy-datum

p_timestmp TYPE ad_tstamp.

CALL FUNCTION 'ADDR_CONVERT_DATE_TO_TIMESTAMP'

EXPORTING

iv_date = p_date

* IV_HIGH = ' '

IMPORTING

ev_timestamp = p_timestmp.

ENDFORM. "convert_date20 Views

Jun 19, 2011 10:59 PM konduru Prashanth

Thanks for the blog.