正在获取Lync 2013自定义命令(Lync SDK)的上下文联系人



我正在为Lync 2013开发一个基于自定义命令的小型解决方案。
简而言之:我向Lync添加了一个按钮。右键单击联系人和从对话窗口中可以看到该按钮。

我希望在点击按钮时能够获得相关的联系人\对话。
%contact-id%在右键单击联系人时效果良好。我的EXE启动了,一切都很好。
但是,在打开的对话中使用它会阻止EXE的启动。
如果我删除%contact-id%,我的EXE就会启动,但我没有相关的联系人。

我做错什么了吗?我如何获得这些信息?


(我确实看到了一种方法,建议使用一个windows服务来跟踪Lync打开的窗口,并知道以后将hWnd映射到对话。我真的不想去那里。这太复杂了,对我的需求来说太大了。此外,我不确定它是否能在Lync 2013中工作,因为所有对话都在同一个选项卡中)


我也尝试过使用对话窗口扩展,但它似乎也有同样的问题。
我以为我可以向当前对话的其他联系人发送上下文数据,但我没有找到获取当前对话的方法,因此我无法使用beginSendContextData


更新
我使用LyncClient.GetHostingConversation()成功地获得了上下文对话

但是使用CWE会导致非常糟糕的用户体验。有没有一种方法可以在没有CWE的情况下获得主机对话。。?

如果从对话窗口内触发自定义命令,我们可以确认参数%contact-id%不会被传输。在这种情况下,自定义命令不会被执行,它的.exe文件也不会被启动。

这使您可以选择以编程方式检测当前对话。不幸的是,似乎没有明显的方法来可靠地检测当前显示的对话。您可以尝试检查ConversationManager中的所有对话,并使用一些提示:

  • ConversationManager.Conversations.Last()上次创建的对话,不一定是用户用来单击自定义操作的对话。

  • Conversation.State == ConversationState.Active发送消息会将状态切换为"活动",但可以有多个会话处于活动状态。

  • Conversation.Properties[ConversationProperty.Inviter]邀请方是登录到本地lync客户端的用户,该客户端具有%user-id%

  • Conversation.Properties[ConversationProperty.LastActivityTimeStamp]会话接收到最后一条消息时的时间戳。

http://msdn.microsoft.com/en-us/library/microsoft.lync.model.conversation.conversationproperty_di_3_uc_ocs14mreflyncclnt.aspx

但这些信息位仍然只是提示,不足以可靠地检测显示给用户的当前对话。我们仍在寻找一种可靠的方法来检测它。

最新更新