none
sharepoint 用代码怎么实现Lync 感知 RRS feed

  • 问题

  • sharepoint 用代码怎么实现Lync 感知 也就是怎么获取用户的在线状态,跟WEB页面上聊到,就想Exchange用户连线状态,一要

    2012年3月7日 4:16

答案

  • hi zgoujieming,

    你可以在你的Webpart 中返回如下代码就可以了。

    public string GetPresenceHTMLFromUVC(SPSite thisSite, SPFieldUserValueCollection uvc)
    {
        StringBuilder html = new StringBuilder("");
        using (SPWeb thisWeb = thisSite.RootWeb)
        {
            foreach (SPFieldUserValue uv in uvc)
            {
                string sipAddress = "";
                //Get the sip address if it exists
                SPListItem user = thisWeb.SiteUserInfoList.GetItemById(uv.LookupId);
                if (user["SipAddress"] != null)
                {
                    sipAddress = user["SipAddress"].ToString();
                }
                //construct the html for this user and add to overall html
                html.Append(String.Concat(
                "<div id\"PresenceLink"
                , sipAddress
                , "\">"
                , "<img border=\"0\" height=\"12\" src=\"/_layouts/images/imnhdr.gif\" onload=\"IMNRC('"
                , sipAddress
                , "')\" ShowOfflinePawn=\"1\" style=\"padding-right: 3px;\" id=\"PresencePawn"
                , sipAddress
                , "\" alt=\"presence pawn for "
                , sipAddress
                , "\"/>"
                , "<a href=\""
                , thisWeb.Url
                , "/_layouts/userdisp.aspx?ID="
                , uv.LookupId
                , "\" id=\"ProfileLink"
                , sipAddress
                , "\">"
                , uv.User.Name
                , "</a></div>"
                ));
            }
        }
        return html.ToString();
    }

    你可以参考如下英文连接。

    http://blogs.msdn.com/b/uksharepoint/archive/2010/05/07/office-communicator-integration-presence-in-a-custom-webpart-for-sharepoint-2010.aspx

    http://jamestsai.net/Blog/post/How-to-add-Microsoft-Office-Communicator-user-presence-icon-to-custom-pageweb-part-in-SharePoint.aspx

    Thanks,

    Jack

    2012年3月8日 2:19
    版主
  • SharePoint上面那个用户在线状态,其实是依靠Lync的ActiveX实现的。楼上的代码就是显示人名的时候,你可以在后面加的一段html标签,onload里面的那个方法其实就是通过js调用ActiveX。

    如果你的用户是保存在列表某个字段中的,更方便的方法是用:

    list.Fields["UserField"].GetValueAsHtml(item["UserField"])

    得到的就是带有那段能显示用户状态的html代码。

    如果你要在后台程序中获取在线状态,应该就需要Lync相关的API了。

    2012年3月9日 4:34

全部回复

  • hi zgoujieming,

    你可以在你的Webpart 中返回如下代码就可以了。

    public string GetPresenceHTMLFromUVC(SPSite thisSite, SPFieldUserValueCollection uvc)
    {
        StringBuilder html = new StringBuilder("");
        using (SPWeb thisWeb = thisSite.RootWeb)
        {
            foreach (SPFieldUserValue uv in uvc)
            {
                string sipAddress = "";
                //Get the sip address if it exists
                SPListItem user = thisWeb.SiteUserInfoList.GetItemById(uv.LookupId);
                if (user["SipAddress"] != null)
                {
                    sipAddress = user["SipAddress"].ToString();
                }
                //construct the html for this user and add to overall html
                html.Append(String.Concat(
                "<div id\"PresenceLink"
                , sipAddress
                , "\">"
                , "<img border=\"0\" height=\"12\" src=\"/_layouts/images/imnhdr.gif\" onload=\"IMNRC('"
                , sipAddress
                , "')\" ShowOfflinePawn=\"1\" style=\"padding-right: 3px;\" id=\"PresencePawn"
                , sipAddress
                , "\" alt=\"presence pawn for "
                , sipAddress
                , "\"/>"
                , "<a href=\""
                , thisWeb.Url
                , "/_layouts/userdisp.aspx?ID="
                , uv.LookupId
                , "\" id=\"ProfileLink"
                , sipAddress
                , "\">"
                , uv.User.Name
                , "</a></div>"
                ));
            }
        }
        return html.ToString();
    }

    你可以参考如下英文连接。

    http://blogs.msdn.com/b/uksharepoint/archive/2010/05/07/office-communicator-integration-presence-in-a-custom-webpart-for-sharepoint-2010.aspx

    http://jamestsai.net/Blog/post/How-to-add-Microsoft-Office-Communicator-user-presence-icon-to-custom-pageweb-part-in-SharePoint.aspx

    Thanks,

    Jack

    2012年3月8日 2:19
    版主
  • SharePoint上面那个用户在线状态,其实是依靠Lync的ActiveX实现的。楼上的代码就是显示人名的时候,你可以在后面加的一段html标签,onload里面的那个方法其实就是通过js调用ActiveX。

    如果你的用户是保存在列表某个字段中的,更方便的方法是用:

    list.Fields["UserField"].GetValueAsHtml(item["UserField"])

    得到的就是带有那段能显示用户状态的html代码。

    如果你要在后台程序中获取在线状态,应该就需要Lync相关的API了。

    2012年3月9日 4:34
  • 非常感谢,公司一直事多没有回复
    2012年4月2日 15:57
  • 我在webpart我用myList.Fields["创建者"].GetFieldValueAsHtml(spitem["创建者"]);可以生成上面那段HTML代码,但是前台并没有显示那个图标,而在列表,文档库中却可以看到,我看了生成的代码,基本一致,是不是哪个JS没有引用?
    2013年8月13日 7:23