2013-12-24 36 views
5

我面臨嚴重的問題。我想在HTML表格中顯示所有用戶及其狀態。是否可以使用JavaScript?如何將所有用戶從Office Communicator獲取到asp.net網頁?

我已經通過下面的鏈接,它只顯示一個用戶,它的狀態和用戶郵件ID是硬編碼的。

Integrate Microsoft Office Communicator 2007 in ASP.NET Page

的Javascript

<script type="Javascript"> 

    var sipUri = "[email protected]"; 

    var nameCtrl = new ActiveXObject('Name.NameCtrl.1'); 
    if (nameCtrl.PresenceEnabled) 
    { 
     nameCtrl.OnStatusChange = onStatusChange; 
     nameCtrl.GetStatus(sipUri, "1"); 
    } 


    function onStatusChange(name, status, id) 
    { 
     // This function is fired when the contacts presence status changes. 
     // In a real world solution, you would want to update an image to reflect the users presence 
      alert(name + ", " + status + ", " + id); 
    } 

    function ShowOOUI() 
    { 
      nameCtrl.ShowOOUI(sipUri, 0, 15, 15); 
    } 

    function HideOOUI() 
    { 
      nameCtrl.HideOOUI(); 
    } 

</script> 

HTML

<span onmouseover="ShowOOUI()" onmouseout="HideOOUI()" style="border-style:solid">Your Contact</span> 
<table id="tblContacts" runat="server"> 
    <tr> 
     <td> email id </td> 
     <td> status </td> 
    </tr> 
    <tr> 
     <td> --- </td> 
     <td> --- </td> 
    </tr> 
    <tr> 
     <td> --- </td> 
     <td> --- </td> 
    </tr> 
    <tr> 
     <td> --- </td> 
     <td> --- </td> 
    </tr> 
</table> 

在這裏,在該示例中,示出了用於單個用戶和用戶的郵件編號被定義爲一個字符串(硬編碼)。我想顯示所有用戶。是否有可能通過JavaScript?

任何解決方案/演示將對我非常有幫助。

謝謝。

+0

這真的不像你可以得到一個聯繫人列表。您可能必須要求用戶手動輸入他們的聯繫人。 – johnnycardy

+0

爲了得到我使用「Communicator API」和「NameCtrl」的聯繫人。我在我的回答中解釋過。 –

+0

啊,做得好...但問題是關於JavaScript :-) – johnnycardy

回答

1

長試試我能夠實現我需要 在這裏,我解釋應遵循的步驟的功能後。

我用「通信API」與「NameCtrl」來實現這一

1)請參閱本http://msdn.microsoft.com/en-us/library/bb787231%28v=office.12%29.aspx

爲什麼我告訴提及這一點,因爲要開發使用Microsoft Office Communicator的自動化API的應用,必須滿足以下要求: •Microsoft Office Communicator 2007安裝在開發機器上。

•Microsoft Office Communicator 2007 SDK安裝在開發機器上。該SDK可從MSDN下載。

2)在服務器上安裝Lync2010並登錄到該服務器。

3)增加對CommunicatorAPI.dll和CommunicatorPrivate的參考。dll從您的Web應用程序

我在這裏使用的communicator圖像,我從「http://www.microsoft.com/en-us/download/details.aspx?id=10503」下載。這是一個msi文件。下載並執行。在演示中,您可以複製這些圖像並添加到您的應用程序中

以下是完整的解決方案。

HTML

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MARSWebCommunicator._Default" %> 

<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent"> 
    <section class="featured"> 
     <div class="content-wrapper"> 
     </div> 
    </section> 
    <script src="Scripts/jquery-latest.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     var sipUri = "[email protected]"; 
     var nameCtrl = new ActiveXObject('Name.NameCtrl.1'); 

     $(document).ready(function() { 
      sipUri = $("#<%=HiddenField1.ClientID %>").val(); 
      if (sipUri != "") { 
       if (nameCtrl.PresenceEnabled) { 
        nameCtrl.OnStatusChange = onStatusChange; 
        nameCtrl.GetStatus(sipUri, "1"); 
       } 
      } 
     }); 

     function onStatusChange(name, status, id) { 
      // This function is fired when the contacts presence status changes. 
      // In a real world solution, you would want to update an image to reflect the users presence 
      //alert(name + ", " + status + ", " + id); 
     } 

     function ShowOOUI() { 
      nameCtrl.ShowOOUI(sipUri, 0, 15, 15); 
     } 

     function HideOOUI() { 
      nameCtrl.HideOOUI(); 
     } 

    </script> 
</asp:Content> 
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> 
    <div> 
     <asp:HiddenField ID="HiddenField1" runat="server" /> 
    </div> 
    <div id="dvContactdetails"> 
     <table border="1"> 
      <tr> 
       <td>Email Id</td> 
       <td>Name</td> 
       <td>Status</td> 
      </tr> 
      <tr> 
       <td> 
        <asp:DropDownList ID="drpEmails" AutoPostBack="true" runat="server" OnSelectedIndexChanged="drpEmails_SelectedIndexChanged"></asp:DropDownList></td> 
       <td> 
        <asp:Image ID="Image1" onmouseover="ShowOOUI()" onmouseout="HideOOUI()" ImageUrl="presence_images/presence_16-unknown.bmp" runat="server" /> 
        <asp:Label ID="lblName" runat="server" Text="Contact Name"></asp:Label> 
       </td> 
       <td> 
        <asp:Label ID="lblStatus" runat="server" Text="Contact Status"></asp:Label></td> 
      </tr> 
     </table> 
    </div> 
</asp:Content> 

代碼隱藏

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using CommunicatorAPI; 

namespace MARSWebCommunicator 
{ 
    public partial class _Default : Page 
    { 
     CommunicatorAPI.Messenger communicator = null; 
     List<CustomContacts> lstContactDetails; 


     protected void Page_Load(object sender, EventArgs e) 
     { 
      lstContactDetails = new List<CustomContacts>(); 
      communicator = new CommunicatorAPI.Messenger(); 
      string mymailid = "[email protected]"; 

      var contact = GetContact(mymailid); 
      int s = (int) contact.Status; 
      lblStatus.Text = GetStatus(s); 

      if (!Page.IsPostBack) 
      { 
       drpEmails.Items.Add(mymailid); 
       lblName.Text = contact.SigninName.ToString(); 
       HiddenField1.Value = contact.SigninName.ToString(); 

       lstContactDetails = GetAllEmailsWithFiendlyName(); 
       foreach (CustomContacts aContact in lstContactDetails) 
       { 
        drpEmails.Items.Add(aContact.ContactEmailId); 
       } 
      } 
     } 

     protected void drpEmails_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string currentmailid = drpEmails.SelectedItem.Text; 
      var contact = GetContact(currentmailid); 
      lblName.Text = contact.FriendlyName.ToString(); 
      int s = (int)contact.Status; 
      lblStatus.Text = GetStatus(s); 

      if (HiddenField1.Value != "") 
      { 
       HiddenField1.Value = ""; 
       HiddenField1.Value = contact.SigninName.ToString(); 
      } 
     } 

     protected string GetStatus(int s) 
     { 
      string status = string.Empty; 
      string src = string.Empty; 
      int tempstatusno = s; 
      switch (s) 
      { 
       case 0 : 
        status = "UNKNOWN"; 
        src = "presence_images/presence_16-unknown.bmp"; 
        break; 
       case 1: 
        status = "OFFLINE"; 
        src = "presence_images/presence_16-off.bmp"; 
        break; 
       case 2: 
        status = "ONLINE"; 
        src = "presence_images/presence_16-online.bmp"; 
        break; 
       case 6: 
        status = "INVISIBLE"; 
        src = "presence_images/presence_16-unknown.bmp"; 
        break; 
       case 10: 
        status = "BUSY"; 
        src = "presence_images/presence_16-busy.bmp"; 
        break; 
       case 14: 
        status = "BE_RIGHT_BACK"; 
        src = "presence_images/presence_16-idle-busy.bmp"; 
        break; 
       case 18: 
        status = "IDLE"; 
        src = "presence_images/presence_16-idle-online.bmp"; 
        break; 
       case 34: 
        status = "AWAY"; 
        src = "presence_images/presence_16-away.bmp"; 
        break; 
       case 50: 
        status = "ON_THE_PHONE"; 
        break; 
       case 66: 
        status = "OUT_TO_LUNCH"; 
        break; 
       case 82: 
        status = "IN_A_MEETING"; 
        break; 
       case 98: 
        status = "OUT_OF_OFFICE"; 
        break; 
       case 114: 
        status = "DO_NOT_DISTURB"; 
        src = "presence_images/presence_16-dnd.bmp"; 
        break; 
       case 130: 
        status = "IN_A_CONFERENCE"; 
        break; 
       case 146: 
        status = "ALLOW_URGENT_INTERRUPTIONS"; 
        break; 
       case 162: 
        status = "MAY_BE_AVAILABLE"; 
        break; 
       case 178: 
        status = "CUSTOM"; 
        break; 
       default: 
        status = "OFFLINE"; 
        src = "presence_images/presence_16-unknown.bmp"; 
        Image1.ImageUrl = src; 
        break; 
      } 
      Image1.ImageUrl = src; 
      return status; 
     } 

     public IMessengerContact GetContact(string signinName) 
     { 
      return communicator.GetContact(signinName, communicator.MyServiceId) as IMessengerContact; 
     } 

     public List<CustomContacts> GetAllEmailsWithFiendlyName() 
     { 
      List<CustomContacts> lstContacts = new List<CustomContacts>(); 

      IMessengerContacts messengerContacts = (IMessengerContacts)communicator.MyContacts; 
      foreach (IMessengerContact acontact in messengerContacts) 
      { 
       CustomContacts aContact = new CustomContacts(); 
       aContact.ContactName = acontact.FriendlyName.ToString(); 
       aContact.ContactEmailId = acontact.SigninName.ToString(); 

       lstContacts.Add(aContact); 
      } 
      return lstContacts; 
     } 

    } 

    public class CustomContacts 
    { 
     public string ContactEmailId { get; set; } 
     public string ContactName { get; set; } 
     public string ContactStatus { get; set; } 
    } 
} 
0

你想爲傳播者建立一個基於網絡的基本前端。來自Peter的鏈接將幫助顯示出席信息,但僅限於您正在瀏覽的SharePoint頁面內容的一部分人員列表。

爲了顯示您在Communicator聯繫人列表中定義的聯繫人聯繫人,以及能夠向他們發送消息,您需要編寫大量連接到您本地運行的實例的客戶端腳本傳播者。

開始尋找將是Office Communicator 2007的SDK最好的地方

http://www.microsoft.com/downloads/details.aspx?FamilyID=ed1cce45-cc22-46e1-bd50-660fe6d2c98c&displaylang=en

如果你做的「Office Communicator的的API」網絡搜索,你會得到一大堆的鏈接,可能是有用的以及。

統一通信論壇也可以幫助

http://social.msdn.microsoft.com/Forums/en-US/category/uc

+0

謝謝Imran,但它沒有幫助。我已經嘗試過使用之前給出的SDK鏈接,但無法實現任何功能,因爲它需要Office Communicator在託管服務器中運行,這在我的情況中是不可能的。所以,我正在尋找任何JavaScript解決方案(從通信器獲取所有聯繫人/電子郵件ID,並使用上面的JavaScript代碼實現)。可能嗎。有沒有解決方法? –

+0

一些有用的鏈接http://stackoverflow.com/questions/10204711/can-microsoft-ocs-be-embedded-into-an-asp-net-web-page-how-long-should-it-take –

+0

另一個鏈接:http://geekswithblogs.net/jacobladams/archive/2011/05/03/use-hmtl-and-javascript-to-display-presence-controls-in-sharepoint.aspx –

相關問題