Question about Designing SaaS

Good afternoon from Gran Canaria.

I would like you to help me to choose the best way to present solutions.

I want to have some solutions in SaaS. My customers will rent some of them (I hope that all of them) so I will have a relations between my customers and the applications that they are able to run. Once the customer has logged in I will present some kind of desktop with icons to the applications enabling/disabling them depending on what they have rented. So far so good, that´s pretty easy to do.

The big question is. What should I do. Have that “desktop” application as a big one having all the solutions as modules or run the solution that user clicks on?

The first one seems to be easy to do, but I would like to know the memory and/or performance impact on the server when there be 10 or 15 solutions. The second one is, for me, the most attractive but, can I run a solution that be not a module of it? can I keep the loging session amongst the solutions?

Feedback will be really appreciated.

Thanks in advance.

Ummm !!! 55 people has seen this post and no one has think about this? :roll:

jasantana:
Ummm !!! 55 people has seen this post and no one has think about this? :roll:

This is an old issue. Your first “solution” about this is the only one I know. You’ll get an answer.

Thanks JCarlos, now I only need to know the performance impact on the server.

I guess you are doing it this way, isn´t it? If so, when you update one of the application, do you have to upload that solution or the main solution?

Thanks.

Hi Juan,

If the change is just in a module of your main solution you can upload just that. No need to upload the whole solution again.
As for performance. Servoy client will only load parts of the solution that it needs at the time. So if your solution has 1000 forms and you are a user that only needs 10 of that only those 10 will be loaded (on demand).

Thanks Robert I got it clear now.

Hi Juan

I have read elsewhere on the forum under Multi-tennant that the number of connections you make to the database has an effect on ram etc. Hence if you are presenting separate solutions and they will each create a connection, either by user choice or being able to do multiple logins, that may affect your design.

Regards

Mark

Mark Crichton:
Hi Juan

I have read elsewhere on the forum under Multi-tennant that the number of connections you make to the database has an effect on ram etc. Hence if you are presenting separate solutions and they will each create a connection, either by user choice or being able to do multiple logins, that may affect your design.

Regards

Mark

So the best way to do that is with a main solution and all the applications be modules of that solution. Is that what you mean?

Hi Juan

Yes. It depends on how divergent your modules are. If your modules data can sit in the same database they can be interwoven with common info. In my case I am using only one module (with some parts in subclassed module) and because Servoy can add and remove tabs on the fly, I can switch tabs in and out based on the users features purchased, or based on preferences. I find this very powerful. I’m trying to keep mine as simple as possible.

Mark Crichton:
Hi Juan

I have read elsewhere on the forum under Multi-tennant that the number of connections you make to the database has an effect on ram etc. Hence if you are presenting separate solutions and they will each create a connection, either by user choice or being able to do multiple logins, that may affect your design.

Regards

Mark

Solutions and database connections have no relation to each other…

If you add 20 solutions or just 1 all using the same servers/tables then there is no difference in the connections being made
Connections are made based on the request for them to the server where ever they come from.
The number of connections is only defined by what you have configured the server for (idle/max) and how many users access that server at once.

jasantana:
So the best way to do that is with a main solution and all the applications be modules of that solution. Is that what you mean?

no the best way is to design your solutions/modules this way that they include only modules or solution that they depend on again.

Then you can load any solution from those solutions and modules that you want.

jcompagner:
no the best way is to design your solutions/modules this way that they include only modules or solution that they depend on again.

Then you can load any solution from those solutions and modules that you want.

Excuse me Johan but today seems not to be my best. I do not understand what you mean, could you please be more clear.

Thanks

Just load the solution in the client that you want to load and that you need to load
You don’t have to generate a solution that just includes everything that doesn’t give you anything.

So just run the solutions the solution the users clicks on.
Also if you switch between solutions the login information is kept, as long as you don’t do logout()

the solution you load just have to have the right modules of course. So every solution just needs a good module dependency hierarchy

Ok I got it now.

One more question Johan.

I see that if the user logged he stays logged in between solutions, but I also have some globals variables that keeps the user_id and the tenant_id. I should send this variables to the new solution using something like:

var aArgs=new Array();
aArgs['tenantID']=globals.tenant_id;
aArgs['userID']=globals.user_i;
application.closeSolution("new_solution_to_open","initSolution","aArgs");

Is the initSolution method fired before the onSolutionOpen? Should I run the onSolutionOpen method from initSolution?

Could you please tell me how it works?

The onOpen method of the solution is fired first and afterwards the deeplinked method. Both get the supplied arguments

Paul