2013-12-24 1 views
5

심각한 문제가 있습니다. HTML 테이블에 모든 사용자와 그들의 상태를 표시하고 싶습니다. 자바 스크립트를 사용하는 것이 가능합니까?Office Communicator에서 모든 사용자를 asp.net 웹 페이지로 가져 오는 방법?

나는 단 하나의 사용자 만 보여주는 아래 링크를 거쳤으며 상태와 사용자 메일 ID는 하드 코딩되었습니다.

Integrate Microsoft Office Communicator 2007 in ASP.NET Page

자바

<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> 
여기 단일 사용자 및 사용자 메일 ID 게재되어이 예에서

(하드 코딩 된) 스트링으로서 정의된다. 나는 모든 사용자를 보여주고 싶다. 자바 스크립트를 통해 가능합니까?

모든 솔루션/데모가 도움이 될 것입니다.

감사합니다.

+0

당신이 연락처 목록을 얻을 수 있습니다처럼 정말 보이지 않는다. 사용자가 수동으로 연락처를 입력하도록 요구할 수 있습니다. – johnnycardy

+0

연락처를 얻으려면 "Communicator API"를 "NameCtrl"과 함께 사용했습니다. 나는 내 대답에서 설명했다. –

+0

아, 잘 했어.하지만 질문은 JavaScript에 관한거야 :-) – johnnycardy

답변

1

를 도움이 될 수 있습니다.

은 내가

1)이 http://msdn.microsoft.com/en-us/library/bb787231%28v=office.12%29.aspx 나는 마이크로 소프트 오피스 커뮤니케이터 자동화 API를 사용하여 응용 프로그램을 개발하기 위해이 때문에를 참조 말하고 왜

의를 참조하는 것이 달성하기 위해 "NameCtrl"와 "커뮤니케이터 API"를 사용 다음 요구 사항을 충족해야합니다. ? 개발 컴퓨터에 Microsoft Office Communicator 2007이 설치되어 있어야합니다.

? Microsoft Office Communicator 2007 SDK가 개발 컴퓨터에 설치되어 있습니다. SDK는 MSDN에서 다운로드 할 수 있습니다.

2) 서버에 Lync2010을 설치하고 여기에 로그인하십시오.

3) CommunicatorAPI.dll 및 CommunicatorPrivate에 대한 참조를 추가하십시오.dll 귀하의 웹 응용 프로그램에서

"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> 

Codebehind가

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 대화 상대 목록에 정의 된대로 온라인 대화 상대를 표시하고 대화 상대에게 메시지를 보낼 수있게하려면 로컬로 실행중인 인스턴스에 연결하는 많은 클라이언트 쪽 스크립트를 작성해야합니다 Communicator의

는 Office Communicator 2007을 SDK를 것 찾기 시작하는 가장 좋은 장소

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

는 "오피스 커뮤니케이터 API를"에 대한 웹 검색을 할 경우 유용 할 수 있습니다 링크의 전체를 많이 얻을 것이다 게다가.

통합 커뮤니케이션 포럼은 내가 여기에 내가 따라야 할 단계를 설명하고 을 필요로하는 기능을 달성 할 수 있어요 긴 시도 후

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

+0

고마워요 이므 란하지만 도움이되지 않습니다. 나는 이미 당신이 전에 준 SDK 링크로 시도했지만 Office Communicator가 내 경우에는 불가능한 호스팅 서버에서 실행해야하기 때문에 아무 것도 얻을 수 없습니다. 그래서, 모든 자바 스크립트 솔루션 (모든 연락처를 얻으려면/전자 메일 ID를 위의 자바 스크립트 코드와 구현 및 커뮤니 케이 션)에서 찾고 있어요. 가능한가? 어떤 해결책이 있습니까? –

+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 –

관련 문제