M3: Questions about the Web SDK 2.0.0

 Hello everyone,


I'm actually testing the functionalities of the Web SDK 2.0.0 that is actually called "Infor M3 Odin 2.0.0", so I kindly ask you to give me an answer to some of my questions :

All of it is on a CRS610 Bookmark example :

- How to pass a parameter like "status" (WFSLCT/WTSLCT) to a IBookmark and get according results ? In which property and format has it to be done ?
Example : I want to get result with status between 10 and 20 only, not the 90 ones
I tried to pass "WFSLCT,10,WTSLCT,20", into "params" and "parameters" (cf screen below) because in the documentation it is said to use "a comma separated list", but it seems that nothing work.

- Infinite paging with IBookmarks
How can we manage this point.
May i consider that the only method to get the next records is by recalling the bookmark with the key of the last record ?
Example : I've got 33 records, do I need to get a new Bookmark with the OKCUNO of the last and refresh my data ?

- Closing Bookmarks

Is it possible to properly close a bookmark ?, when we open several panels by calling different bookmarks  we hit very easily the maximum opened tabs.
Do you have any example ?

- Is SohoDataGridComponent compatible with bookmarks ?
Do you have an example to use conveniently sorting orders. I get the sorting orders, and the views in the panel.
But when I change the sorting order nothing happens.
Which is the good method ?
To refresh the datagrid with a new sorting order/view, can I change the columns definitions and the datas ? Or do I need to destroy my component and create a new one ?


Thank you for your time

  • M3 Bookmark accepts three types of values, keys, fields and parameters. The keys are the primary keys for the bookmark and all keys are mandatory. The exception is bookmarks for list panels where some key values may be left blank, but note the value must still be present. The fields are used to set fields in the list header such as status filters, list position field values. Parameter can be used for list bookmarks in M3 programs that supports parameters. Note that parameters are used for special cases and you must check which parameters the M3 program supports.

    When providing keys, fields or parameter you choose whether to use either the properties "keyNames", "fieldNames", "propertyNames" or the properties "keys", "fields", "properties". In most cases it is recommended to use the names properties in combination with the values map since this is most straightforward. In this case you don't have to worry about encoding or the exact format of the property values. The names property should just contain a comma separated list of names, and the value map should contain names mapped to values. When the bookmark is executed the framework will encode and construct the values that are actually sent to the server.

    In you scenario with CRS610 the status fields WFSLCT and WTSLCT should be set using the fieldNames property and the values should be added to the values map. See example below. Note that company is a special case that do not need to be set in most cases since it is retrieved from the user context.

    const bookmark = {
       program: 'CRS610',
       table: 'OCUSMA',
       keyNames: 'OKCONO,OKCUNO',
       fieldNames: 'WFSLCT,WTSLCT',
       isStateless: true,
       values: {
          OKCUNO: 'CUSTOMER1',
          WFSLCT: '10',
          WTSLCT: '20',

    Regarding infinite paging and closing bookmark we don't actually recommend using non-stateless bookmarks. Bookmarks are stateless by default which means that the programs are closed on the server when the bookmark has completed the execution. If you set the isStateless property to false the program will still be running on the server and you are responsible for the life cycle of the program. Managing this can be complicated and you risk "leaking" program instances which will make it impossible for the user to start any new programs. Unless you know exactly what you are doing we recommend only using stateless bookmarks for detail panels and use the stateless MI programs for lists.

    If you still want to use non-stateless bookmarks you have to keep track of each started program instance and make sure that you close it when necessary. The IFormReponse has an instanceId property which contains the program instance ID. This ID must be used when closing the program instance. The FormService can be used to execute the close command, see example below.

    formService.executeCommand('CLOSE', instanceId).subscribe((r) => {

    Regarding the SohoDataGridComponent it does not really make sense to change the sorting order in the grid as it is the M3 BE program that decides the sorting order. You would change the sorting order by setting a new sorting order and displaying the result returned from the server. Mixing server sorting and client sorting can result in some unexpected behaviors.

  • In reply to Peter Karlsson:

    Sorry to steal the thread - but where can we find this WEB SDK 2.0.0 that you refer to? I can't find it on developer.infor.com ?
  • In reply to masars:

    , please contact Torbjörn Karlsson to get access to the M3 H5 SDK before it is available for download.