How do you track the number of applications based on number of users


  How do you track all the applications that you worked in out systems like  on number of users and number of objects of the application?  Currently we are tracking by sharepoint and excel sheet.

Anyone done this type of project in outsystems? Inputs needed to start the application.


We track it using Outsystems itself by doing an Advanced SQL query. The query will depend on what you want to track and how the users are associated. For example we have a large number of "Clients" and a lot of applications which clients will use a mix of. We created an entity that pointed to the espace with security roles (SupportPages & SecurityEspaceLink) and linked that to systems tables User_Effective_Roles, Users & Tenants with the below SQL. We then use this as a monthly billing report which gives the user count based on the roles assigned to each application. As we bill by users I haven't had to link in Object counts at this stage.

FROM (((((({SupportPages} ENSupportPages
    Inner JOIN {SecurityeSpacelink} ENSecurityeSpacelink ON (ENSupportPages.[ID] = ENSecurityeSpacelink.[SUPPORTPAGEID]))
    Inner JOIN {Role} ENRole ON (ENSecurityeSpacelink.[SECURITYESPACEID] = ENRole.[ESPACE_ID]))
    Inner JOIN {User_Effective_Role} ENUser_Effective_Role ON (ENRole.[ID] = ENUser_Effective_Role.[ROLE_ID]))
    Inner JOIN {User} ENUser ON (ENUser_Effective_Role.[USER_ID] = ENUser.[ID]))
    Inner JOIN {Tenant} ENTenant ON (ENUser_Effective_Role.[TENANT_ID] = ENTenant.[ID]))
    left JOIN {TenantExt} ENTenantExt ON (ENTenant.[ID] = ENTenantExt.[TENANTID]))
AND ((ENUser.[IS_ACTIVE] = 1) or (month(ENUser.LAST_LOGIN) = month(dateadd(m,-1,getdate())) and year(ENUser.LAST_LOGIN) = year(dateadd(m,-1,getdate()))))
and (ENUser.username not like 'itvision@%')
GROUP BY ENTenantExt.[DisplayName],ENSupportPages.[APPLICATIONNAME], ENTenant.[NAME], ENSupportPages.[STOCKCODE], ENTenantExt.[jimJobNo]
order by ENTenantExt.[DisplayName],ENTenant.[NAME], ENSupportPages.[APPLICATIONNAME],ENSupportPages.[STOCKCODE], ENTenantExt.[jimJobNo]

What will SupportPages , SecurityEspaceLink, and Tenants  will do? in the application

Based on the users(licensing) for each project. What are relationships taken in tables(Entities)?

I want track project based on below information.

LC#PriorityProjectApplication  DescriptionTeam# of
Data SourcesUIOutSystems
Timeline StatusCurrent
    Number of
    Number of

Anusha Pakalapati wrote:

What will SupportPages , SecurityEspaceLink, and Tenants  will do? in the application

Tenants is the Outsystems entity that contains the Multi tenant details, ie each of your "Clients". SupportPages is an entity we created that contains a list of each "Virtual application" that we bill by also contains some additional details like the internal support pages for each application, SecurityEspaceLink is a one to many link table from SupportPages to the espace that contains the Roles. 

When following the 4 layer architecture you don't have all your code, entities and security in a single espace so we need to have a simple way of defining which different espaces belong to each logical application (our systems is very complex with hundreds of Outsystems "Applications" and we need to map multiple together for billing). Each "Virtual application" has an entry in the SupportPages entity, that then uses SecurityEspaceLink as a one to many relationship table to link together each espace that contains the actual security role definitions used by the Virtual application. By grouping by the virtual application from SupportPages to the security espace via SecurityEspaceLink and then to Role, User_Effective_Role and User we can get a count of exactly how many users contain a role that is used by each of our virtual applications. The Tenant entity is simply to allow us to break that down by "Client".

A little complex to explain but in practice it's actually quite a simple process once you understand how the Outsystems System entities hang together.