Mass-activating multiple objects (in background)
This blog post shows how to mass-activate multiple objects (in the background) and where to find the logs for the activation.
Since SAP decided to discontinue the IS-Media solution, we often have the requirement to add custom fields to MARA or similar tables in the S/4 HANA migration project I currently work on. Unfortunately, the current extension concept does not meet all our requirements and we get the change requests to add new fields or change existing fields only little by little, which means that we have to repeat this step every few weeks.
Although the S/4 machine in the project is quite big, the activation of the said objects often leads to performance problems. Therefore, I decided to explore the activation of these objects in a background task and now want to share my experiences with you.
2 How to active multiple objects in a background job
2.1 Report RADMASG0_C3
The report RADMASG0_C3 is the successor of the report RADMASG0 and introduced parallel processing, among other features. It has been created in 1999 and therefore should be present at almost all active SAP Systems.
There are three options to use that report to activate objects via a background job:
- Specify transport(s) which contain(s) the objects to be activated
- Specify objects directly
- List objects in external table
The first approach only makes sense if the objects to be activated do not share the same transport as other objects.
The second approach mostly makes sense when you have to activate the same objects multiple times.
The third approach comprises adding objects to an external table. I use the table TACOB which allows to add the object names easily and can be maintained in SM30.
All three approaches require to create a variant in the report which then can be called in a background job. The third approach only requires a one-time configuration of this variant which is why it is my favorite one.
2.2 Preparing the variants for background jobs
Run the report RADMASG0_C3 in transaction SE38.
For all the following variants I would recommend activating the radio button “Output to Database” and the flag “Save log information” as can be seen in the screenshot above.
2.2.1 Variant for activating objects in a transport
Simply enter one or multiple transports…
… and click on save to enter the variant configuration screen.
Enter a suitable name & description and save the variant.
Note: Since this variant is probably used only one time, I would recommend naming it accordingly like in the screenshot above.
2.2.2 Variant for activating objects directly
Click on “direct objects” …
… and enter the objects to be activated.
Once all objects are entered, save the variant similarly as for the transport variant above.
Same as for the transport variant you should give it a proper name to be able to distinguish the different variants later.
2.2.3 Variant for activating objects listed in external table
Enter TACOB as an external table…
…and create a variant named ACTIVATE_TACOB.
This variant can be reused everytime, because it simply references the table TACOB in which the objects can be listed.
2.3 Scheduling a background job to activate the objects
Once you prepared the desired variant you can schedule a background job for it.
In case of using the external table, you need to list the objects in the table TACOB first via TCode SM30:
To create the background job, open TCode SM36 and enter a proper name.
In the “Step” just enter the report RADMASG0_C3 and state the variant you prepared previously.
You can now either start it immediately or schedule a time to start the job.
The runtime can be monitored in the job overview as usual.
2.4 Read log in case of errors
If you chose to write a database log you can find it using TCode RM_97.
Specify username and timeframe…
… and run the program. In the list you can now choose your log:
The log should give you detailed information about any errors (or success messages):
2.5 Comparing RADMASG0_C3 to RASMASG0
Although there is no documentation in the system, the main advantage of RADMASG0_C3 seems to be the faster activation time due to the RADMASG0_C3 faster than RADMASG0 due to the utilization of parallel processing.
Here a comparison – activating the same objects in RADMASG0 …
The report RADMASG0_C3 can be used to activate multiple objects via a background job (SM37) in parallel processes. This enables scheduling of activations in downtimes and does not block a GUI session. Additionally, the activation time is being decreased tremendously. This is especially attractive when working on one of the central tables (MARA, …) and having many users on the system. If needed, database logs can be written and analyzed via TCode RM_97.
Nice post! I think it's very helpful that it starts with explaining the use case and goes end-to-end.
Thanks for sharing!
Your blog helped me.
Thank you for sharing.
Nice article but do we have a way to mass set Inactive status like for Classes?
at the top of my head I would suggest using RS_WORKING_OBJECTS_ACTIVATE. You probably need to assign the objects to your user first which can probably be done fastest by using RSWBO052 (also accessible via SE03).
Are you able to show me an example entry on how to set Inactive for programs in this FM please? I don't see any option to set it.