In this blog you will learn how to hide statuses from the graphical status overview section (roadmap) of your ChaRM transaction in case they are unused/undesired for some reason.
The requirement from a process point of view
If you are working with SAP ChaRM on the SAP Solution Manager, usually the current status of a change transaction (change request or change document) is shown graphically in the status overview section.
If you have undesired user statuses that you don’t want to use in your process, it is not advisable to delete them in the status schema of your Z-transaction type as it might lead to inconsistencies. Deleting them would also reduce your capability to update your z-transaction types after upgrading to a new support package.
So, for the sake of consistency and release-robustness, it would be better to just jump over those statuses by adapting the actions in the action profile (not covered in this blog) so that from a process point of view these statuses can never be reached.
But what about the status overview section (roadmap/bread crumbs view) in your ChaRM solution?
Since those statuses aren’t technically deleted and even though they cannot be reached by any action anymore they will still show up.
But what if you and more importantly your users really don’t want to see them?
The solution
So how do we go about the get rid of those statuses in the graphical status overview?
Luckily SAP has prepared us for that by providing the BAdI AI_CRM_CM_UI_ROADMAP.
There is also the note 2720397 describing the basic possibility to achieve our goal, but it doesn’t contain any sample code.
Let me give you a detailed step-by-step guide on how to create the BAdI implementation and what to pay attention to.
For this example let’s pretend we are using transaction type ZMMJ and we want to make the two statuses “Testing for preliminary import” (E0012) and “Tested for production import” (E0013) disappear.
Create a new BAdI implementation
Open transaction SE19 enter the BAdI AI_CRM_CM_UI_ROADMAP and create a new implementation for it:
Give your enhancement implementation a Z-name and a description
Note: the implementation doesn’t have to contain the name of the BAdI you are free to choose any name from the customer namespace. I just chose this one for ease of remembering it:
In the next screen you get to choose the name of the implementation and the class:
Note: Again it is not required to use the same name for the implementation. Also they do not need to contain the name of the BAdI, but I chose to do so because it’ll be easier to find them again later.
Now create an object catalog entry and choose an existing package (or create an new package in SE80):
Choose an existing transport for your class or create a new one:
Now from the overview screen of the enhancement implementation make a double-click on “Implementing Class”:
Make a double-click on the method
Once you have double-clicked on the method you will be asked if you want to create an implementation for it. Answer with yes:
Now you will end up in the class builder:
Enter the code
You can use the code below as an example:
method IF_AI_CRM_CM_UI_ROADMAP~MODIFY_ROADMAP.
"Hide steps "Testing for Preliminary Import" and "Tested for Production Import"
try.
data(ls_order) = order->get_header( ).
catch cx_ai_crm_cm_com_generic. "
catch cx_ai_crm_cm_com_no_authority. "
endtry.
if ls_order-process_type eq 'ZMMJ'.
delete roadmap
where state ne cl_thtmlb_roadmapitem=>gc_state_active
and txt04 eq 'TIMP'.
delete roadmap
where state ne cl_thtmlb_roadmapitem=>gc_state_active
and txt04 eq 'GETP'.
endif.
endmethod.
Please note that in this case we used the transaction type ZMMJ.
But where do you find the status names of the statuses you want to hide?
Well, the answer is: directly from the status schema.
When you open the status schema (in this case ZMMJHEAD) you can see the names:
Once you’re done with the code do not forget to make a syntax check and activate it:
Once you’re done with the code, go back, double click on the enhancement again and activate it:
You might need to switch tabs to get the system to show the correct status.
Make sure it says “The implementation will be called”.
Result
Now you shouldn’t see the statuses anymore that you included in the code:
So we have learned how to hide unused statuses from the graphical overview section.
In combination with adapting the action profiles and the actions therein, you will be able to effectively exclude certain user statuses from the process without actually having to delete them.
Hope you find this information useful.
I’ll be happy to try and answer any questions in the comments section below.