Moving bunch of objects or piece of code is fundamental concept of software development in real time environments. SAP has it's own or unique way of moving objects across the landscape. Transport number (workbench request or customizing request) is unique number generated by SAP system while creating object (ex: table, program, function module, enhancements etc..,). SAP Transport system management team (part of SAP BASIS) will take care of releasing transport numbers from one system to other system as per the defined deployment path.
One of the important task that needs to be performed before importing/applying transports is checking for dependencies. System will through error while importing transports if there is any dependency. Before searching for solution, let's try to understand what could be the reason for transport error. Below steps, is one example, can cause transport error.
- Table ZTEST1 created and saved under DEVK111111 transport number.
- Program ZPROG1 implemented and saved under DEVK222222 transport number (Note: I am using ZTEST1 table in program ZPROG1).
- Attempted to release DEVK222222 – Error because, target system is not having table ZTEST1 and ZPROG1 is trying to use this object.
Apart from above, there are few other cases which can cause direct or indirect transport errors or application errors due to discrepancies in list of transport numbers. This can raise serious flags in production systems. Little extra care around transport numbers will resolve these kind of issues. When we think about manual approach to avoid this issue, only option we can think about is, having them on the excel sheet in the original order. Before we discuss about further solutions, have a look at http://help.sap.com/solutionmanager. If we cannot leverage Solution Manager for our projects then we can implement application to avoid deployment errors. Similar to.. or I can say little more than Solution Manage System, we can track our deployments irrespective of projects that they belong to and without any manual work.
What should we check to avoid transport error?
Technically, if we are good with below notes then there shouldn't be any transport error and error for later date.
- Object that we are moving with current transport should not have any 'unreleased' previous versions. This is applicable to non-development systems only. Having 'unreleased' previous version can cause transport error in couple of ways.
- Dependent object's latest version should be in target system, when source system is development system. If source system is non-development system then "Import Time Stamp of dependent object for Source System" should be greater than "Import Time Stamp of primary object for Source System". If not, then identified* transport number of dependent object should be released (* Transport number that was imported to source system before current transport number).
Application Flow - Data Source and Function Modules
Application should get transport numbers (direct input, date range, based transport description, user name etc.,) and check for dependencies with three simple high level steps.
- Get Transport number, Task number and Primary object names from E070 and E071 table
- Get Secondary objects based on the Primary object type. (Ex: For Table, it will be Data Elements and Domains)
- Check release Time Stamps with help of Function Modules and VRSD table data & generate the report by consolidating the information.
This can be executed on your development system where transport/version logs were maintained. Let's have a look at flow in more detail...
- First step, you need to get valid transport number based on the user input. We can rely on "E070" table to get valid transport number and "E07T" table to get transport number based on the description. TMS_TP_SHOW_BUFFER will help you to get transport number that were added buffer.
- 'TR_READ_GLOBAL_INFO_OF_REQUEST', use this function module to get time stamp. This is where you can check if transport number released from source or not. You can also determine if transport number already applied to target system. In addition to that, it is very important to capture the import time stamp for later checks.
- Get Object Type and Object name from E071 table. And after that, check previous version transport number number based on the data from VRSD table. Note: While fetching data from VRSD table you might want to use Object Type and Object Name from E071 table but we need some additional mapping table for this object type as these two doesn't match sometimes. Now, while checking previous versions we can utilize time stamp, captured in step two, as well.
- Now, listing dependent objects is one of the major task in the entire effort. Again, based on the object type, you can get it from various data sources. For example, DD04L table to get domains, DD33S to get search helps and DD03L to get data elements. For any object that can contain code lines, we should rely on reading and scanning those code lines. Example, Executable program, Function Group, Function Module, Class and Methods etc., Use "READ REPORT" and "SCAN ABAP-SOURCE" keywords to read code lines and to identify dependent objects. Remember, dependent object that we need to worry about it always "custom" objects, not SAP standard objects.
- Once we identify list of object then we need to check which version of dependent object should be there in target system and generate error if that is not the case. We can rely on function module that can give us import time stamp for this.
"Dependent object's latest version should be in target system, when source system is development system. If source system is non-development system then "Import Time Stamp of dependent object for Source System" should be greater than "Import Time Stamp of primary object for Source System". If not, then identified* transport number of dependent object should be released (* Transport number that was imported to source system before current transport number)."
Project deployment is one area where we need to monitor the things very carefully. Especially, when multiple teams are working on different projects within single landscape then keeping things in our control is not an easy job. Application like above will certainly improve your process by automating the things.