Как получить всех пользователей из Office Communicator на веб-страницу asp.net?

Я столкнулся с серьезной проблемой. Я хочу отображать всех пользователей и их статус в таблице HTML. Возможно ли это сделать с помощью javascript?

Я прошел по приведенной ниже ссылке, где отображается только один пользователь, а его статус и идентификатор почты пользователя жестко закодированы.

Интеграция Microsoft Office Communicator 2007 в страницу ASP.NET

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?

Любое решение/демонстрация будет очень полезно для меня.

Спасибо.


person Chandan Kumar    schedule 24.12.2013    source источник
comment
Не похоже, что вы можете получить список контактов. Возможно, вам придется потребовать от пользователя вручную ввести свои контакты.   -  person johnnycardy    schedule 02.01.2014
comment
Чтобы получить контакты, я использовал API-интерфейс Communicator с NameCtrl . Я объяснил в своем ответе.   -  person Chandan Kumar    schedule 02.01.2014
comment
Ах, молодец... но вопрос был про JavaScript :-)   -  person johnnycardy    schedule 02.01.2014
comment
@johnnycardy Спасибо, Джонни. Я не нашел способа получить все контакты, используя только javascript. Итак, я смешал Communicator API и NameCtrl - означает файл dll с javascript. Во всяком случае получил. Спасибо   -  person Chandan Kumar    schedule 03.01.2014


Ответы (2)


После долгих попыток я могу добиться функциональности в соответствии с моими потребностями. Здесь я объясняю шаги, которые необходимо выполнить.

Я использовал «Communicator API» с «NameCtrl» для достижения этого.

1) Перейдите по этой ссылке http://msdn.microsoft.com/en-us/library/bb787231%28v=office.12%29.aspx

почему я говорю сослаться на это, т.к. для разработки приложений с использованием Microsoft Office Communicator Automation 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>

Код программной части

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; }
    }
}
person Chandan Kumar    schedule 02.01.2014

вы хотите создать базовый веб-интерфейс для коммуникатора. Ссылки от Питера помогут показать информацию о присутствии, но только для списка людей, которые являются частью содержимого страницы SharePoint, которую вы просматриваете.

Чтобы отображать ваши онлайн-контакты, как они определены в ваших списках контактов Communicator, а также иметь возможность отправлять им сообщения, вам потребуется написать множество сценариев на стороне клиента, которые подключаются к локально работающему экземпляру Communicator.

Лучше всего начать поиск с Office Communicator 2007 SDK.

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

Если вы выполните поиск в Интернете по запросу «apis офисного коммуникатора», вы получите множество ссылок, которые также могут оказаться полезными.

Форумы по унифицированным коммуникациям также могут помочь

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

person Imran Ali Khan    schedule 29.12.2013
comment
Спасибо, Имран, но это бесполезно. Я уже пытался использовать ссылку SDK, которую вы дали ранее, но не смог ничего добиться, потому что для запуска Office Communicator на хост-сервере требуется запуск Office Communicator, что невозможно в моем случае. Итак, я ищу любое решение для javascript (чтобы получить все контакты/идентификаторы электронной почты от коммуникатора и реализовать его с помощью приведенного выше кода javascript). Является ли это возможным. есть ли решение? - person Chandan Kumar; 29.12.2013
comment
некоторые полезные ссылки take" title="может ли Microsoft OCs быть встроена в веб-страницу asp net, сколько времени это займет"> stackoverflow.com/questions/10204711/ - person Imran Ali Khan; 29.12.2013
comment
другая ссылка: geekswithblogs.net/jacobladams/archive/2011/05/03/ - person Imran Ali Khan; 29.12.2013
comment
привет Имран, я прошел следующие ссылки. в geekswithblogs.net/jacobladams/archive/2011/05/03/ также используется для одного пользователя. то, что я хочу, такое же, как здесь, но все пользователи. - person Chandan Kumar; 29.12.2013