04-12-2024 3:59 AM - edited 04-12-2024 4:00 AM
Hi All,
I am building a sample app to learn RAP. I created a BO with two fields. This BO has @AccessControl.authorizationCheck: #CHECK annotation. This BO does not need any additional functionality hence after creating Behavior Definition, I thought I will skip creating behavior implemntation class and created service,
While testing the service, when I create a record, I get following error in the browser.
Runtime Error: 'RAISE_SHORTDUMP'. The OData request processing has been abnormally terminated. If you use SAP S/4HANA Cloud, please create an incident. Otherwise, if "Runtime Error" is not initial, launch ADT feed "Runtime Errors" or transaction ST22 / SM21 (system log analysis) for details and analysis.
In ADT, I can see following error(s)
Gateway error log - Backend Error: Metadata cache on hub system for current model is outdated
I also got another error, which I thought was not related to above.
The current program has intentionally triggered a termination with a short dump.
The dump analysis revealed "The exception is related to the previous exception "CX_RAP_HANDLER_NOT_IMPLEMENTED" that occurred in
program "CL_RAP_BHV_PROCESSOR==========CP", in line 30 of include "CL_RAP_BHV_PROCESSOR==========CM01G". The reason for this exception
was: Handler not implemented; Method: GLOBAL_AUTHORIZATION, Involved Entities: ZC_LV_CAT_9000"
While trying to figure out how to resolve cache issue, I decided to create the implementation class which would fix the error, The current program has intentionally triggered a termination with a short dump. however after creating the class, I did not write a single line of code and all the errors disappeared.
I am struggling to understand the relationship between the implemntation class and the other two errors. I'll appreciate any guidance in this context.
Regards
ASM
When you created the behavior definition with @AccessControl.authorizationCheck: #CHECK, you instructed the RAP framework to enforce authorization checks. The framework then expects to find a corresponding implementation that defines this logic. However, as you initially skipped creating the behavior implementation class, the framework couldn't find the necessary code to execute this check, leading to the CX_RAP_HANDLER_NOT_IMPLEMENTED error.
When you eventually created the behavior implementation class, even without adding any specific code, you effectively provided the framework with a placeholder where it expects to find the authorization logic. By doing so, you satisfied the framework's requirement to have an implementation class associated with the behavior definition that includes authorization checks.
The absence of the implementation class was indirectly causing the "Metadata cache" issue as well. The RAP framework relies on a consistent and up-to-date view of the metadata to operate correctly. When part of the expected implementation (like the authorization handler) is missing, it can disrupt the normal operation and caching of metadata, leading to such errors. Once you added the implementation class, the framework's expectations were met, allowing it to correctly process and cache metadata, which resolved the "Backend Error: Metadata cache on hub system for current model is outdated" error as well.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks @naveen_k1 for your detailed and clear explaination. Somehow it did not appear earlier. I can now understand why I was getting the error.
Thanks
ASM
The relationship is not between the annotation @AccessControl.authorizationCheck: #CHECK and the implementation class, but when you create a Behavior Definition (BDEF), and you specify strict mode, you must specify - "authorization master". And when you do that, you must define a method in the implementation class for this.
Now, if you skip creating the implementation class, the framework will be unable to find a method corresponds to authorization you have defined in the BDEF, hence the dump.
Also, the method will be part of local class inheriting from CL_ABAP_BEHAVIOR_HANDLER, hence the exception raised is CX_RAP_HANDLER_NOT_IMPLEMENTED.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @asm_sapdev, As I mentioned earlier, the framework expects a method declaration for authorization. It does not matter if you don't implement it. But it must be present and for a method to exist, a class must persist. Hence, it's needed.
If your query has been resolved by anyone's answer, please mark that answer as accepted. 🙂
Hi,
I think there's a confusion with the authorization terms. See next:
I hope this helps.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Thanks for providing the explaination. I think I may not have explained my problem clearly.
My understanding is -
Hope it is more clear now. Once again thanks for your help.
Regards
ASM
User | Count |
---|---|
74 | |
10 | |
8 | |
7 | |
6 | |
6 | |
5 | |
4 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.