Skip to main content
Dynamics 365

AX for Retail: Modern POS Custom Labels and Strings

This is a follow-up to a previous article I wrote about modifying labels and strings in Enterprise POS.  The process is similar in Modern POS (MPOS) and Cloud POS (CPOS) but different enough that a new article is warranted.  Additionally, since that article was written we have added a couple tools to make this more seamless for the system administrator.

These steps are good for the following:  Modern POS in AX 2012 R3 and Modern POS / Cloud POS in Dynamics 365 for operations.  The screenshots I used are for Dynamics 365.

Step 1:  Identify the labels to change

Before you can change the text on a field or message you need to identify the ID of that label.  This is very easy in MPOS and CPOS.  First, launch the product and go to Settings > Developer mode.  Turn on the options for Developer Mode and then Show String IDs:


After you restart the POS you’ll immediately see that the Label ID is shown before all text.  Walk through the process to get to the label or message that you want to change and note the Label ID.  In my example I wanted to change the strings on the login page:


Update (2017-06-30):  The “Developer Mode” options are not available by default in MPOS and CPOS unless you deploy a debug build of the application.  For MPOS this has to be done by deploying a new version of the app built from the SDK.  For CPOS you can cheat by updating the Config.isDebugMode setting in Pos.js using a text editor:

Once it is changed, clear the browser cache, reset IIS, and reload CPOS.  The “Developer Mode” should then be available and you can then get your String IDs.

Step 2:  Create the overridden strings

Launch Dynamics 365 and go to the Retail Language Text form (Retail and commerce > Channel setup > POS setup > POS profiles > Language text).  This is a form that didn’t exist in the first iteration of my original article, so you don’t have to worry about entering the data directly in the table browser anymore.

In this form, enter the Label ID and the new text you want to override.  Make sure to enter strings for all languages that you plan to use:


Step 3:  Push the data to the channel database

The RetailLanguageText table is also now included in a default job so you can simply run the 1090 job to push your changes to the channel database.  Go to Retail and Commerce > Retail IT > Distribution schedule and highlight the 1090 job.  Select Run Now to run the job.

After this, go to Retail and Commerce > Inquiries and Reports > Commerce Data Exchange > Download Sessions and monitor to make sure the data made it to the channel database.



You might want to also restart your Retail Server (IIS) after this as well, just in case the Commerce Runtime caches any values.

Step 4:  Activate MPOS or CPOS

When MPOS or CPOS displays a string, it checks for the existence of an overridden string and if it it finds one, uses that string instead.  However, it doesn’t actually do a table hit against the RetailLanguageText table each time since that would involve a pretty expensive round trip to the Retail Server.  Instead, it stores those override strings in its local configuration file.

The trick here is that those strings only get written to the configuration file during device activation.  For a new device this is no problem; go ahead and activate it and you will see your new strings immediately.  To get new strings to display on existing devices you will need to plan to reset and reactivate.


If all works well, your Sign In screen should now be a Log In screen and you can enter your User ID instead of your Operator ID:


Leave feedback below if you have any questions.  One area for improvement that I have suggested to the product team is to create a mechanism for refreshing the local configuration file with new strings instead of having to reset and reactivate.