Hi all. I have an architecture question on how best to tackle this without raising any issues on AI Mentor Studio or Discovery tools.
We have an application called AD Reborn that is responsible for syncing Active Directory roles to Outsystems roles. This app has it's own management pages, but only one screen (the login screen) is consumed by other apps. From my understanding of O.S. architecture, a single screen being referenced just as a redirect would be considered a "weak side reference" and shouldn't raise a flag.I am not sure if I either built this incorrectly or understood this concept incorrectly.
It also won't fix the AI Mentor Studio "end user module consuming another end user module", since you're still consuming an element of the ADReborn module (namely the login screen).
I see three ways you could make this work: 1. Link to the login screen using a URL instead of consuming the screen, thus uncoupling it, but potentially creating issues in the future (for example when changing the name of your screen);2. Put the content of your login screen into a block and create a separate login screen in every application that contains that block. For this to work, you would have to split your ADReborn management screens into a separate (end-user) app, so that only core modules would remain in your ADReborn Core application. That way you can create a reference to the login block in your ADReborn Core application without creating a side-reference (as it is now a core app instead);3. Overrule the classification of the module that contains your login screen and reclassify it as a foundation module. In this case you should probably still put your management screens in a separate (end-user) app.
Hi,
https://success.outsystems.com/documentation/11/developing_an_application/design_ui/look_and_feel/themes/
??
If you have this login screen redirecting to multiple applications then I would say that you would not be violating any architecture rule, as long as you are redirecting and not consuming the screens. As you said, weak references are supported and should not be an issue.You can check the documentation as mentioned above and also use discovery to validate this scenario.You can also refer to this post to have a deeper and better explanation on the topic:https://www.outsystems.com/blog/posts/application-architecture/
Right that is how I understood it also. Could it be the fact that it consumes a server action also? These are the objects consumed from AD Reborn in a different app:
I also have the screens used like so (redirected):
Does this usage still hold for weak side reference, or am I doing something wrong?
If you're also consuming a server action, that would indeed cause a strong dependency. No matter how few, if one of your dependencies is strong, those two modules will be considered to be tightly coupled.
In addition to that: weak dependencies between two end-user modules are still references and will trigger a side-reference violation. Modules with a weak dependency are loosely coupled, but not uncoupled.
This makes sense. I can remove the server action to transform the strong reference into a weak reference, which will fix the AI Mentor Studio complaint of "end user module consuming another end user module", but Discovery will still flag is as a side reference, no matter how small. Is this correct?
If that is not the case, it seems is there no "safe" way to reference a login screen like I intended to?
Hi Jeroen, thank you for taking the time to write this up. This makes sense.
for #1, this would uncouple it, and it may be what we have to do since it's literally just a redirect.
#2 would create a lot of extra AOs to just avoid this.
#3 Also is a feasible solution, which I will explore before going back to #1. Thank you very much!