Capability driven UI

Microsoft Lync 2010 (and earlier versions for that matter) changes the User Interface (UI) based on which capabilities the user has to perform certain activities either based on configuration (EV enabled or not) or permissions, i.e. which policies the user has been granted. The information is typically given to the client through in-band provisioning at sign-in, but for some items the client is subscribing to changes and will get the change almost instantly. I was aware of this, but there is more to the story as I discovered, when debugging an issue recently.

The issue I had was that I didn’t have the option to share a Powerpoint Presentation, when I was in a conference as shown in the picture below

cap1

Normally the UI would like this (note the missing  3 options and the missing paperclip above)

Capture

The capability to share a Powerpoint presentation is controlled by the EnableDataCollaboration parameter in the client policy. I could see that this parameter was True for me as indicated by the in-band provisioning information my client received shown below

cap3

So I was allowed to do it by policy, but still the UI was not shown. What made it more weird was that in a P2P IM conversation the UI to share a Powerpoint presentation was shown. What was happening?

It turns out that something was wrong on the server with the Data MCU, which implements the feature I was missing. When the client starts a conference it sends a SUBSCRIBE to the focus to get the conference-info returned. Conference-info is a description about which features and functions are available and allowed. Included in the response is a list of permissions per MCU type. Due to the problem with the Data MCU the section describing permissions on the Data MCU was not returned to the client. Since the client didn’t received the permissions for the Data MCU it defaulted to treating EnableDataCollaboration as false and therefore it didn’t show the UI.

So why was the client showing the UI, when I was in a P2P IM conversation? This happened because at this stage there is no conference created and the client is therefore using the in-band provisioning information to control the UI.

Thanks to Vijay for insight.