Six Methods to Show the Current Username in Your Mendix Application
5 min readJun 25, 2024
Suppose you need to show the current user name in your Mendix-made application. How can you achieve this goal? There are some methods to get this result, and I’ll show you six of them in this article.
Method 1
- [M1-1] Open the Domain Model, create a Non-persistent Entity called CurrentUsername, and define one String attribute called Name. Set the access rules as shown below:
- [M1-2] Create a Microflow called DS_MF_CurrentUsername_Create and add to this microflow a Create activity, defining the Name attribute as
$currentUser/Name
. Set the entity created as the microflow’s result:
- [M1-3] In your page, create a Dataview using the DS_MF_CurrentUsername_Create as context and add a Text combining a fixed text and a parameter pointing to the Name attribute:
- [M1–4] The final result will be like below:
Method 2
- [M2–1] Create a Nanoflow called DS_NF_CurrentUser and define a Retrieve activity to get the current User using the XPath
[id='[%CurrentUser%]']
as XPath constraint. Also, get only the First result in Options/Range. Define User as nanoflow’s result:
- [M2–2] In your page, create a Dataview using the DS_NF_CurrentUser as context and add a Text combining a fixed text and a parameter pointing to the Name attribute:
- [M2–3] The final result will be like below:
Method 3
- [M3–1] Create a Javascript action called JSA_CurrentUser with no parameters that return a System.User object, as shown below:
import "mx-global";
import { Big } from "big.js";
/**
* @returns {Promise.<MxObject>}
*/
export async function JSA_CurrentUser() {
// BEGIN USER CODE
return new Promise((resolve, reject) => {
mx.data.get({
guid: mx.session.getUserId(),
callback: resolve,
error: reject
});
});
// END USER CODE
}
- [M3–2] Create a Nanoflow called DS_NF_CurrentUser_2. Call the Javascript action created earlier and return the object retrieved as the result:
- [M3–3] In your page, create a Dataview using the DS_NF_CurrentUser_2 as context and add a Text combining a fixed text and a parameter pointing to the Name attribute:
- [M3–4] The final result will be like below:
Method 4
- [M4–1] Install the HTML Snippet widget from the Market Place.
- [M4–2] In your page, drop a Text that you want to show the user name and also the HTML Snippet, as shown below:
- [M4–3] Open the HTML Snippet properties and select Javascript in Content type.
- [M4–4] Then, use the javascript snippet below in Contents:
var elemUser = document.getElementsByClassName('mx-name-text15')[0];
elemUser.innerHTML = mx.session.getUserName();
- [M4–5] In addition, define the additional properties as shown below:
- This script uses the Mendix JavaScript API, more specifically the mx session Namespace.
- Observe that
text15
used as a parameter in the methodgetElementsByClassName
is the Text widget’s name in which you want to show the current user name, with the prefix'mx-name-'
. - [M4–6] The final result will be like below:
Method 5
- This is a creative variation of the Method 1, in which we use the
$currentUser
variable to get the Current User. Why not return the current user by itself? - [M5–1] Create a Microflow called DS_MF_CurrentUser and define the variable
$currentUser
as return value:
- [M5–2] In your page, create a Dataview using the DS_MF_CurrentUser as context and add a Text combining a fixed text and a parameter pointing to the Name attribute:
- [M5–3] The final result will be like below:
Method 6
- [M6–1] Install the Events widget from the Market Place.
- [M6–2] In your page, drop a Text that you want to show the user name and also the Events widget, as shown below:
- [M6–3] Create a JavaScript Action that requires a Name(String) as input. Use the code shown below:
/**
* @param {string} name
* @returns {Promise.<void>}
*/
export async function JSA_ChangeTextToCurrentUsername(name) {
// BEGIN USER CODE
var elemUser = document.getElementsByClassName(`mx-name-${name}`)[0];
elemUser.innerHTML = mx.session.getUserName();
// END USER CODE
}
- [M6–4] Create a Nanoflow called IVK_OnPageLoad that calls the JavaScript Action created earlier (with the Name parameter pointing to the name of the Text widget you want to replace with the current user name):
- [M6–5] Double-click on the Events widget to edit the properties. Change the Component load action to Call a Nanoflow, pointing to the Nanoflow we've created in step M6–4.
- [M6–6] The final result, showing all methods is shown below:
Comments & Conclusions
- These are very simple methods to get the current user name. They can be easily integrated with your business logic.
- I personally prefer the 4th method or the 6th method (mostly this one), as they don’t require a DataView or Object/Entity.
- You can encapsulate your preferred method in a Snippet associated with a Nanoflow/Microflow and organize them in a Layout inside a style module called YourCompany_Theme.
- Do you have another method to get the user name? Could you spot any flaws in the above methods? Please share in the comments!