At this years Next Step OutSystems CEO Paulo Rosado announced an improved version of LifeTime. This improved version is necessary because OutSystems customers are developing at the speed of light and after some time they will have very large portfolios of applications. This results in the staging of applications from one environment to another taking too long. But even with this improved staging optimization, how can you manage all your applications in LifeTime?
Lets first take a few steps back, what is LifeTime?
LifeTime is a unified console with visibility of all the environments on the same OutSystems infrastructure. It manages the deployment of applications, IT Users, and security across all environments
Of course, with this definition you know everything you will need to know… or maybe not? The complete documentation for LifeTime can be found at: OuySystems DOCUMENTATION and should be something that your IT infrastructure or Cloud manager should read!
It’s all about working consistently and accurately!
Let’s focus on the application part of LifeTime and how we can manage this. The problem that many companies that I visit face is that multiple developers use LifeTime and there are no common agreements. The tagging (versions) of applications is random and an application that is already in production has version 0.152 for some reason. Forge components aren’t tagged and are changed without comments to the original code. The result: LifeTime is a mess and the probability of errors is very high. But how can we fix this? Working in LifeTime is all about working consistently and accurately. Rules or common agreements should be agreed upon between all the development teams before the first application goes to the next environment.
Creating these common agreements about how to use LifeTime is very personal and will probably vary from company to company. But let me just point out a few tips from my experience.
Forge components in LifeTime
When installing forge components immediately tag the components in LifeTime with the same version as the installed forge component. After installing forge components the connection between your local version and the version in the forge is broken. So if the developers of the component come up with a new version in the forge you can now easily check if you should upgrade or not.
Tagging in LifeTime
You can tag your applications in the following format: M.m.r (Major.Minor.Revision).
The major position is something that will be different in each project. Usually you use version 1.0.0 when going to production for the first time. When should you go to version 2.0.0? It’s up to you, but normally this is done when you have really new functionality in your application.
OutSystems is usually used in combination with an Agile method like Scrum. Using the iteration or sprint number in the tag is a good way to connect you application version to the sprint. The minor (m) could be your current sprint (like sprint number 14) so before production when you start sprint number 14 your application tag would be 0.14.0
The revision position can be used as an ascending number within your sprint. Probably you want to deploy to test multiple times, or you want to tag your application every time you have finished one particular user story. Example your application is already in production and you are currently in sprint number 11 your tag could be: 1.11.6
Keep it clean
There are a bazillion different other ways to keep your LifeTime clean like:
- Start every test application with TEST_xxx so they are grouped together or create one big test application. You probably you don’t want to stage those application to the next environment.
- Remove old Test applications
- Create application logos. These are especially important for mobile apps, because this will be the logo for you native app, but for web applications these logos can be used for you as a developer to differentiate between the hundreds of applications you have installed in your development environment.
- Don’t use abbreviations in your application name.
And you can probably think of many more.
Remember you and your team are the ones that can make a total mess of LifeTime or create nice stress-free environments where we all would be happy. Do you have some other useful tips or tricks that you use to manage your LifeTime, let me know!
 This is a personal blog. Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.
Accelerators for your web-apps, develop with the speed of light..
The OutSystems Forge is a repository of reusable application modules. When you first start working with OutSystems, the Forge can be a little bit overwhelming. At the moment the Forge contains 1137 (and growing every day) applications and modules. This blog will shine some light on a few modules that you should really look at when developing your first apps.
Let’s begin with the child prodigy of OutSystems that was introduced to us in the spring of 2015: SILK UI with all of its templates. This is one of the components that OutSystems developed themselves and is featured and supported. The SILK UI framework helps you build beautiful looking applications with a very high speed. The framework contains a library of patterns for: content management, controls, data visualization and many more. This framework is a must have when you start building your applications. For more information on SILK UI and its templates take a look at: https://silkui.outsystems.com/
Another way to help your users understand you application better is the use of “input masks”. This will help your users to better understand in with format they should type their input. For example: do you want your users to type the data format in mm/dd/yyyy (American standard) or dd-mm-yyyy? Or maybe you want
to show the user that a specific input contains a currency and that the amount is in Euro. There are a few components in the forge that have these features but in my opinion the: CustomMasks application is the best to use. This component gets regular updates and has a great help page!
A lot of applications I have built in the past are applications that are only used in one specific country but when you need to build an application that will be used in multiple countries you will probably get the problem that some of those countries/states are in different time zones. So how do you store and show dates and times? Probably you want to store all date times in the same time zone format. When a user then goes to the application you only need to check in what time zone the user is and change the show the date time in his time zone. The application: Time Zone is a ‘simple’ application that contains a few actions easily to work with date times and time zones.
Many apps you will build over time need some kind of reporting functionality. Maybe you want to export timesheets summaries or want monthly sales numbers with a nice layout. One of the ways to manage this is to build a web page as a report and convert these HTML pages to PDF. These PDF files can be easily printed or saved to the filesystem. In the forge you can find the component: HTML2PdfConverter, as the name suggests this component gives you the functionality to take a page you created in Service Studio and make a PDF file of it. The component itself is already a few years old, but it still gets regular updates. An important difference with the above-mentioned apps is that you will need to install some additional libraries on the application server where you run OutSystems. The documentation and help for this are included in the component.
Do you need more flexibility when developing, did you ever wonder how you could call a screen action from another web block? Well, this is possible with some help of the following component: Event System. This component is a little bit overwhelming when you first look at all functionality that it exposes. The developer of this component has built a learning website that you can find here. Another thing that makes this component different from other components in the Forge that it isn’t open source. You can use the component as is but when you want to customize it you will need to buy it. You can find all additional licensing information on the website provided.
By default you can see that the application is doing an Ajax refresh when looking at the bottom right corner where a waiting text is visible. However sometimes you want to let the user know that the system is working/loading and prevent the user from clicking on buttons or links in the meantime. The component: Full Screen Ajax Wait is an easy to use component for this requirement. You will need to replace the default ajax wait web block with the web block provided by the Full Screen Ajax Wait component.
Will you be using business processes in your application? If so then is the Business Activity Monitoring application a must have. This component contains actions to interact better and easier with your processes and activities and it contains web blocks to show information about your (running) processes. Want to show how many processes are assigned to the IT department or maybe you want to see the processes that are overdue? Just drag the web blocks on your page and your users (certainly managers) will have all the information they need in beautiful looking diagrams and charts.
The last component I want to bring to your attention is a very small component that I already used a number of times. Sometimes you’re in the need of a random number, well then there is the Randomizer Number Generator. As the name suggest you can get a random number from the actions in this component, handy if you need to divide users into groups. If you’re a looking for a way to generate a unique number, then you should look at the action: GenerateGuid from the system module.
I hope you all enjoy developing with the OutSystems Platform as much as I do. Did I forget a component you use in every project or is letting you develop faster than the speed of light? Let me know!
 This blog only looked at modules for web applications, this is a personal blog. Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.
 The components talked about are not owned by me and can be changed over time or disappear.
Last couple of months I had the pleasure to introduce several of our customers to the OutSystems Platform . OutSystems provides a low-code rapid application development and delivery platform that enables seamless integration of custom code. It combines speed with custom coding for the best of both worlds.
Often there is a big question mark about the license structure of OutSystems. In this blog I would like to tell you a little bit more about the OutSystems license structure and what you as a developer should keep in mind. This will result in a efficient license and a cleaner application architecture.
In an OutSystems License there are 2 major factors that determine your license fee:
- The number of “Active Named Users”. In other words the total amount of users in the OutSystems User application.
- And the number of Application Objects.
The easiest way to monitor this is to look at the license page in Service Center, you can find this at: <OutSystems Environment>/ServiceCenter/Environment_Configuration. (jsf/aspx) under the link “Licensing”.
The number of users is fairly straight forward, but what is an Application Object (AO)?
If you look at the description from OutSystems it states: “all Entities, Screens and Integrations count for 1 AO”. With this you could roughly count how many AO’s your application will cost. But for all you techies I will give you a little bit more specifics about what count and what doesn’t count as an Application Object.
So OutSystems divides its IDE tool and platform into 4 categories:
In this category you can find everything related to the data structure and resources of your application. Every (static) entity that you make will count as 1 AO. An (static) entity correlates with an database table inside the OutSystems database. So in other words you could say that every table your application requires, will count as 1.
Everything else (Entity Diagrams, Structures, Session/Site variables and recourses) in this category is “free” and will not count towards your Application Object maximum. If you reuse entities from other eSpaces or extension they will count as Application Objects in their original module.
Creating (user) actions, roles, or exceptions will not count as AO’s. A good level of granularity in your actions can make your module better maintainable and supports the reuse in other modules. So don’t try to make one big action that supports all cases.
Consuming or exposing web services will count as AO’s because these services are integrations. Keep in mind that OutSystems counts the service methods and not the services. For example: if you expose 1 Service with 3 Service methods it will count as: 3 AO’s. The same rule is applied when consuming services each method you consume will count as 1 AO.
This category is straightforward: 1 AO for each screen and each email template you create. Reusable parts of a screen (webblocks) will not count on their own. A small thing worth mentioning: Multilingual Locales are also free from the AO count. So you could make your application Multi-language in as many locales if you want.
In this fourth and last category you have the opportunity to make (batch) timers and processes. Both will not count towards your application object maximum.
A good architecture and clean way of working will result in an optimal use of Application Objects. This holds for example for the use of tables (do you really need them) and the use of applications from the Forge.
If you reach the maximum application objects you cannot longer publish any modules that contain new application objects.
In conclusion, as a developer be aware of how many Application Objects the module you are developing and optimize your application if necessary. This will not only give you room to develop more great applications but also helps you to make your module as lean as possible. A lean module will support the reusability and maintainability of you application! OutSystems overview & education by Transfer Education.  Over time OutSystems license terms and conditions may be subject to change. Please contact OutSystems or Transfer Solutions for the latest information with regard to OutSystems licenses.