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: 

ECC 6.0 Upgrade & changes required in programs

Former Member
0 Kudos

In case of a version upgrade to ECC 6.0, the programs would need to be changed. Some changes in the programs would be required to meet unicode compliance, while some changes would be required due to version upgrade (constructs becoming obsolete, etc). I guess the unicode related issues could be found by using the UCCHECK transaction and then resolved by making changes and again checking using this transaction, but is there some way to find out what issues would arise due to version upgrade? (The programs work fine in the lower version which is 4.6c). One way would be to actually check the programs in runtime and then handling the issues faced. But if we don't want to test all the programs, then is there some tool, or any best practice which would minimize the chance of having issues in the programs (and might be in help in solving the issues)?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

We have followed the approach listed below and has worked pretty well: -

1) SAMT - to perform mass syntax check for all custom objects

2) UCCHECK - to perform mass unicode check for all custom programs

3) Identify BATCH and CLONE programs and unit test all of them

4) Identify standard call functions in custom programs. If the call function interfaces have changed test the objects

All the other objects having runtime issues (very few) are identified during integration testing.

-Cheers

4 REPLIES 4

Former Member
0 Kudos

We have followed the approach listed below and has worked pretty well: -

1) SAMT - to perform mass syntax check for all custom objects

2) UCCHECK - to perform mass unicode check for all custom programs

3) Identify BATCH and CLONE programs and unit test all of them

4) Identify standard call functions in custom programs. If the call function interfaces have changed test the objects

All the other objects having runtime issues (very few) are identified during integration testing.

-Cheers

0 Kudos

Hello Praskash, this seems useful. Could you provide me some more info regarding SAMT transaction & also what you mean by identifying BATCH & CLONE programs? Is there some way to easily identify standard call functions in programs, or do we need to actually look through the whole code (or might be technical design documentation) to find this out?

Former Member
0 Kudos

Hi Pawan,

When it is a technical upgrade from a lower version to ECC6.0, many objects like includes, Function modules, reports, OSS notes, DDIC objects, BDC/Print programs, SAP scripts, screens will get affected due to the upgradation. So we need to check with all these objects.

• We will encounter short dumps while executing certain programs. This may be due to the usage of obsolete function modules or Unicode errors.

• The BDCs in the upgraded version will become defective as many of its screen field names will be changed during version change.

• Program texts of many programs will be lost. They have to be restored.

• In case of tables, enhancement category has to be provided.

• There is a possibility of losing the variants during upgradation. So care should be taken to retain them before upgradation.

• ECC6.0 is case sensitive, so many of the interface programs will fail to transfer (FTP) files between systems. These objects have to be changed so that the commands passed to the external system be UPPERCASE.

So a developer should be aware of the following:

•Unicode programming is followed in ECC6.0. So we need to be aware of it to rectify certain Unicode errors which are likely to occur.

•You have to run the transactions SPAU & SPDD to check for list of standard & custom objects that needs modification in the upgraded version.

Check the below link to find more details on usage of SPAU & SPDD transactions

http://help.sap.com/saphelp_nw2004s/helpdata/en/60/d6ba7bceda11d1953a0000e82de14a/content.htm

•Should be aware of the objects that have become obsolete in ECC6.0. They have to be replaced by appropriate ones.For eg.:

--> The WS_* function modules have been replaced by GUI_* FMs in ECC6.0 as WS_* FMs have become obsolete from 4.7

-->Tables like TVARV & TTREX have been replaced by TVARVC & TTREXN respectively in ECC6.0.

•In case of tables, we need to specify the Enhancement category.

•Due to upgradation, we will lose out some variants. So we should take a back-up before proceeding with the upgradation.

•In case of BDC programs, some field names will be changed. So they have to be named appropriately.

Please check with the below links for more details:

SAP Upgrade guide:

http://www.thespot4sap.com/upgrade_guide_v2.pdf#search=%22upGRADE%20STEPS%20-%20SAP%22

From ABAP's perspective, the following link helps you:

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/5ac31178-0701-0010-469a-b4d7fa27...

For technical upgrade inputs:

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/profile/2007/05/07/upgradeFROMR3TOmySAPERP-PARTII&

https://wiki.sdn.sap.com/wiki/display/profile/UPGRADEFROMR3TOmySAPERP-PARTIII

kindly reward if found helpful.

cheers,

Hema.

Former Member
0 Kudos

SAMT is a transaction that will allow you to create sets for syntax check. We generally do it for Z* and Y* objects if the count does not exceed 3000.

Batch objects are the BDCs and Conversions as explained by Hema. Earlier upgrades had more than 80% of these objects failing becuase the screens may have changed or the screen fields may be missing, screen flow changed ... But now it has reduced especially from 46c to Ecc6 upgrade. However it still warrants testing them thoroughly.

Clones are copies of standard SAP objects in Z space and modified. These objects generally tend to have standard includes within them or the program definition may still have the original SAP name. It is tricky to find all of them but simple rules like matching name strings (eg SAPMV45A -> ZAPMV45A or Z_SAPMV45A) would help. It may vary from customer to customer depending on their naming standards.

Standard function modules used in the program can be easily found out using SCAN command in ABAP (see my example for SCAN in code snippets). Use the list of function modules identified and pass to the program below to see if their interfaces have changed. Test all objects affected by changed interfaces.

&----


*& Report YACN_FUNC_ANALYSIS

*&

&----


REPORT YACN_FUNC_ANALYSIS.

Tables: tfdir.

DATA: v_found TYPE c.

DATA: v_func LIKE enlfdir-funcname.

DATA: BEGIN OF i_import OCCURS 0.

INCLUDE STRUCTURE rsimp.

DATA: END OF i_import.

DATA: BEGIN OF i_changing OCCURS 0.

INCLUDE STRUCTURE rscha.

DATA: END OF i_changing.

DATA: BEGIN OF i_export OCCURS 0.

INCLUDE STRUCTURE rsexp.

DATA: END OF i_export.

DATA: BEGIN OF i_table OCCURS 0.

INCLUDE STRUCTURE rstbl.

DATA: END OF i_table.

DATA: BEGIN OF i_exceptions OCCURS 0.

INCLUDE STRUCTURE rsexc.

DATA: END OF i_exceptions.

DATA: BEGIN OF i_doc OCCURS 0.

INCLUDE STRUCTURE rsfdo.

DATA: END OF i_doc.

DATA: BEGIN OF i_source OCCURS 0,

  • INCLUDE STRUCTURE RSSOURCE.

line(256) TYPE c,

END OF i_source.

DATA: BEGIN OF e_import OCCURS 0.

INCLUDE STRUCTURE rsimp.

DATA: END OF e_import.

DATA: BEGIN OF e_changing OCCURS 0.

INCLUDE STRUCTURE rscha.

DATA: END OF e_changing.

DATA: BEGIN OF e_export OCCURS 0.

INCLUDE STRUCTURE rsexp.

DATA: END OF e_export.

DATA: BEGIN OF e_table OCCURS 0.

INCLUDE STRUCTURE rstbl.

DATA: END OF e_table.

DATA: BEGIN OF e_exceptions OCCURS 0.

INCLUDE STRUCTURE rsexc.

DATA: END OF e_exceptions.

DATA: BEGIN OF e_doc OCCURS 0.

INCLUDE STRUCTURE rsfdo.

DATA: END OF e_doc.

DATA: BEGIN OF e_source OCCURS 0,

  • INCLuDE STRUCTURE RSSOURCE.

line(256) TYPE c,

END OF e_source.

DATA: BEGIN OF i_tab OCCURS 0,

line(71) TYPE c,

END OF i_tab.

PARAMETERS: p_file LIKE rlgrap-filename DEFAULT 'D:\Documents and Settings\prakash.bhatia\Desktop\funcmods.txt'.

START-OF-SELECTION.

CALL FUNCTION 'UPLOAD'

EXPORTING

  • CODEPAGE = ' '

filename = p_file

filetype = 'DAT'

  • ITEM = ' '

  • FILEMASK_MASK = ' '

  • FILEMASK_TEXT = ' '

  • FILETYPE_NO_CHANGE = ' '

  • FILEMASK_ALL = ' '

  • FILETYPE_NO_SHOW = ' '

  • LINE_EXIT = ' '

  • USER_FORM = ' '

  • USER_PROG = ' '

  • SILENT = 'S'

  • IMPORTING

  • FILESIZE =

  • CANCEL =

  • ACT_FILENAME =

  • ACT_FILETYPE =

TABLES

data_tab = i_tab

  • EXCEPTIONS

  • CONVERSION_ERROR = 1

  • INVALID_TABLE_WIDTH = 2

  • INVALID_TYPE = 3

  • NO_BATCH = 4

  • UNKNOWN_ERROR = 5

  • GUI_REFUSE_FILETRANSFER = 6

  • OTHERS = 7

.

LOOP AT i_tab.

v_func = i_tab-line.

select single * from tfdir where funcname = v_func.

if sy-subrc <> 0.

continue.

endif.

PERFORM get_func_details TABLES i_import

i_changing

i_export

i_table

i_exceptions

i_doc

i_source

USING ' ' v_func.

PERFORM get_func_details TABLES e_import

e_changing

e_export

e_table

e_exceptions

e_doc

e_source

USING 'D02' v_func.

WRITE:/ v_func.

CLEAR v_found.

IF i_import[] = e_import[].

WRITE: 'N'.

ELSE.

LOOP AT i_import.

READ TABLE e_import WITH KEY parameter = i_import-parameter.

IF sy-subrc <> 0.

IF i_import-optional <> 'X'.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_import-typ <> ' '.

IF i_import-typ <> e_import-dbfield.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_import-dbfield <> ' '.

IF i_import-dbfield <> e_import-dbfield.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF v_found = ' '.

WRITE: 'N'.

ENDIF.

ENDIF.

CLEAR v_found.

IF i_changing[] = e_changing[].

WRITE: 'N'.

ELSE.

LOOP AT i_changing.

READ TABLE e_changing WITH KEY parameter = i_changing-parameter.

IF sy-subrc <> 0.

IF i_changing-optional <> 'X'.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_changing-typ <> ' '.

IF i_changing-typ <> e_changing-dbfield.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_changing-dbfield <> ' '.

IF i_changing-dbfield <> e_changing-dbfield.

WRITE: 'Y'.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF v_found = ' '.

WRITE: 'N'.

ENDIF.

ENDIF.

CLEAR v_found.

IF i_export[] = e_export[].

WRITE: 'N'.

ELSE.

LOOP AT i_export.

READ TABLE e_export WITH KEY parameter = i_export-parameter.

IF sy-subrc = 0.

IF i_export-typ <> ' '.

IF i_export-typ <> e_export-dbfield.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_export-dbfield <> ' '.

IF i_export-dbfield <> e_export-dbfield.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF v_found = ' '.

WRITE: 'N'.

ENDIF.

ENDIF.

CLEAR v_found.

IF i_table[] = e_table[].

WRITE: 'N'.

ELSE.

LOOP AT i_table.

READ TABLE e_table WITH KEY parameter = i_table-parameter.

IF sy-subrc <> 0.

IF i_table-optional <> 'X'.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_table-typ <> ' '.

IF i_table-typ <> e_table-dbstruct.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ELSE.

IF i_table-dbstruct <> ' '.

IF i_table-dbstruct <> e_table-dbstruct.

WRITE: 'Y'.

v_found = 'X'.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

IF v_found = ' '.

WRITE: 'N'.

ENDIF.

ENDIF.

  • IF i_exceptions[] = e_exceptions[].

  • WRITE: 'N'.

  • ELSE.

  • WRITE: 'Y'.

  • ENDIF.

*if I_doc[] = e_doc[].

  • write: 'N'.

*else.

  • write: 'Y'.

*endif.

  • IF i_source[] = e_source[].

  • WRITE: 'N'.

  • ELSE.

  • WRITE: 'Y'.

  • ENDIF.

ENDLOOP.

&----


*& Form get_func_details

&----


  • text

----


  • -->P_TRG text

----


FORM get_func_details TABLES t_import

t_changing

t_export

t_table

t_exceptions

t_doc

t_source

USING p_trg

p_func.

CALL FUNCTION 'RPY_FUNCTIONMODULE_READ'

DESTINATION p_trg

EXPORTING

functionname = p_func

  • IMPORTING

  • GLOBAL_FLAG =

  • REMOTE_CALL =

  • UPDATE_TASK =

  • SHORT_TEXT =

  • FUNCTION_POOL =

TABLES

import_parameter = t_import

changing_parameter = t_changing

export_parameter = t_export

tables_parameter = t_table

exception_list = t_exceptions

documentation = t_doc

SOURCE = t_source

  • EXCEPTIONS

  • ERROR_MESSAGE = 1

  • FUNCTION_NOT_FOUND = 2

  • INVALID_NAME = 3

  • OTHERS = 4

.

ENDFORM. " get func details

-Cheers