使用UCMA 2.0在OCS2007 R2中发布自定义状态消息(在MOC中可见)



我正在编写一个UCMA 2.0应用程序,该应用程序通过"UserEndpoint"连接到OCS。我希望能够设置一个自定义的状态信息和我的可用性!

一路上我遇到了一些问题,花了很多时间在谷歌上搜索并尝试了一些文章,大多数人似乎都在说同样的话(包括MS本身):

使用XML将"userState"活动设置为自定义并包含消息,然后通过端点的"LocalOwnerPresence"在自定义类别中发布该消息。BeginPublishPresence方法。

当我这样做时,我不会从OCS收到任何错误(请参阅下面的XML示例),但从Office Communicator(MOC)中的存在来看,有问题的用户仍然显示为脱机。我发现发布"machineState"意味着我们在MOC中看到了一些存在图标,但遗憾的是,我无法让自定义活动消息正常工作。

更多的阅读让我了解了一些疯狂的事情,比如OCS DB中需要运行的存储proc(听起来更像是添加全新的存在类别,而不仅仅是向现有状态添加自定义消息)。"上网"一天后,我有点力不从心了。

任何帮助或指出任何问题都将不胜感激!我已经包括了一些我在阅读时使用的网站:

Presence简介:http://msdn.microsoft.com/en-us/library/dd253506(v=office.13).aspx

发布状态:http://msdn.microsoft.com/en-us/library/dd253494(v=office.13).aspx

状态信息+自定义信息:http://blogs.claritycon.com/blog/2009/03/04/how-to-publish-presence-using-ucma-v2-0-and-have-a-clever-communicator-status/

机器状态思想:http://social.msdn.microsoft.com/Forums/en-US/ucmanagedsdk/thread/d3bd3569-66c0-4b52-86f0-900d2fb6d22e/

存在模式文档:http://msdn.microsoft.com/en-us/library/dd941536(v=office.13).aspx

这是我在代码中使用的XML(字符串),它是动态的字符串。使用自定义消息和可用性整数值格式化占位符("测试消息"和3500用于自变量)。

string userStateXmlFormat = "<state xmlns="http://schemas.microsoft.com/2006/09/sip/state" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" manual="true" xsi:type="userState">n"
            + "<availability>{0}</availability>n"
                + "<activity>n" 
                   + "<custom xmlns="http://schemas.microsoft.com/2006/09/sip/state">{1}</custom>n" 
                + "</activity>n"
            + "</state>";

下面是进行格式化并试图发布存在的C#:

var machineStateXml = string.Format(machineStateXmlFormat, 3500);
var userStateXml = string.Format(userStateXmlFormat, 3500, "Test Message");
var machineState = new CustomPresenceCategory("state", machineStateXml);
var userState = new CustomPresenceCategory("state", userStateXml);                
PresenceCategory[] categoriesToPublish = new PresenceCategory[] { machineState, userState };
this.Endpoint.LocalOwnerPresence.BeginPublishPresence(categoriesToPublish, this.PublishPresenceCompleted, null);

希望我没有遗漏任何内容,如果你认为遗漏了什么,请评论!

干杯Pete

好吧,这有点尴尬,因为我已经设法解决了它——但我认为我可以把一些责任归咎于MS:

似乎您必须在自定义消息上指定LCID(区域性信息ID),以便MOC接收它,遗憾的是MSDN上的文档似乎认为这不是必需的(也许不是,但为了使事情正常运行,它是必需的)

http://msdn.microsoft.com/en-us/library/dd941468(v=office.13).aspx

LCID(int):表示位置ID的整数。可选

这意味着我必须多次添加自定义消息,尽管对于使用MOC的收件人可能所在的每个潜在区域设置,这似乎不是最好的做法(例如,请参阅下文)。

string userStateXmlFormat = "<state xmlns="http://schemas.microsoft.com/2006/09/sip/state" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" manual="true" xsi:type="userState">n"
  + "<availability>{0}</availability>n"
  + "<activity>n" 
    + "<custom LCID="1033" xmlns="http://schemas.microsoft.com/2006/09/sip/state">{1}</custom>n"
    + "<custom LCID="2057" xmlns="http://schemas.microsoft.com/2006/09/sip/state">{1}</custom>n" 
  + "</activity>n"
+ "</state>";

无论如何,我希望这能帮助到其他想要为所有文化提供通用信息的人,如果你想创建类似的东西,也许上面的链接也是有用的。

最新更新