Personalizations in M3

Users can change panels in MForms to obtain personalized versions of the standard M3 panels. Examples of personalization are conditional styles, hyperlinks, tab order, label texts and JScripts. Personalization is done directly within MForms using dialogs and special edit mode panels. There is a Personalization menu available under the Tools menu and on the context menu for the panel that contains the available personalization options.

Scripts are deployed on the MNE (Movex Net Extension) server.

When a personalization is created in MForms, it is stored on the M3 Net Extension (MNE) server. When an M3 program is started, the MNE server checks if there
is a personalization for that program and, if so, embeds the personalization data in the response.

Personalization data is stored in a folder called Customizations, located in the data folder for MNE. The MNE data folder is defined using a property
called FileRootPath in the property file for MNE (

Global and Role Personalization
In additions to user-specific personalizations, you can create personalizations for specific roles or global personalizations for all users. Both global and roles
personalizations are stored in the same way as user customizations, but the folder is named after the role id in MNS405 for role personalizations or using
the name GLOBAL_CUSTOMIZATIONS for global personalizations.

On the tools menu you can check which personlizations are loaded by selecting Personalize – > View Personalizations.

You can also turn off all personalizations by selecting Personalize -> Hide All Personalisations.

If you have issues with scripts that are not visible and you would like to know if there are loded or not you should check the log file. There should be logs if the script file cannot be found or if the script cannot be compiled. Filter on ScriptManager in the Origin column in the Log Viewer (internal://log/) or in 9.1.2 or previous version open the Log from the about LSO window.

To verify that the user has a script personalization open the View Personalization dialog from Tools -> Personalizations -> View Personalizations.

If the script personalisation is not there, you might have to restart LSO or clear the personalization cache on the Workplace/MNE server (Functions page in the MNE Manager).

Private personalizations vs global and group personalizations

Peter K gave me this short summary of how it all fits together. Thanks Peter!

  • MForms supports customizations from two sources on a panel: User or Central (which includes Role and Global).
  • MForms will merge customizations if there are two sources on a panel.
    • The merge supports merging of different customization types on a panel.
    • If two sources have the same customization types on the same panel they will not be merged, one will be selected based on priority.
  • The order of priority is User first, the Central (Role and Global).

Example 1
– Global tab index customization for MMS001/E
– User conditional style customization for MMS001/E

Both customizations should be active.

Example 2
– Global script customization for MMS001/E
– User script customization for MMS001/E

Only the user script customization will be active.

Mixing central customizations with user customizations can cause problems. One solution is to use Role customizations for specific groups of users and Global customizations for the rest.

If the users are allowed to create their own customizations these will always override Role/Globe customizations of the same type on the same panel.

The reason for not merging customization of the same type is that the results can be very unpredictable. It might have worked for some customization types in some cases but we decided against supporting this.

27 thoughts on “Personalizations in M3

  1. Paul Grooby

    Karin – re the deployment — we also found that we had to stop and start the grid to get them to pick up and deploy correctly (needless to say if I had developed a personalisation and wanted to make it available I needed to modify the XML file in the GLOBAL_CUSTOMIZATIONS (carefully with a backup first) to merge the changes

    1. karinpb Post author

      You are right. If you are on 9.1.3. When they built MNE as the M3 Adapter in the Grid they did not port the Management functions in the first version. That was a shame! I think it is available in v. 10. I need to check with Peter…

      9.1.2 to 9.1.3 is a big step but the upgrade from 9.1.3 to 10.0.0 is an easy step.

  2. thibaudatwork

    Hi Karin, thank you for the great tips and reminders. I like the “View Personalizations” option in the Tools menu, I had never tried it before. I have one comment about the folder for scripts. The folder has changed with the advent of the Grid for M3, it’s not in MNE anymore. The new folder is somewhere like: \\hostname\d$\Lawson\LifeCycleManager\Service\\grid\M3_TEST\applications\LSO_M3_Adapter\webapps\mne\jscript\ . The folder is hard to find as hosts, drives, folders, and profile names are different from installation to installation. The easiest way to find it is to search the folder and its sub-folders of the LifeCycleManager server (not of the client) with a command like dir D:\Lawson\LifeCycleManager\*.js /s

    1. karinpb Post author

      Thanks Thibaud! You are right. I was still thinking MNE and not the M3Adapter in the Grid. The grid is still kind of new to me. I developed Workplace so MNE is much more familiar to me. The M3 Adapter was not developed in Stockholm.

  3. Paul Grooby

    Karin/Thibaud – been looking at both of your respective posts (as well as Scotts local one here in NZ)…. I have a question in terms of sending keystrokes which is baffling me. IN GLS181 via F17 function keys I can get to the filters for the program. However I want these to be text boxes and an ‘Apply’ button on the screen (got that all working well etc). What I cant seem to get my head around is taking the input from the text boxes, call the F17 (which is SHIFT F5 (REFRESH !!!)) fill in the filters, hit next and then bring me back to GLS181 (our users use this function but its a real pain having to go to settings apply, then come back in when theoretically they should be able to just apply the filters from the front screen — any suggestions , Paul

  4. Karin

    You have the instance cache where you can store values in between requests. As for calling a funciton key I don’t think there is any support for that in the API directly. I know we have support for stuff like next and options. I would need to try myselft and see how and if you can do it. It should be possible but I probably need to ask the expert for the best way to do it.

    Hum… How do I get to GLS181 🙂 How would I know if an account supports reconciliation?

  5. Pingback: Personalizations in M3 – Manager « Developing for Lawson Smart Office

  6. Paul Grooby

    Karin – thanks for that — Its essentially mforms automation, however I don;t want to leave the screen – just simulate the user key strokes. GLS181 is from GLS180 and the account id that supports reconsilation is in CRS630 in the chart of accounts, Paul

  7. Al

    Hi Paul. You could use the MForms automation as follows:

    var auto = new MFormsAutomation();
    auto.AddStep(ActionType.Run, “GLS180”);
    auto.AddStep(ActionType.Set, “”);
    auto.AddField(“WADIVI”, “100”);
    auto.AddField(“WAAIT1”, “11000”);
    auto.AddStep(ActionType.Key, “ENTER”);
    auto.AddField(“W1STMN”, “1”);
    auto.AddStep(ActionType.ListOption, “11”);
    auto.AddStep(ActionType.Key, “F17”);
    var uri = auto.ToUri();
    DashboardTaskService.Manager.LaunchTask(new Task(uri));

    Sorry, example not from your system so change the division and account and statement number as required. Note that this launches a new GLS180 instance though.

    If you want to run keystrokes in the currently running screen you can use something like this:


    But you would need probably need to load information into the instance cache to pass details into the subsequent screen as to what is required.

    Cheers, Al.

  8. Paul Grooby

    Al (and all) — OK took your code and tweaked (code below) — Can’t get it to set the date/time pickers on the screen – they come through blank – code below:(I kept with hungarian notation)

    var dim2 = txtDIM2.Text.ToUpper();
    var dim3 = txtDIM3.Text.ToUpper();
    var dim4 = txtDIM4.Text.ToUpper();

    var content = controller.RenderEngine.Content;
    // get account number and acctoung date range
    var act = ScriptUtil.FindChild(content,”ERAIT1″);
    var frmDate = ScriptUtil.FindChild(content,”WWFRDT”);
    var toDate = ScriptUtil.FindChild(content,”WWTODT”);
    // get statement number to pass through
    var statementNumber = ScriptUtil.FindChild(content,”ERSTMN”);
    // debug/development code

    // start up the mforms automation
    var auto = new MFormsAutomation();
    auto.AddStep(ActionType.Run, “GLS180”);
    auto.AddStep(ActionType.Key, “ENTER”);
    auto.AddStep(ActionType.ListOption, “11”);
    //select based on accounting dimensions entered
    auto.AddStep(ActionType.Key, “F17”);
    auto.AddStep(ActionType.Set, “”);
    // accounting dates
    auto.AddStep(ActionType.Set, “”);
    auto.AddStep(ActionType.Set, “”);
    // set remainder based on enetered data
    auto.AddField(“WFAIT2”, dim2);
    auto.AddField(“WTAIT2”, dim2);
    auto.AddField(“WFAIT3”, dim3);
    auto.AddField(“WTAIT3”, dim3);
    auto.AddField(“WFAIT4”, dim4);
    auto.AddField(“WTAIT4”, dim4);

    // finallt press the enter key
    auto.AddStep(ActionType.Key, “ENTER”);
    // run the automation
    var uri = auto.ToUri();
    DashboardTaskService.Manager.LaunchTask(new Task(uri));

    — so for some reason the datepicker doesn’t get populated (even using the script editor to interogate the values don’t produce the values )

    I’ll check out the instance cache thing as I really don;t want to spawn a heap of windows (without closing the previous ones as I also get a message saying only 20 tabs open … Cheers,


  9. Paul Grooby

    Hmm – removed the date fields and all works well – however for this program I then need to close the original program that kicked off the mforms — but there is a gotcha in that there is a subsequent screen regarding the manual reconciliation — so close but so far away from a solution 🙂

  10. Paul Grooby

    Update on this in terms of passing details between screens —
    couple of things Al has suggested —
    1: controller.KeyPress(“F17”);
    2: Use the InstanceCache to save values for the first screen and add another script on the other panel to read these – uses a dictionary type .Net object (bit like the old Session container in a web page).. Manually work well together, just cant seem to get the second screen to fire and pick the values up automatically.- great learning process though …

  11. geigerzcounterz

    Hi, All. Just curious of there is now a way to clear panel and/or program personalizations via Smart Office, either via standalone command or via new UI interface in a later version. For standalone command, I am thinking of something like these below, but for the clearing of personalizations (for those without using the Workplace UI and/or having it configured):

    mforms://_command?value=clear lngcache
    mforms://_command?value=clear view all
    mforms://_command?value=clear view MNS150

    Many Thanks,


  12. norpe

    It is possible to clear personalizations for the current panel or program from the MForms UI under the Tools -> Personalizations menu. There is no way to clear the personalizations for all programs in the UI although this can be done by deleting the user personalization folder on the server (and perhaps by using the Personalization Manager Tool).

  13. Daniel

    I have a script for an browse button in OIS101.The script is stored on the Jscript folder on the server and I call the script with the global customizations. That works in Prod and Test system. Now we disabled the “user personalisations” in prod and also the script (the button) disappeard. So can i only use scripts with enabled user personalizations or is this a bug?


    1. karinpb Post author

      It could be a bug becuase it should still work. Please verify again that everything is set up correctly. We have heard this issue before, but when we tried to reproduce it everything worked just fine (not sure if you are on the same version). So Please verify again and if it still does not work enter a support issue.

      You should be able to use scripts.

  14. karinpb

    Yes, perhaps you had the file open in the editor? Did the log for M3 adapter / MNE show anything?
    Glad that it is working now.


  15. Tove

    We have made a mashup with a DetailPanel CRS610. Customer Stop OKBLCD on panel J is an included field. On this field, we have a user personalization saying if value is 2 then make field color red. However, when running the mashup, field is diplayed in normal color. Do personalizations not work in mashup or is there a way to enable them?

  16. geigerzcounterz

    Looks like a “Net Extension Manager” link was added in Smart Office 10.0.5 (or perhaps a bit earlier) where I can now see cache management and session info like was available in Workplace. I am especially thankful for option “Clear customization cache” if it is what I think it is — namely a way to clear the group / global in-memory customization cache.

  17. Pingback: Clear global customization cache – M3 ideas

  18. Shashank Malali

    I am struggling with the personalization where I am looking for Buttons in Infor M3 smart office “Hold” and “Release” where Hold will open OIS101 (Order lines) from OIS301 close it automatically and update the value as “Hold” in Joint delivery field (OBJDCD). This should happen when I select the row in OIS301 and press the Hold button. Same is for “Release” button i am looking for as soon as I press “Release button” The OIS101 (Order lines ) should open and close in backend and the value of Hold should dissappear from JDCD field. This i am looking for orders at status 33 mostly.
    OIS101 should open and close in backend it should not open when this Hold and Release buttons are pressed.
    Please help me I am working with one customer requirement

    1. karinpb Post author

      Automatically open a program and closing it – that is not good from a usability point of view.

      I’m afraid we don’t have any detailed knowledge of the specifics of a program. The part that you would like to automate – is that something you could do with a bookmark? Or perhaps an automation XML? I need to check with a colleague but at best we can give some pointers in the right direction. To me it seems like a Java M3 modification and not something you would do with JScript.

      I’ve checked and depending on if the field you would like to edit OBJDCD is in a detail panel you can consider using a bookmark to get there and then use an automation script to change the value and close the program.

  19. Fanny

    Hi Karin

    Great article. I learned a lot about how personalizations work. However, I still face a problem:

    On OIS300 we have 2 global customizations (1 ConditionalStyle and 1 Hyperlink). When I check my active customizations, I see that these are correctly activated and they work fine for everyone in the company.

    Now I added a script personalization to a role. When I connect my user to the role, I only get the script personalization from the role and not the global customizations. When I check my active customizations I only see the CustomScript (source: role).

    Based on your explanation I would expect that M3 merges all 3 personalizations because it concerns different types and we are not trying to merge user and global customizations.

    Any ideas?

    1. karinpb Post author

      You can get personlizations from two sources, your own and one central. Eg. Global or Role. In this case you would get the one from the role as you describe. This is by design I’m afraid.

      1. Fanny

        Ok, clear. I will put the personalizations from the global one also in the role personalization. Thanks!

Comments are closed.