Ideas
10911ideas
Created on 08 Aug 2018
2018-03-26 14-20-06
Jordan Welch
It would be nice if there was a native way to call screen actions from JavaScript.Currently the best way to do this is to create a hidden button with the intended action and then clicking it from the JavaScript.I was thinking this could be achieved by creating a JavaScript function call attribute of the screen action. Similar to how Widgets have a .Id attribute, actions could have something like a .JSFunction attribute that could be included in JavaScript that would then start the screen action.
4399
Views
4
Comments
Implemented
Frontend (App Interfaces)
Platform Server Release Oct.2019 CP1
Created on 09 Nov 2025
2026-03-27 18-29-15
nana jmecher
Hey everyone 👋 I want to share a new idea I’ve been testing lately — we’ll avoid using Static Entities completely, and instead create Server Functions that return the needed lists. This way, we can keep the same behavior as Static Entities but save several Application Objects (AOs) at the same time. In the example below, I’ll show a simple end-to-end demo where this approach helps me save 3 AOs at once 🚀 Here’s the main concept: No Static Entities Replace them with Server Functions that return lists Keep it reusable, simple, and AO-efficient 👇 Check out the demo below! 🧩 The old approach — using Static Entities Let’s start with a simple example. I have an entity called Activity with the following attributes: Name (Text) Description (Text) StatusId (Identifier) PriorityId (Identifier) ClusterId (Identifier) In a traditional setup, these three “Id” attributes are Foreign Keys to Static Entities: Status – contains values like Open, In Progress, Closed Priority – contains Low, Medium, High Cluster – contains Automation, AI, Data Management, etc. 🚀 The new approach — replacing Static Entities with Server Functions Now, let’s move to the new approach. In this version, I’ve removed all Static Entities — Status, Priority, and Cluster — completely. The ActivityNew entity structure stays the same in terms of logic, but the data types for the linked attributes are changed from Identifier to Text: ⚙️ Step 1 – Creating a base structure for our “static” data Before building the Server Function, let’s first create a structure that will represent our “static entity” values. This structure will be reused by all our functions (Status, Priority, Cluster, etc.). Here’s how to do it: Go to the Data tab → Structures. Create a new structure and name it strStaticEntity. Set Public = Yes (or No, depending on whether you want to reuse it across modules). Add two attributes to this structure: Id (Text) — represents the ID or code value. Label (Text) — represents the display name. (Of course, you can add more attributes if needed — for simplicity, I’ll keep just these two.) This structure will act as the base for all the lists that we’ll expose through our Server Functions. 🧠 Step 2 – Creating the Server Function Now that we have our base structure (strStaticEntity), let’s move on and create the Server Function that will return our “static” data. Go to the Logic tab. In the Server Actions section, create a new folder named StaticEntities — this will help us keep all our functions organized in one place. Inside this folder, create your first Server Function and make sure the Function Property is set to yes 💡 Naming convention: I like to use a small prefix to keep things consistent. For example, I’ll name this function seStatus, where: se stands for Static Entity (so it’s easy to recognize what type of function it is), Status represents the type of data it will return. So the full name seStatus clearly indicates that this function behaves like a Static Entity for Status. Later, I can follow the same pattern for other functions: sePriority – returns the priority list seCluster – returns the cluster list 🧠 Step 3 – Defining inputs and outputs for seStatus Now that we have the function created, we need to define its input and output so it can be used in multiple ways. Input: Name: Identifier Data type: Text Mandatory: No (set to No, because this input is not required all the time) This input will allow us to retrieve a specific label or value when needed. Later, I’ll show exactly how and where to use it in the app. Output: Name: ListOfStatus (or any descriptive name you prefer) Data type: List of strStaticEntity This output will return the full list of statuses, which we can use to populate dropdowns or for other logic that normally relied on the Static Entity. 🧠 Step 4 – Building the function logic in the flow Now it’s time to define the logic inside our seStatus function. Drag a ListAppendAll action into the flow. For the Source property of ListAppendAll, use the output list we previously created (e.g., List). This will allow us to append multiple items to the list at once. Next, we will add individual items representing each status (like Open, In Progress, Closed) to the list using ListAppend actions. Each item will be a strStaticEntity record, with its Id and Label set. By clicking on the plus Sign 🧠 Step 5 – Adding conditional logic and filtering The next step is to drag an If widget into the flow. Why are we doing this? We want to check if the function has been called with the Identifier input: If Identifier = "" (empty), the function will do nothing and simply return the full list. If Identifier ≠ "" (not empty), the function will return only the matching label for the given Identifier. Here’s how to implement this: Drag an If widget into the flow and check: Identifier = "" On the False branch (Identifier is provided): Drag a ListFilter server action into the flow. If you don’t have it yet, bring it in from Manage Dependencies → System. Set the List property of ListFilter to our function’s output list (e.g., ListOfStatus). Set the Condition to: Identifier = Id This will filter the list to only include the item that matches the given Identifier. After the ListFilter, add an Assign widget to update the output: Set ListOfStatus (our function output) = ListFilter.FilteredList 💡 Now the function works for both cases: If no Identifier is provided, it returns the full list. If an Identifier is provided, it returns only the matching item, instead of all labels. 🧠 Step 6 – Using seStatus (and other functions) in the app Let’s say we want to display a list of activities with their Status, Priority, and Cluster. Create a Block where we will handle the data. Inside the block, create a Data Action. Note: I already created some records in ActivityNew. Others can create their own records as needed. After creating the Data Action, drag an Aggregate into the flow: Select ActivityNew as the source. Set the output of the Data Action: Data type: Text Record List Add attributes to the output for the values we want to expose: Name, Status, Priority, Cluster All of them set as Text. Next, drag an Assign widget: Set the output of the Data Action = Aggregate results. Now you will be prompted to map each record attribute: Name → ActivityNew.Name Status →seCluster(ActivityNew.ClustersId).Current.Label <---see how we used our function Priority → sePriority(ActivityNew.PriorityId).Current.Label Cluster → seCluster(ActivityNew.ClusterId).Current.Label 💡 This way, the block will return a list of activities with all the necessary values in text format, fully replacing the need for Static Entities. Now just drag a Table to the block and assign the Output List Use the block to a screan and PUBLISH AND let s see the result 🧠 Step 7 – Observing the results and bonus usage After running the app, you can see the results in the interface: Where Priority is missing, it means that either the Identifier was not set or it was left empty. I did this intentionally to show that the function works correctly and handles missing values gracefully. 💡 Bonus: LET me teach you how to filter by multiple choises The function can also return a full list if no specific Identifier is passed. This is useful when you want to populate dropdowns or lookup values without filtering for a single item. Additionally, you can filter directly in an aggregate using multiple values in the filter, which allows you to dynamically retrieve only the relevant subset of records while still using our server functions. This demonstrates the flexibility of the approach: Single-item lookup using an Identifier. Full list retrieval when no Identifier is provided. Optional filtering at the aggregate level for more complex scenarios. 🧠 Step 8 – Creating a reusable Data Action for Filters / Dropdowns In the block, we will create another Data Action, called Filter/Dropdowns: The purpose of this Data Action is dual: To populate dropdowns. To provide a filtered list when needed. For the output, set the name as you like (e.g., List) and set the data type to List of strStaticEntity. Flow setup: Drag an Assign widget into the flow. Assign the output (List) to the result of our server function. Example: List = seStatus() Notice we don’t pass any Identifier here, so the function will return the full list. 💡 This pattern works the same for other static-like data: sePriority() → returns all priorities seCluster() → returns all clusters This allows you to re-use the same Data Action for multiple dropdowns or filtering scenarios without creating multiple static entities. Ok now For the Bonus Let me show you how to filter in aggregate for multiple filter Get The String_Jon in action from manage dependencies Create a variable called StatusFilter or whatever you want(we gonna store here our multiple ids for filtering) Go to our aggregate in the data action add this filter I am using DropdownSearch but you can use also DropdownTags, but make sure that the allow multiple choise is set tot true Bring String_Join action to the DropdownSearchOnchanged Action and set the list input to be selectedoption list from the exxpresion editor and add "," as separator Assign Variable StatusFilters to be = to the output of the stringJoin action, then refresh the data action that get our activities and THAT IS ALL, let` s test it!!! As you can see it s working for single choise But Also For Multiple Thank you All and feel free to reply with your thoughts or improvements!
299
Views
2
Comments
Out of scope
Ideas
Created on 18 Mar 2019
2016-04-21 20-09-55
J.
Looking at: https://success.outsystems.com/Documentation/11/Reference/OutSystems_Language/Logic/Built-in_Functions/Math#Roundmeans that when you round in the code versus round in an aggregate you can have different output.This is horrible to work with.Therefor I suggest to add a optional parameter to Round to provide how you want to round, so we can make the aggregate and code consistent without having to build some weird workarounds.
850
Views
7
Comments
New
Builtin & User functions
Created on 21 Nov 2023
2023-08-28 07-00-10
Paulo Torres
Hello, I think to have a option to disable the manual swipe on StackedCards would be a very usefull feature. Thanks, Paulo Torres
145
Views
3
Comments
New
OutSystems UI
Created on 02 Mar 2011
2025-02-18 15-49-16
Hugo Almeida
This is a minor but sometimes useful feature. The ability to resize the comments tool widget by dragging freely the corners instead of having to insert breaks on the text.
1251
Views
20
Comments
On our RadarOn our Radar
Service Studio
Created on 15 Oct 2024
2019-09-20 10-25-35
Mario Andrade
OutSystems is not really a front-end friend, it's more like a distant cousin when comparing it with other low-code platforms. My idea is to have a way to retrieve a specific folder from the project to our local machines / laptop similar to how Github works. Using a fetch command we would retrieve the files to a local directory on our laptop. This would give us access directly to implement our own front-end development workflows such as using Visual Studio Code do work with other tools such as TypeScript or SASS. Using a commit/publish/push command would allow us to update specific files/folders to the OutSystems Server with the code to use on the project. All the compiling would be done on our local machine. This would also allow front-end developers to integrate tools such as Grunt to automate processes and speed up our workflows.
130
Views
1
Comments
New
Frontend (App Interfaces)
Created on 13 Feb
2026-02-13 06-13-13
harshita lalwani
As a developer building Reactive Web Apps, I often find myself writing the same basic logic to format data (e.g., converting a Decimal to Currency, or a Date to a specific local string). I propose adding a 'Quick-Format' dropdown or right-click menu directly within the Expression Editor. Instead of manually typing FormatCurrency (Product.Price, "$", 2, ".", ","), beginners could select a preset that auto-generates the function. This would speed up frontend development and reduce syntax errors for those new to the platform.
71
Views
2
Comments
New
Service Studio
Created on 08 May
2026-03-13 15-51-13
Samuel Espinoza
I would like to suggest improving the loading animation in the Service Center when applying filters or performing actions. Currently, the indicator is barely visible and only appears if you scroll down, which makes it difficult to know whether the system is processing, still loading the filters, or if the action failed. At the moment, there is only a small loading bar that becomes visible when scrolling. A clearer solution could be to add a button‑loading or a loading indicator next to the filter button, so devs have immediate feedback that an operation is in progress. Filtering: Loading not visible The red loading bar at the top only becomes visible when you scroll down.
64
Views
0
Comments
New
Service Center
Created on 06 Oct 2011
2018-08-22 15-21-15
Nuno Fonseca
It would be very useful if we can get a list (on Service Center) identifying all suspend processes after the publish of an eSpace with BPT included.
749
Views
2
Comments
On our RadarOn our Radar
Backend
Created on 21 Jan 2019
2020-03-04 14-50-24
Armando Gomes
As you might know, there is a leaderboard for top posters which aims to "recognize" the people that devote their time to helping others.Unfortunately, this has a massive side effect: more often than not, people just post for the sake of getting higher in the ranks of the leaderboard, without any concern for helping the person in need. As the saying goes "quantity doesn't mean quality".As such, I would like to suggest that instead of having the list of Top Posters, we would have a list of Top Solvers, which would highlight the users who had the bigger number of posts marked as solution.Hopefully this will increase the overall quality of the answers around the forums.Let me know what you think
1627
Views
10
Comments
Implemented
Forums
1221 to 1230 of 10911 records
Top Idea Creators
High Five to the top 5 idea creators in the last 30 days
2025-12-08 23-06-08
2 ideas
Top Brainstormers
High Five to the top 5 brainstormers in the last 30 days
2021-09-06 15-09-53
6 comments
2
2024-07-05 14-16-55
2 comments
3
2025-12-08 23-06-08
2 comments
4
2024-01-04 15-15-51
1 comments
Code of Conduct 
The guidelines we live by that make
this Community amazing!
Code of Conduct
Stay Up-To-Date
Keep on top of what's happening in the Developer Community.
Forum, Forge, Training, Documentation, and more!