Category Archives: Feature – SDK development

Smart Office Improved support for ADFS 3.0 – information to SDK developers

If you have implemented a feature or SDK application that requests the credentials from the user context when calling services the include-domain-with-user parameter must be true in order to function properly with an environment using ADFS 3.0.

If the user logs in to Smart Office as user@domain or domain\user setting the parameter true ensures that the domain is included in the user name.

If you’re using the MangoHttpClient class for doing REST calls it’s already handled for you so no changes are necessary. The ADFS 3.0 support was introduced in Smart Office (HF12) released in March 4th 2016.

It may be necessary for a ISO feature/application to change one argument when requesting credentials from the Smart Office user context in order to support ADFS 3.0. The parameter includeDomainWithUser should be set to true. This will return the user name including the domain, if the user logged on to Smart Office with a domain, otherwise it will only return the user name.

Existing code that looks like this:

ApplicationServices.UserContext.RequestCredentials(out username, out password);
ApplicationServices.UserContext.RequestCredentials(out username, out password, false);

Should be changed to set includeDomainWithUser argument to true:
ApplicationServices.UserContext.RequestCredentials(out username, out password, true);

There is also a new LDAP Setting described in the Administration Guide (p. 267) ”Add domain after authentication” that you should be aware of.

This setting is used in scenarios where some applications such as IDM requires a domain but the Smart Office server does not require one. When the setting is enabled, a user may log-on without a domain to Smart Office and still be authenticated with domain for the application.

Settings values:
No = Not enabled
Yes (user@domain) = Enabled with the username format “User Principal Name”.
Yes (domain\user) = Enabled with the user nameformat “Down-Level Logon Name”.

Smart Office SDK unable to run project

The last week I’ve got two questions from Smart Office Developers in the partner network desperately trying to run the Smart Office SDK but as soon as they log in to Smart Office they are presented with “Infor Smart Office has encountered a problem”, “We are sorry for the inconvenience. Please tell Infor about this problem and provide the log file and information of the steps leading up to it. Press the Support button to save the log file at a location of your choice.”.


What to do?

When you are having an issue always check the log file. when developing the log file is located in a location similar to this example from Windows 10:

C:\Users\username\AppData\Local\Infor\Mango Client

This generic “catch-all” is only shown when there is an unhandled exception on a background thread. When developing always make sure that you have try-catch on code that is executed on a background thread. If you are developing and get this error the issue is probably in your code. But not in this case.

The log

In this case the log file had the following log at the bottom:

2016-06-30 16:07:25,519 [20] FATAL Mango.UI.Client.MangoApplication.OnUnhandledExceptionCurrentDomain – Fatal shutdown caused by unhandled exception on background thread.
2016-06-30 16:07:25,520 [9] FATAL Mango.UI.Client.MangoApplication.OnUnhandledExceptionCurrentDomain – [MUI0040] Unhandled exception from AppDomain. IsTerminating=True.
System.IO.FileNotFoundException: Could not load file or assembly ‘System.Data.SqlServerCe, Version=, Culture=neutral, PublicKeyToken=89845dcd8080cc91’ or one of its dependencies. The system cannot find the file specified.
File name: ‘System.Data.SqlServerCe, Version=, Culture=neutral, PublicKeyToken=89845dcd8080cc91’

Server stack trace:
at Mango.Core.Persistance.Statistics.GetRecentlyUsed(Int32 returnCount)
at Mango.UI.Services.ApplicationUsageService.RecentlyUsed(Int32 returnCount)
at Mango.UI.Services.HistoryDS.LoadRecent()
at Mango.UI.Services.HistoryDS.Execute()
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase)

The solution

SQL Server Compact Edition is a requirement for SDK development. Usually you don’t need to install it – it just works. But if you have any issues then please download Microsoft SQL Server Compact 3.5 Service Pack 2 for Windows Desktop from Microsoft and install it. On a 64-bit computer install both 32-bit and 64-bit versions.

I hope that this post will find it’s way to any SDK developer that encounter this issue.

Icons and icon buttons

When the new style for Smart Office was introduced in version 10.1.0 we also added a new set of icons. There are now almost two hundred icons that can be used on buttons, menus or to convey information in an application. In addition to the new icons a couple of controls were added to make it easy to use the icons. These new controls are the Icon, IconButton and CommandBarButton in the Mango.DesignSystem namespace. Continue reading

Adding settings to your feature

There are different kind of settings that you can use when developing your feature. There are profile settings, local settings and user/application settings. In this blog I’ll talk about user/application settings and the steps you need to do in order to add settings to your project. Using user/application settings will allow administrators to add role based values for some settings, provided that the Session Provider supports listing roles. Continue reading

How to use the keyboard in a Mashup

Do you want to add keyboard support in a Mashup? In this blog I’ll show how to get a keyboard key to invoke an event and how to user keyboard shortcuts to switch beteen tabs. I’ll talk about focus and how to user accelerator keys to jump to an input field and some other nice to know topics for Mashup and feature development. Continue reading

Introduction to MForms extensions

When extending the functionality of M3 panels in MForms you have three different options and these are JScript files, Script assemblies and MForms extensions. MForms extensions allow you to do similar things as with a regular JScript files but extensions are Smart Office features, written in a .NET language such as C#. The way extensions are deployed, configured and registered is also somewhat different compared to how you usually do with JScript.

This post is a brief introduction of how to create and deploy an MForms extension using the Smart Office SDK. Note that if you don’t have access to the SDK you will not be able follow along in the example on your own. I will also assume that you are familiar with the Smart Office SDK and will mainly focus on what is specific for MForms extensions.

Continue reading

Script assemblies in MForms

The most common way to extend the functionality of M3 panels in MForms is to use JScript files but there are other options such as Script assemblies and MForms extensions. With Script assemblies you can write code in most languages supported by .NET such as C# and VB.Net and you can actually debug your code using Visual Studio. Instead of deploying the script as a JScript file you use a .NET assembly in the form of a DLL file.

Continue reading