Интеграция приложений для обмена мгновенными сообщениями с приложениями OfficeIntegrating IM applications with Office

В этой статье описано, как настроить клиентское приложение для обмена мгновенными сообщениями так, чтобы интегрировать его с социальными функциями в Office 2013, Office 2016, Office 2019, и Office 365, включая отображение сведений о присутствии и отправку мгновенных сообщений из карточки контакта.This article describes how to configure an instant message (IM) client application so that it integrates with the social features in Office 2013, including displaying presence and sending instant messages from the contact card.

ВведениеIntroduction

Office 2013 (и более поздние версии) располагает широкими возможностями интеграции с клиентскими приложениями для обмена мгновенными сообщениями, включая Lync 2013 и Teams.Office 2013 provides rich integration with IM client applications, including Lync 2013. Такая интеграция позволяет пользователям обмениваться мгновенными сообщениями из Word, Excel, PowerPoint, Outlook, Visio, Project и OneNote, а также обеспечивает интеграцию сведений о присутствии на страницах SharePoint.This integration provides users with IM capabilities from within Word 2013, Excel 2013, PowerPoint 2013, Outlook 2013, Visio 2013, Project 2013, and OneNote 2013 as well as providing presence integration on SharePoint 2013 pages. Пользователи могут просматривать фотографию, имя, состояние присутствия и контактные данные людей в своем списке контактов.Users can see the photo, name, presence status, and contact data for people in their contacts list. Можно начать сеанс обмена мгновенными сообщениями, видеозвонок или телефонный звонок прямо из карточки контакта (элемент пользовательского интерфейса в Office, содержащий контактную информацию и опции взаимодействия).They can start an IM session, video call, or phone call directly from the contact card (the UI element in Office 2013 that surfaces contact information and communication options). Office позволяет легко поддерживать связь с пользователями из списка контактов, не откладывая работу с электронной почтой и документами.Office 2013 makes it easy to stay connected to your contacts without taking you outside of your email or documents.

Примечание

В этой статье используется термин "клиентское приложение для обмена мгновенными сообщениями", означающий конкретное приложение, установленное на компьютере пользователя, которое осуществляет взаимодействие со службой обмена мгновенными сообщениями.This article uses the term IM client application to refer specifically to the application installed on a user's computer that communicates to the IM service. Например приложение Lync 2013 и Teams считаются клиентскими приложениями для обмена мгновенными сообщениями.For example, Lync 2013 and Teams are considered an IM client applications. В этой статье не приводятся подробные сведения о том, как клиентское приложение для обмена мгновенными сообщениями взаимодействует со службой обмена мгновенными сообщениями, а также о самой службе обмена мгновенными сообщениями.This article does not provide details about how the IM client application communicates to the IM service or about the IM service itself.

Вы можете настраивать клиентское приложение для обмена мгновенными сообщениями таким образом, чтобы оно осуществляло взаимодействие с Office.You can customize an IM client application so that it communicates with Office. В частности вы можете внести изменения в свое приложение для обмена мгновенными сообщениями так, чтобы оно отображало приведенные ниже сведения в пользовательском интерфейсе Office:Specifically, you can modify your IM application so that it displays the following information within the Office UI:

  • фотография контакта;Contact photo.

  • имя контакта;Contact name.

  • примечание о личном статусе контакта;Contact personal status note.

  • состояние присутствия контакта;Contact presence status.

  • строка доступности контакта (например, "Доступен" или "Нет на месте");Contact availability string (for example, "Available" or "Out of Office").

  • строка возможностей контакта (например, "Видео готово");Contact capability string (for example, "Video Ready").

  • запуск обмена мгновенными сообщениями одним щелчком;One-click IM launch.

  • запуск видеозвонка одним щелчком;One-click video call launch.

  • запуск телефонного звонка одним щелчком (в том числе SIP, номер телефона, голосовая почта и звонок на новый номер);One-click phone call launch (including SIP, phone number, voice mail, and call new number).

  • управление контактами (добавление в группу обмена мгновенными сообщениями);Contact management (add to IM group).

  • местонахождение контакта и часовой пояс;Contact location and time zone.

  • данные контакта, номер телефона, адрес электронной почты, должность и название компании.Contact data, phone number, email address, title, and company name.

Рис. 1. Карточка контакта в Office 2013Figure 1. Contact card in Office 2013

Карточка контакта в Office 2013The People Card in Office 2013

Чтобы сделать возможной такую интеграцию с Office, в клиентском приложении для обмена мгновенными сообщениями должен быть реализован набор интерфейсов, предоставляемых Office для подключения к нему.To enable this integration with Office, an IM client application must implement a set of interfaces that Office provides to connect to it. API для такой интеграции включены в пространство имен UCCollborationLib, которое содержится в файле Microsoft.Office.UC.dll, установленном вместе с версиями Office 2013, которые включают Lync / Skype для бизнеса.The APIs for this integration are included in the UCCollborationLib namespace that is contained in the Microsoft.Office.UC.dll file, which is installed with versions of Office 2013 that include Lync / Skype for Business. Пространство имен UCCollaborationLib включает интерфейсы, которые следует реализовать для интеграции с Office.The UCCollaborationLib namespace includes the interfaces that you must implement to integrate with Office.

Важно!

Библиотека типов обязательных интерфейсов встроена в Lync 2013 / Skype для бизнеса.The type library for the required interfaces is embedded in Lync 2013/Skype for Business. Для сторонних интеграторов это применимо только в том случае, если и Lync 2013, и Skype для бизнеса установлены на целевой компьютер.For third-party integrators, this works only when both Lync 2013 and Skype for Business are installed on the target machine. Если вы выполняете интеграцию, используя Office стандартный, вам потребуется извлечь библиотеку типов и установить ее на целевой компьютер.If you are integrating using Office Standard, you need to extract the type library and install it on the target machine. Lync 2013 SDK включает файл Microsoft.Office.UC.dll.The Lync 2013 SDK includes the Microsoft.Office.UC.dll file.

Примечание

Некоторые приложения Office 2010 могут подобным образом интегрироваться со сторонним приложением для обмена мгновенными сообщениями: Outlook 2010, Word 2010, Excel 2010, PowerPoint 2010 и SharePoint Server 2010 (используя элемент ActiveX).A handful of Office 2010 applications can integrate similarly with a third-party IM provider application: Outlook 2010, Word 2010, Excel 2010, PowerPoint 2010, and SharePoint Server 2010 (using an ActiveX control). Многие действия, необходимые для интеграции с Office 2013, также применимы к Office 2010.Many of the steps required for integration with Office 2013 apply to Office 2010 as well. Есть несколько важных различий в том, как Office 2010 интегрируется с приложением для обмена мгновенными сообщениями.There are several key differences in how Office 2010 integrates with an IM provider application:

  • В Office 2010 фото контакта не отображается.Office 2010 does not display the contact's photo.
  • Необходимо скачать файл Microsoft.Office.Uc.dll отдельно от Office 2010.You must download the Microsoft.Office.Uc.dll file separately from Office 2010. Lync 2010 SDK включает файл Microsoft.Office.UC.dll для Office 2010.The Lync 2010 SDK includes the Microsoft.Office.UC.dll file for Office 2010.
  • Когда приложение Office вызывает метод IUCOfficeIntegration.GetAuthenticationInfo в клиентском приложении для обмена мгновенными сообщениями, оно передает строку "14.0.0.0".When the Office application calls the IUCOfficeIntegration.GetAuthenticationInfo method on the IM client application, it passes in the string "14.0.0.0".
  • Office 2010 перечисляет все группы и контакты, как только устанавливает подключение к клиентскому приложению для обмена мгновенными сообщениями.Office 2010 enumerates all groups and contacts as soon as it connects to an IM client application.

Как выполняется интеграция Office с клиентским приложением для обмена мгновенными сообщениямиHow Office integrates with an IM client application

При запуске приложения Office 2013 (или более поздних версий) выполняется указанный ниже порядок действий для интеграции с клиентским приложением для обмена мгновенными сообщениями по умолчанию.When an Office 2013 application starts, it goes through the following process to integrate with the default IM client application:

  1. Оно выполняет проверку реестра для обнаружения клиентского приложения для обмена мгновенными сообщениями по умолчанию, а затем подключается к нему.It checks the registry to discover the default IM client application and then connects to it.

  2. Оно выполняете проверку подлинности с помощью клиентского приложения для обмена мгновенными сообщениями.It authenticates with the IM client application.

  3. Оно подключается к определенным интерфейсам, которые отображаются клиентским приложением для обмена мгновенными сообщениями.It connects to specific interfaces that are exposed by the IM client application.

  4. Оно определяет возможности пользователя, который в настоящий момент выполнил вход в систему (локальный пользователь), включая получение контактов пользователя, определение сведений о присутствии пользователя и определение возможностей пользователя в отношении обмена мгновенными сообщениями (обмен мгновенными сообщениями, видеочат, VOIP и т. д.).It determines the capabilities of the currently signed-in user (local user), including getting the user's contacts, determining the user's presence, and determining the user's IM capabilities (instant messaging, video chat, VOIP, and so on).

  5. Оно получает сведения о присутствии для контактов локального пользователя.It gets presence information for the local user's contacts.

  6. Когда клиентское приложение для обмена мгновенными сообщениями завершает работу, приложение Office отключается без уведомления.When the IM client application shuts down, the Office 2013 application silently disconnects.

Обнаружение приложения для обмена мгновенными сообщениямиDiscovering the IM application

Приложение Office выполняет поиск нескольких определенных разделов и записей в реестре, чтобы обнаружить клиентское приложение для обмена мгновенными сообщениями по умолчанию.The Office application looks for several specific keys and entries in the registry to discover the default IM client application. Если оно находит клиентское приложение для обмена мгновенными сообщениями по умолчанию, выполняет попытку подключиться к нему.If it discovers a default IM client application, it then attempts to connect to it.

Порядок действий, которые выполняет приложение Office, чтобы обнаружить клиентское приложение для обмена мгновенными сообщениями по умолчанию, приводится ниже.The process that the Office application goes through to discover the default IM client application is as follows:

  1. Приложение Office выполняет поиск, чтобы выяснить, задан ли подраздел HKEY_CURRENT_USER\Software\IM Providers\DefaultIMApp в реестре и считывает ли он имя приложения, указанное в нем.The Office application looks to see if the HKEY_CURRENT_USER\Software\IM Providers\DefaultIMApp subkey in the registry is set and reads the application name listed there.

  2. Затем приложение Office считывает раздел HKEY_CURRENT_USER\Software\IM Providers\ Имя приложения\UpAndRunning и отслеживает значение на предмет изменений.The Office application then reads the HKEY_CURRENT_USER\Software\IM Providers\ Application name\UpAndRunning key and monitors the value for changes.

  3. Затем приложение Office считывает раздел реестра HKEY_LOCAL_MACHINE\Software\IM Providers\ Имя приложения и получает значения ProcessName и идентификатор класса (CLSID), хранящиеся в нем.The Office application next reads the HKEY_LOCAL_MACHINE\Software\IM Providers\ Application name registry key and gets the ProcessName and class ID (CLSID) values stored there.

  4. После того как клиентское приложение для обмена мгновенными сообщениями успешно завершит последовательность запуска и правильно зарегистрирует все классы для интеграции сведений о присутствии, оно задает для раздела HKEY_CURRENT_USER\Software\IM Providers\ Имя приложения\ UpAndRunning значение "2", указывая, что клиентское приложение выполняется.Once the IM client application has completed its start sequence successfully and registered all of the classes correctly for the presence integration, it sets the HKEY_CURRENT_USER\Software\IM Providers\ Application name\UpAndRunning key to "2", indicating that the client application is running.

  5. Когда приложение Office обнаруживает, что для раздела HKEY_CURRENT_USER\Software\IM Providers\ Имя приложения\UpAndRunning задано значение "2", оно проверяет список выполняемых процессов на компьютере для выявления имени процесса клиентского приложения для обмена мгновенными сообщениями.When the Office application discovers that the HKEY_CURRENT_USER\Software\IM Providers\ Application name\UpAndRunning key has been set to "2", it checks the list of running processes on the computer for the process name of the IM client application.

  6. После того как приложение Office находит процесс, используемый клиентским приложением для обмена мгновенными сообщениями, оно вызывает CoCreateInstance, используя CLSID для установления подключения к клиентскому приложению для обмена мгновенными сообщениями, как внепроцессный сервер COM.Once the Office application finds the process that the IM client application uses, the Office application calls CoCreateInstance using the CLSID to establish a connection to the IM client application as an out-of-process COM server.

Аутентификация подключения к приложению для обмена мгновенными сообщениямиAuthenticating the connection to the IM application

После того как приложение Office установит подключение к клиентскому приложению для обмена мгновенными сообщениями, оно выполняет указанные ниже действия.After the Office application establishes a connection to the IM client application, it then does the following:

  1. Приложение Office вызывает метод IUnknown::QueryInterface для выявления интерфейса IUCOfficeIntegration.The Office application calls IUnknown::QueryInterface method to check for the IUCOfficeIntegration interface.

  2. Затем приложение Office вызывает метод IUCOfficeIntegration.GetAuthenticationInfo, передавая самую последнюю поддерживаемую версию интеграции (например, "15.0.0.0").The Office application then calls the IUCOfficeIntegration.GetAuthenticationInfo method, passing in the highest supported integration version (for example, "15.0.0.0").

  3. Если клиентское приложение для обмена мгновенными сообщениями поддерживает версию, переданную приложением Office в качестве параметра, приложение возвращает следующую жестко заданную строку XML коду вызова:If the IM client application supports the version of Office passed in as a parameter, the application returns the following hard-coded XML string to the calling code:

    <authenticationinfo>

    Примечание

    По причине возможного устаревания клиентское приложение для обмена мгновенными сообщениями должно вернуть точное значение <authenticationinfo> для вызова GetAuthenticationInfo, если оно поддерживает версию Office, переданную в качестве параметра.For legacy reasons, the IM client application must return the exact value <authenticationinfo> to the call to GetAuthenticationInfo if it supports the version of Office passed in as a parameter.

  4. Если клиентское приложение для обмена мгновенными сообщениями не может вернуть значение, приложение Office вызывает метод GetAuthenticationInfo снова, используя следующую наиболее актуальную версию Office (например, "14.0.0.0").If the IM client application fails to return a value, the Office application calls the GetAuthenticationInfo method again with the next highest supported version of Office (for example, "14.0.0.0").

  5. После того как приложение Office определяет, что клиентское приложение для обмена мгновенными сообщениями поддерживает интеграцию обмена мгновенными сообщениями и сведений о присутствии, оно подключается к обязательному набору интерфейсов для завершения инициализации.Once Office determines that the IM client application supports IM and presence integration, it connects to a required set of interfaces to finish initializing. (Для получения дополнительной информации см. статью Подключение к обязательным интерфейсам.)(For more information, see Connecting to required interfaces.)

Если приложение Office обнаруживает ошибку в ходе выполнения любого из описанных выше действий, оно отменяет выполненное ранее, и интеграция сведений о присутствии больше не будет устанавливаться во время сеанса приложения Office.If the Office application encounters an error on any of the steps above, it backs out and presence integration is not established again during the session of the Office application.

Подключение к обязательным интерфейсамConnecting to required interfaces

После аутентификации подключения к клиентскому приложению для обмена мгновенными сообщениями приложение Office пытается подключиться к набору обязательных интерфейсов, которые клиентское приложение для обмена мгновенными сообщениями должно представлять.After authenticating the connection to the IM client application, the Office application attempts to connect to a set of required interfaces that the IM client application must expose. Приложение Office выполняет это в указанном ниже порядке.The Office application accomplishes this by doing the following:

  • Приложение Office получает объект ILyncClient, вызывая метод IUCOfficeIntegration.GetInterface посредством передачи константы oiInterfaceLyncClient из перечисления UCCollaborationLib.OIInterface.The Office application gets an ILyncClient object by calling the IUCOfficeIntegration.GetInterface method, passing in the oiInterfaceLyncClient constant from the UCCollaborationLib.OIInterface enumeration.

  • Приложение Office получает объект IAutomation, вызывая метод IUCOfficeIntegration.GetInterface посредством передачи константы oiInterfaceAutomation из перечисления OIInterface.The Office application gets an IAutomation object by calling the IUCOfficeIntegration.GetInterface method, passing in the oiInterfaceAutomation constant from the OIInterface enumeration.

  • Приложение Office задает прослушиватель событий _ILyncClientEvents.The Office application sets up the _ILyncClientEvents event listener.

  • Приложение Office задает прослушиватель событий _IUCOfficeIntegrationEvents.The Office application sets up the _IUCOfficeIntegrationEvents event listener.

  • Приложение Office получает состояние выполнения входа из клиентского приложения для обмена мгновенными сообщениями, выполняя доступ к свойству ILyncClient.State.The Office application gets the sign-in state from the IM client application by accessing the ILyncClient.State property.

  • Приложение Office получает возможности клиентского приложения для обмена мгновенными сообщениями, вызывая метод IUCOfficeIntegration.GetSupportedFeatures, который возвращает отметку из перечисления UCCollaborationLib.OIFeature.The Office application gets the capabilities of the IM client application by calling the IUCOfficeIntegration.GetSupportedFeatures method, which returns a flag from the UCCollaborationLib.OIFeature enumeration.

  • Приложение Office выполняет доступ к свойству ILyncClient.Self, чтобы получить ссылку на объект ISelf.The Office application accesses the ILyncClient.Self property to get a reference to an ISelf object.

Получение возможностей локального пользователяRetrieving the capabilities of the local user

Приложение Office получает возможности локального пользователя в указанном ниже порядке.The Office application gets the capabilities of the local user by doing the following:

  1. Если клиентское приложение для обмена мгновенными сообщениями поддерживает интерфейс IClient2, Office пытается получить объект IContactManager, выполняя доступ к свойству IClient2.PrivateContactManager.If the IM client application supports the IClient2 interface, Office tries to get an IContactManager object by accessing the IClient2.PrivateContactManager property.

  2. Если приложение для обмена мгновенными сообщениями не поддерживает интерфейс IClient2, приложение Office получает объект IContactManager, выполняя доступ к свойству ILyncClient.ContactManager.If the IM application does not support the IClient2 interface, Office application gets an IContactManager object by accessing the ILyncClient.ContactManager property. Клиентское приложение для обмена мгновенными сообщениями должно успешно вернуть объект IContactManager, прежде чем можно будет установить любую из других возможностей обмена мгновенными сообщениями.The IM client application must successfully return an IContactManager object before any other IM capabilities can be established.

  3. Приложение Office выполняет доступ к свойству ILyncClient.Uri, а затем вызывает IContactManager.GetContactByUri, чтобы получить объект IContact, связанный с локальным пользователем.The Office application accesses the ILyncClient.Uri property and then calls IContactManager.GetContactByUri to get the IContact object associated with the local user.

  4. Затем приложение Office выполняет несколько вызовов IContact.CanStart, чтобы установить возможности локального пользователя, последовательно передавая значения для ModalityTypes.ucModalityInstantMessage и ModalityTypes.ucModalityAudioVideo.The Office application then makes several calls to IContact.CanStart to establish the capabilities of the local user, passing in the values for ModalityTypes.ucModalityInstantMessage and ModalityTypes.ucModalityAudioVideo successively.

Получение сведений о присутствии контактаRetrieving contact presence

Приложение Office получает сведения о присутствии контакта, в том числе локального пользователя, выполняя указанные ниже действия.The Office application gets contact presence, including the local user, by doing the following:

  1. Приложение Office вызывает IContact.GetContactInformation, чтобы получить элемент сведений о присутствии от контакта.The Office application calls IContact.GetContactInformation to get a presence item from the contact.

  2. Затем приложение Office подписывается на получение сведений об изменении состояния присутствия от контакта.The Office application then subscribes to presence status changes from the contact. Оно вызывает IContactManager.CreateSubscription, чтобы получить объект IContactSubscription.It calls IContactManager.CreateSubscription to get an IContactSubscription object. Затем оно вызывает IContactSubscription.AddContact, чтобы добавить контакт в подписку, а после вызывает IContactSubscription.Subscribe для получения сведений об изменении статуса контакта.It then calls IContactSubscription.AddContact to add the contact to the subscription and then calls IContactSubscription.Subscribe to get changes in the contact's status.

  3. Если приложение для обмена мгновенными сообщениями поддерживает IContact2, приложение Office выполняет попытку получить сведения о присутствии, вызывая IContact2.BatchGetContactInformation2.If the IM application supports IContact2, Office attempts to get presence information by calling IContact2.BatchGetContactInformation2.

  4. Затем приложение Office получает свойства присутствия для контакта, вызывая IContact.BatchGetContactInformation.The Office application then retrieves the presence properties for the contact by calling IContact.BatchGetContactInformation. Приложение Office может получить второй набор свойств присутствия, выполнив доступ к свойству IContact.Settings.The Office application can get a second set of presence properties by accessing the IContact.Settings property.

  5. И наконец, приложение Office получает сведения об участии контакта в группах, выполняя доступ к свойству IContact.CustomGroups.Finally, the Office application gets the contact's group membership by accessing the IContact.CustomGroups property. Это возвращает коллекцию IGroupCollection, которая включает все объекты IGroup, которым принадлежит контакт.This returns an IGroupCollection collection that includes all of the IGroup objects that the contact belongs to.

Отключение от приложения для обмена мгновенными сообщениямиDisconnecting from the IM application

Когда приложение Office обнаруживает событие OnShuttingDown от приложения для обмена мгновенными сообщениями, оно отключается без уведомлений.When the Office 2013 application detects the OnShuttingDown event from the IM application, it disconnects silently. Тем не менее, если приложение Office завершает работу раньше приложения для обмена мгновенными сообщениями, нет гарантий, что сведения о подключении и в приложении Office будут очищены.However, if the Office application shuts down before the IM application, the Office application does not guarantee that the connection is cleaned up. Приложение для обмена мгновенными сообщениями должно устранять возможность утечки сведений подключения клиента.The IM application must handle client connection leaks.

Настройка записей и разделов реестраSetting registry keys and entries

Как уже было сказано, приложения Office, поддерживающие обмен мгновенными сообщениями, выполняют поиск определенных разделов, записей и значений в реестре, чтобы обнаружить клиентское приложение для обмена мгновенными сообщениями, к которому следует подключиться.As mentioned previously, the IM-capable Office 2013 applications look for specific keys, entries, and values in the registry to discover the IM client application to connect to. Такие значения реестра указывают приложению Office имя процесса и CLSID класса, выступающего в качестве точки входа в модель объекта клиентского приложения для обмена мгновенными сообщениями (т. е. класс, который реализует интерфейс IUCOfficeIntegration).These registry values provide the Office application with the process name and CLSID of the class that acts as the entry point to the IM client application's object model (that is, the class that implements the IUCOfficeIntegration interface). Приложение Office воссоздает такой класс и устанавливает подключение в качестве клиента к внепроцессному серверу COM в клиентском приложении для обмена мгновенными сообщениями.The Office application co-creates that class and connects as a client to the out-of-process COM server in the IM client application.

Используйте Таблицу 1 для определения разделов, записей и значений, которые должны быть записаны в реестре для интеграции клиентского приложения для обмена мгновенными сообщениями с Office.Use Table 1 to identify the keys, entries, and values that must be written in the registry to integrate an IM client application with Office.

Таблица 1. Разделы реестра, позволяющие задать клиентское приложение для обмена мгновенными сообщениями по умолчаниюTable 1. Registry keys for setting the default IM client application

РазделKey ЗаписьEntry ТипType ЗначениеValue ПримерExample
HKEY_LOCAL_MACHINE\Software\IM Providers\<Имя приложения>HKEY_LOCAL_MACHINE\Software\IM Providers\<Application name>
FriendlyNameFriendlyName
REG_SZREG_SZ
Имя стороннего клиентского приложения для обмена мгновенными сообщениями.The name of the third-party IM client application.
Litware IM 2012Litware IM 2012
ProcessNameProcessName
REG_SZREG_SZ
Имя процесса стороннего клиентского приложения для обмена мгновенными сообщениями.The process name of the third-party IM client application.
litware.exelitware.exe
GUIDGUID
REG_SZREG_SZ
Идентификатор класса (CLSID) для корневого, воссоздаваемого класса в приложении для обмена мгновенными сообщениями (класс, который реализует интерфейс IUCOfficeIntegration).A class ID (CLSID) for the root, cocreatable class in the IM application (the class that implements the IUCOfficeIntegration interface).
(A GUID)(A GUID)
HKEY_CURRENT_USER\Software\IM ProvidersHKEY_CURRENT_USER\Software\IM Providers
DefaultIMAppDefaultIMApp
REG_SZREG_SZ
Имя клиентского приложения для обмена мгновенными сообщениями.The name of the IM client application. Должно быть таким же, как и имя в разделе реестра верхнего уровня (куст) в HKEY_LOCAL_MACHINE.This must be the same as the name at the top-level registry key (hive) in the HKEY_LOCAL_MACHINE.
LitwareLitware
HKEY_CURRENT_USER\Software\IM Providers\<Имя приложения>HKEY_CURRENT_USER\Software\IM Providers\<Application name>
UpAndRunningUpAndRunning
REG_DWORDREG_DWORD
Целое число от 0 до 2:An integer value between 0 and 2:
0 — не выполняется;0—Not running
1 — выполняется запуск;1—Starting
2 — выполняется.2—Running

ПРИМЕЧАНИЕ: раздел реестра имени приложения должен быть таким же, как значение записи DefaultIMApp.NOTE: The application name registry key must be the same as the value of the DefaultIMApp entry.

Реализация обязательных интерфейсов для интеграции с OfficeImplementing the required interfaces for integration with Office

Существует три интерфейса из пространства имен UCCollaborationLib, которые исполняемый файл (или сервер COM) клиентского приложения для обмена мгновенными сообщениями должен реализовать, чтобы можно было выполнить интеграцию с Office.There are three interfaces from the UCCollaborationLib namespace that the executable (or COM server) of an IM client application must implement so that it can integrate with Office. Если такие интерфейсы реализованы не будут, приложение Office отменяет выполненные действия во время процесса инициализации, и подключение к клиентскому приложению для обмена мгновенными сообщениями не устанавливается.If these interfaces are not implemented, the Office application backs out during the initialization process and the connection with the IM client application is not established.

Обязательные интерфейсы приведены ниже.The required interfaces are as follows:

  • IUCOfficeIntegration — несмотря на то, что данный интерфейс не является обязательным, интерфейс _IUCOfficeIntegrationEvents также следует реализовать в том же производном классе.IUCOfficeIntegration—Although not required, the _IUCOfficeIntegrationEvents interface should also be implemented in the same derived class.

  • ILyncClient — несмотря на то, что данный интерфейс не является обязательным, интерфейс _ILyncClientEvents также следует реализовать в том же производном классе.ILyncClient—Although not required, the _ILyncClientEvents interface should also be implemented in the same derived class.

  • IAutomationIAutomation

Интерфейс IUCOfficeIntegrationIUCOfficeIntegration interface

Интерфейс IUCOfficeIntegration обеспечивает точку входа для приложения Office, чтобы выполнить подключение к клиентскому приложению для обмена мгновенными сообщениями.The IUCOfficeIntegration interface provides the entry-point for an Office application to connect to the IM client application. Интерфейс определяет три метода, которые приложение Office вызывает в рамках процесса инициализации подключения к клиентскому приложению для обмена мгновенными сообщениями.The interface defines three methods that an Office application calls as part of the process of initiating a connection with the IM client application. Класс, который реализует интерфейс IUCOfficeIntegration, должен быть воспроизводимым, так чтобы приложение Office могло воссоздать его экземпляр.The class that implements the IUCOfficeIntegration interface must be co-creatable so that Office can co-create an instance of it. Кроме того, он должен отображать CLSID, который вводится как значение для записи GUID в разделе реестра HKEY_LOCAL_MACHINE\Software\IM Providers\ Имя приложения.In addition, it must expose the CLSID that is entered as the value for the GUID entry in the HKEY_LOCAL_MACHINE\Software\IM Providers\ Application name registry key.

Класс, наследуемый от IUCOfficeIntegration, также должен реализовать интерфейс _IUCOfficeIntegrationEvents.The class that inherits from IUCOfficeIntegration should also implement the _IUCOfficeIntegrationEvents interface. Интерфейс _IUCOfficeIntegrationEvents содержит элементы, которые отображают обработчики событий интерфейса IUCOfficeIntegration.The _IUCOfficeIntegrationEvents interface contains the members that expose the event handlers of the IUCOfficeIntegration interface.

В Таблице 2 показаны элементы, которые должны быть реализованы в классе, наследуемом от IUCOfficeIntegration и _IUCOfficeIntegration.Table 2 shows the members that must be implemented in the class that inherits from IUCOfficeIntegration and _IUCOfficeIntegration.

Примечание

Для получения дополнительных сведений об интерфейсах IUCOfficeIntegration и _IUCOfficeIntegrationEvents и их элементах см. UCCollaborationLib.IUCOfficeIntegration и UCCollaborationLib._IUCOfficeIntegrationEvents.For more information about the IUCOfficeIntegration and _IUCOfficeIntegrationEvents interfaces and their members, see UCCollaborationLib.IUCOfficeIntegration and UCCollaborationLib._IUCOfficeIntegrationEvents.

Таблица 2. Реализация интерфейсов IUCOfficeIntegration и _IUCOfficeIntegrationEventsTable 2. Implementation of the IUCOfficeIntegration and _IUCOfficeIntegrationEvents interfaces

ИнтерфейсInterface ЭлементMember ОписаниеDescription
IUCOfficeIntegrationIUCOfficeIntegration
Метод GetAuthenticationInfoGetAuthenticationInfo method
Получает строку сведений аутентификации.Gets the authentication info string.
Метод GetInterfaceGetInterface method
Получает интерфейс определенной версии.Gets the interface of a particular version.
Метод GetSupportedFeaturesGetSupportedFeatures method
Получает поддерживаемые функции интеграции Office.Gets the supported Office integration features.
_IUCOfficeIntegrationEvents_IUCOfficeIntegrationEvents
Событие OnShuttingDownOnShuttingDown event
Событие, созданное, когда клиентское приложение для обмена мгновенными сообщениями пыталось завершить работу.The event raised when the IM client application is trying to shut down.

Используйте следующий код для определения класса, наследуемого из интерфейсов IUCOfficeIntegration и _IUCOfficeIntegration в пределах клиентского приложения для обмена мгновенными сообщениями.Use the following code to define a class that inherits from the IUCOfficeIntegration and _IUCOfficeIntegration interfaces within an IM client application.

// An example of a class that can be co-created and can integrate
// with Office as an IM provider.
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(_IUCOfficeIntegrationEvents))]
[Guid("{CLSID value}"), ComVisible(true)]
public class LitwareClientAppObject : IUCOfficeIntegration
{
    // Implementation details omitted.
}

Метод GetAuthenticationInfo занимает строку в качестве аргумента для параметра version.The GetAuthenticationInfo method takes a string as an argument for the version parameter. Когда приложение Office вызывает этот метод, он передается в одну из двух строк для аргумента, в зависимости от версии Office.When the Office application calls this method, it passes in one of two strings for the argument, depending on the version of Office. Когда приложение Office указывает методу версию Office, которую поддерживает клиентское приложение для обмена мгновенными сообщениями (а именно, поддерживает функционал), метод GetAuthenticationInfo возвращает жестко заданную строку XML <authenticationinfo>.When the Office application supplies the method with the version of Office that the IM client application supports (that is, supports the functionality), the GetAuthenticationInfo method returns a hard-coded XML string <authenticationinfo>.

Используйте следующий код для реализации метода GetAuthentication в пределах кода клиентского приложения для обмена мгновенными сообщениями.Use the following code to implement the GetAuthentication method within the IM client application code.

public string GetAuthenticationInfo(string _version)
{
    // Define the version of Office that the IM client application supports.
    string supportedOfficeVersion = "15.0.0.0";
    // Do a simple check for equivalency.
    if (supportedOfficeVersion == _version)
    {
        // If the version of Office is supported, this method must 
        // return the string literal "<authenticationinfo>" exactly.
        return "<authenticationinfo>";
    }
    else
    {
        return null;
    }
}

Метод GetInterface передает ссылки классам на вызывающий код, в зависимости от того, что передается в качестве аргумента для параметра interface.The GetInterface method shuttles references to classes to the calling code, depending on what is passed in as an argument for the interface parameter. Когда приложение Office вызывает метод GetInterface, оно передает одно из двух значений для параметра интерфейса: либо константу oiInterfaceILyncClient (1), либо константу oiInterfaceIAutomation (2) перечисления UCCollaborationLib.OIInterface.When an Office application calls the GetInterface method, it passes in one of two values for the interface parameter: either the oiInterfaceILyncClient constant (1) or the oiInterfaceIAutomation constant (2) of the UCCollaborationLib.OIInterface enumeration. Если приложение Office передает константу oiInterfaceILyncClient, метод GetInterface возвращает ссылку на класс, который реализует интерфейс ILyncClient.If the Office application passes in the oiInterfaceILyncClient constant, the GetInterface method returns a reference to a class that implements the ILyncClient interface. Если приложение Office передает константу oiInterfaceIAutomation, метод GetInterface возвращает класс, который реализует интерфейс IAutomation.If the Office application passes in the oiInterfaceIAutomation constant, the GetInterface method returns a class that implements the IAutomation interface.

Используйте следующий пример кода для реализации метода GetInterface в пределах кода клиентского приложения для обмена мгновенными сообщениями.Use the following code example to implement the GetInterface method within the IM client application code.

public object GetInterface(string _version, OIInterface _interface)
{
    // These objects implement the ILyncClient or IAutomation 
    // interfaces respectively. There is no restriction on what these
    // classes are named.
    IMClient imClient = new IMClient();
    IMClientAutomation imAutomation = new IMClientAutomation();
    // Return different object references depending on the value passed in
    // for the _interface parameter.
    switch (_interface)
    {
        // The calling code is asking for an object that inherits
        // from ILyncClient, so it returns such an object.
        case OIInterface.oiInterfaceILyncClient:
        {
            return imClient;
        }
        // The calling code is asking for an object that inherits
        // from IAutomation, so it returns such an object.
        case OIInterface.oiInterfaceIAutomation:
        {
            return imAutomation;
        }
        default:
        {
            throw new NotImplementedException();
        }
    }
}

Метод GetSupportedFeatures возвращает сведения о возможностях обмена мгновенными сообщениями, которые поддерживает клиентское приложение для обмена мгновенными сообщениями.The GetSupportedFeatures method returns information about the IM features that the IM client application supports. Он принимает строку для своего единственного параметра version.It takes a string for its only parameter, version. Когда приложение Office вызывает метод GetSupportedFeatures, метод возвращает значение из перечисления UCCollaborationLib.OIFeature.When the Office application calls the GetSupportFeatures method, the method returns a value from the UCCollaborationLib.OIFeature enumeration. Возвращаемое значение указывает возможности клиента для обмена мгновенными сообщениями, где каждая возможность клиентского приложения для обмена мгновенными сообщениями указывается приложению Office добавлением отметки значению.The returned value specifies the capabilities of the IM client, where each capability of the IM client application is indicated to the Office application by adding a flag to the value.

Примечание

Приложения Office 2013 (и более поздних версий) игнорируют следующие константы в перечислении OIFeature:Office 2013 applications ignore the following constants in the OIFeature enumeration:

  • oiFeaturePictures (2);oiFeaturePictures (2)
  • oiFeatureFreeBusyIntegration;oiFeatureFreeBusyIntegration
  • oiFeaturePhoneNormalization.oiFeaturePhoneNormalization

Используйте следующий пример кода для реализации метода GetSupportFeatures в пределах кода клиентского приложения для обмена мгновенными сообщениями.Use the following code example to implement the GetSupportFeatures method within the IM client application code.

public OIFeature GetSupportedFeatures(string _version)
{
    OIFeature supportedFeature1 = OIFeature.oiFeatureQuickContacts;
    OIFeature supportedFeature2 = OIFeature.oiFeatureFastSearch;
    return (supportedFeature1 | supportedFeature2);
}

Интерфейс ILyncClientILyncClient interface

Интерфейс ILyncClient сопоставляется с возможностями самого клиентского приложения для обмена мгновенными сообщениями.The ILyncClient interface maps to the capabilities of the IM client application itself. Он отображает свойства, которые относятся к пользователю, выполнившему вход в приложение (локальный пользователь, представленный интерфейсом UCCollaborationLib.ISelf), состояние приложения, список контактов локального пользователя и некоторые другие настройки.It exposes properties that refer to the person who is signed into the application (the local user, represented by the UCCollaborationLib.ISelf interface), the state of the application, the list of contacts for the local user, and several other settings. Когда он выполняет попытку подключиться к клиентскому приложению для обмена мгновенными сообщениями, приложение Office получает ссылку на объект, который реализует интерфейс ILyncClient.When it's trying to connect to the IM client application, the Office application gets a reference to an object that implements the ILyncClient interface. По такой ссылке приложение Office может получить доступ к большинству функций клиентского приложения для обмена мгновенными сообщениями.From that reference, Office can access much of the functionality of the IM client application.

Кроме того, класс, который реализует интерфейс ILyncClient, также должен реализовать интерфейс _ILyncClientEvents.In addition, the class that implements the ILyncClient interface should also implement the _ILyncClientEvents interface. Интерфейс _ILyncClientEvents отображает несколько событий, которые являются обязательными для отслеживания состояния клиентского приложения для обмена мгновенными сообщениями.The _ILyncClientEvents interface exposes several of the events that are required for monitoring the state of the IM client application.

В Таблице 3 показаны элементы, которые должны быть реализованы в классе, наследуемом от ILyncClient и _ILyncClientEvents.Table 3 shows the members that must be implemented in the class that inherits from ILyncClient and _ILyncClientEvents.

Примечание

Любой элемент интерфейса ILyncClient или ** _ILyncClientEvents**, не указанный в таблице, должен быть в наличии, но не обязательно должен быть реализован.Any member of the ILyncClient or _ILyncClientEvents interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсах ILyncClient и _ILyncClientEvents и их элементах см. в статье UCCollaborationLib.ILyncClient и UCCollaborationLib._ILyncClientEvents.For more information about the ILyncClient and _ILyncClientEvents interfaces and their members, see UCCollaborationLib.ILyncClient and UCCollaborationLib._ILyncClientEvents.

Таблица 3. Реализация интерфейсов ILyncClient и ILyncClientEventsTable 3. Implementation of ILyncClient and ILyncClientEvents interfaces

ИнтерфейсInterface ЭлементMember ОписаниеDescription
ILyncClientILyncClient
Свойство ContactManagerContactManager property
Получает руководителя группы контактов.Gets the contact group manager.
Свойство ConversationManagerConversationManager property
Получает руководителя беседы.Gets the conversations manager.
Свойство SelfSelf property
Получает объект Self.Gets the Self object.
Метод SignInSignIn method
Запускает процесс выполнения входа в клиентское приложение для обмена мгновенными сообщениями с определенной доступностью.Starts the IM client application sign-in process with a specific availability.
Свойство StateState property
Получает текущее состояние платформы.Gets the current platform state.
Свойство UriUri property
Получает URI клиентского приложения для обмена мгновенными сообщениями.Gets the URI of the IM client application.
_ILyncClientEvents_ILyncClientEvents
Событие OnStateChangedOnStateChanged event
Создается, когда изменяется состояние клиентского приложения для обмена мгновенными сообщениями.Raised when the IM client application state changes. Это событие следует обработать и получить свойство eventData.NewState.You should handle this event and get the eventData.NewState property. Событие создается для всех процессов, связанных с экземпляром клиентского приложения для обмена мгновенными сообщениями, когда любая подсистема в приложении приводит к изменению состояния.The event is raised for all processes bound to an instance of an IM client application when any subsystem in the application causes the state change.

В ходе процесса инициализации приложение Office выполняет доступ к свойству ILyncClient.State.During the initialization process, Office accesses the ILyncClient.State property. Этому свойству необходимо вернуть значение из перечисления UCCollaborationLib.ClientState.This property needs to return a value from the UCCollaborationLib.ClientState enumeration.

private ClientState _clientState;
public ClientState State
{
    get
    {
        return this._clientState;
    }
}

Свойство State сохраняет текущий статус клиентского приложения для обмена мгновенными сообщениями.The State property stores the current status of the IM client application. Его необходимо задать и обновить в сеансе клиентского приложения для обмена мгновенными сообщениями.It must be set and updated throughout the IM client application session. Когда клиентское приложение для обмена мгновенными сообщениями выполняет вход, выход или завершает работу, оно должно задать свойство State.When the IM client application signs in, signs out, or shuts down, it should set the State property. Лучше задать это свойство в методах ILyncClient.SignIn и ILyncClient.SignOut, как показано в примере ниже.It is best to set this property within the ILyncClient.SignIn and ILyncClient.SignOut methods, as the following example demonstrates.

// This field is of a type that implements the 
// IAsynchronousOperation interface.
private IMClientAsyncOperation _asyncOperation = new IMClientAsyncOperation();
// This field is of a type that implements the ISelf interface.
private IMClientSelf _self;
public IMClientAsyncOperation SignIn(string _userUri, string _domainAndUser, 
    string _password, object _IMClientCallback, object _state)
{
    ClientState _previousClientState = this._clientState;
    this._clientState = ClientState.ucClientStateSignedIn;
    // The IMClientStateChangedEventData class implements the 
    // IClientStateChangedEventData interface.
    IMClientStateChangedEventData eventData = 
        new IMClientStateChangedEventData(_previousClientState, 
        this._clientState);
    if (_userUri != null)
    {
        // During the sign-in process, create a new contact with
        // the contact information of the currently signed-in user.
        this._self = new IMClientSelf(IMContact.BuildContact(_userUri));
    }
    // Raise the _ILyncClientEvents.OnStateChanged event.
    OnStateChanged(this, eventData as UC.ClientStateChangedEventData);
    
    return this._asyncOperation;
    }
}

В примере кода ниже показано, как задать прослушиватель событий, используя интерфейсы _ ILyncClientEvents и _ IUCOfficeIntegrationEvents.The following code example demonstrates how to set up the event listener using the _ ILyncClientEvents and _ IUCOfficeIntegrationEvents interfaces.

using Microsoft.Office.Uc;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace SampleImplementation
{
    // Note: UCOfficeIntegration inherits from both IUCOfficeIntegration and _IUCOfficeIntegrationEvents_Event
    [ClassInterface(ClassInterfaceType.None), Guid("13c41ef9-eb90-4e94-8a7c-1e9d686bc019"), ComVisible(true)]
    [ComSourceInterfaces(typeof(_IUCOfficeIntegrationEvents))]
    public class MyInstantMessengerOfficeIntegration : UCOfficeIntegration
    {
        #region IUCOfficeIntegration implementation
        public string GetAuthenticationInfo(string _version)
        {
            return "";
        }
        public object GetInterface(string _version, OIInterface _interface)
        {
            return null;
        }
        public OIFeature GetSupportedFeatures(string _version)
        {
            return OIFeature.oiFeatureAddOneNoteToConversation;
        }
        #endregion
        #region _IUCOfficeIntegrationEvents support
        // This event implements void _IUCOfficeIntegrationEvents.OnShuttingDown();
        public event _IUCOfficeIntegrationEvents_OnShuttingDownEventHandler OnShuttingDown;
        // This method is called by the IM application when it is beginning to shut down.
        // The method will raise the OnShuttingDown event which is translated by .NET COM interop layer
        // into a call to _IUCOfficeIntegrationEvents.OnShuttingDown.
        // This notifies Office applications that the IM application is going away.
        internal void RaiseOnShuttingDownEvent()
        {
            if (this.OnShuttingDown != null)
            {
                this.OnShuttingDown();
            }
        }
        #endregion
    }
    // Note: LyncClient inherits from both ILyncClient and _ILyncClientEvents_Event
    // You must implement LyncClient because the event handlers in _ILyncClientEvents expect you to pass a LyncClient interface.
    [ComVisible(true)]
    [ComSourceInterfaces(typeof(_ILyncClientEvents))]
    public class MyInstantMessengerOfficeIntegration2 :
        Client,
        Client2,
        LyncClient
    {
        #region Interfaces
        public LyncClientCapabilityTypes Capabilities
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ConferenceScheduler ConferenceScheduler
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ContactManager ContactManager
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ConversationManager ConversationManager
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public DelegatorClient[] DelegatorClients
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public DeviceManager DeviceManager
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public bool InSuppressedMode
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ContactManager PrivateContactManager
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public RoomManager RoomManager
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public Self Self
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ClientSettings Settings
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public SignInConfiguration SignInConfiguration
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ClientState State
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ClientType Type
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public string Uri
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public Utilities Utilities
        {
            get
            {
                throw new NotImplementedException();
            }
        }
        public ApplicationRegistration CreateApplicationRegistration(string _appGuid, string _appName)
        {
            throw new NotImplementedException();
        }
        public AsynchronousOperation Initialize(string _clientName, string _version = "0", string _clientShortName = "0", string _clientNameAbbreviation = "0", string _clientLongName = "0", SupportedFeatures _supportedFeatures = SupportedFeatures.ucAllFeatures, [IUnknownConstant] object _CommunicatorClientCallback = null, object _state = null)
        {
            throw new NotImplementedException();
        }
        public AsynchronousOperation Shutdown([IUnknownConstant] object _CommunicatorClientCallback, object _state)
        {
            throw new NotImplementedException();
        }
        public AsynchronousOperation SignIn(string _userUri = "0", string _domainAndUsername = "0", string _password = "0", [IUnknownConstant] object _CommunicatorClientCallback = null, object _state = null)
        {
            throw new NotImplementedException();
        }
        public AsynchronousOperation SignOut([IUnknownConstant] object _CommunicatorClientCallback, object _state)
        {
            throw new NotImplementedException();
        }
        #endregion
        #region _ILyncClientEvents support
        public event _ILyncClientEvents_OnStateChangedEventHandler OnStateChanged;
        public event _ILyncClientEvents_OnNotificationReceivedEventHandler OnNotificationReceived;
        public event _ILyncClientEvents_OnCredentialRequestedEventHandler OnCredentialRequested;
        public event _ILyncClientEvents_OnSignInDelayedEventHandler OnSignInDelayed;
        public event _ILyncClientEvents_OnCapabilitiesChangedEventHandler OnCapabilitiesChanged;
        public event _ILyncClientEvents_OnDelegatorClientAddedEventHandler OnDelegatorClientAdded;
        public event _ILyncClientEvents_OnDelegatorClientRemovedEventHandler OnDelegatorClientRemoved;
        // Notifies Office apps that the IM client state (signed out, signing in, singed in, signing out, etc) has changed.
        internal void RaiseOnStateChangedEvent(ClientStateChangedEventData eventData)
        {
            if (this.OnStateChanged != null)
            {
                this.OnStateChanged(this, eventData);
            }
        }
        // Notifies Office apps that the IM client has received a notification event from MAPI (e.g. autodiscover has finished)
        internal void RaiseOnNotificationReceivedEvent(LyncClientNotificationReceivedEventData eventData)
        {
            if (this.OnNotificationReceived != null)
            {
                this.OnNotificationReceived(this, eventData);
            }
        }
        // Notifies Office apps that the IM client has received a request for credentials for some operation (e.g. sign in, web search)
        internal void RaiseOnCredentialRequestedEvent(CredentialRequestedEventData eventData)
        {
            if (this.OnCredentialRequested != null)
            {
                this.OnCredentialRequested(this, eventData);
            }
        }
        // Notifies Office apps that the IM client has been delayed from signing in and gives an estimated delay time.
        internal void RaiseOnSignInDelayedEvent(SignInDelayedEventData eventData)
        {
            if (this.OnSignInDelayed != null)
            {
                this.OnSignInDelayed(this, eventData);
            }
        }
        // Notifies Office apps that the capabilities of this IM client have changed.
        internal void RaiseOnCapabilitiesChangedEvent(PreferredCapabilitiesChangedEventData eventData)
        {
            if (this.OnCapabilitiesChanged != null)
            {
                this.OnCapabilitiesChanged(this, eventData);
            }
        }
        // Notifies Office apps that a DelegatorClient object has been added to the IM client object.
        internal void RaiseOnDelegatorClientAdded(DelegatorClientCollectionEventData eventData)
        {
            if (this.OnDelegatorClientAdded != null)
            {
                this.OnDelegatorClientAdded(this, eventData);
            }
        }
        // Notifies Office apps that a DelegatorClient object has been removed from the IM client object.
        internal void RaiseOnDelegatorClientRemoved(DelegatorClientCollectionEventData eventData)
        {
            if (this.OnDelegatorClientRemoved != null)
            {
                this.OnDelegatorClientRemoved(this, eventData);
            }
        }
        #endregion
    }
}

Интерфейс IAutomationIAutomation interface

Интерфейс IAutomation автоматизирует функции клиентского приложения для обмена мгновенными сообщениями.The IAutomation interface automates features of the IM client application. Его можно использовать, чтобы начинать беседы, присоединяться к конференциям и указывать контекст окна расширяемости.It can be used to start conversations, join conferences, and provide extensibility window context.

В Таблице 4 показаны элементы, которые необходимо реализовать в классе, наследуемом от IAutomation.Table 4 shows the members that must be implemented in the class that inherits from IAutomation.

Примечание

Любой элемент интерфейса IAutomation, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IAutomation interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсе IAutomation и его элементах см. в статье UCCollaborationLib.IAutomation.For more information about the IAutomation interface and its members, see UCCollaborationLib.IAutomation.

Таблица 4. Реализация интерфейса IAutomationTable 4. Implementation of IAutomation interface

ЭлементMember ОписаниеDescription
Метод StartConversationStartConversation method
Начинает беседу, используя указанную модальность беседы.Starts a conversation using the specified conversation modality. Экземпляр IConversationWindow возвращается.An instance of IConversationWindow is returned.

Реализация интеграции сведений о присутствии контактаImplementing contact presence integration

Помимо трех обязательных интерфейсов, описанные ранее, существует несколько других интерфейсов, которые важны для функционального использования сведений о присутствии в Office.In addition to the three required interfaces discussed previously, there are several other interfaces that are important for enabling contact presence functionality in Office. К ним относятся:These include the following:

Интерфейс IContactIContact interface

Интерфейс IContact представляет пользователя клиентского приложения для обмена мгновенными сообщениями.The IContact interface represents an IM client application user. Интерфейс предоставляет сведения о присутствии, доступные модальности, участие в группах и свойства типа контакта определенного пользователя.The interface exposes presence, available modalities, group membership, and contact type properties for a user. Чтобы начать беседу с другим пользователем, укажите экземпляр IContact такого пользователя.To start a conversation with another user, you must provide that user instance of IContact.

В Таблице 5 показаны элементы, которые необходимо реализовать в классе, наследуемом от IContact.Table 5 shows the members that must be implemented in the class that inherits from IContact.

Примечание

Любой элемент интерфейса IContact, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IContact interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсе IContact и его элементах см. в статье UCCollaborationLib.IContact.For more information about the IContact interface and its members, see UCCollaborationLib.IContact.

Таблица 5. Реализация интерфейса IContactTable 5. Implementation of the IContact interface

ЭлементMember ОписаниеDescription
Метод CanStartCanStart method
Возвращает true, если для контакта можно запустить указанный тип модальности.Returns true if a given type of modality can be started on the contact.
Метод GetContactInformationGetContactInformation method
Получает один элемент сведений о присутствии от контакта публикации.Gets one presence item from a publishing contact.
Метод BatchGetContactInformationBatchGetContactInformation method
Получает несколько элементов сведений о присутствии от контакта публикации.Gets multiple presence items from a publishing contact.
Свойство SettingsSettings property
Получает коллекцию свойств контакта.Gets a collection of contact properties.
Свойство CustomGroupsCustomGroups property
Получает коллекцию групп, участником которых является контакт.Gets a collection of groups that the contact is a member of.

Во время процесса инициализации приложение Office вызывает метод IContact.CanStart, чтобы определить возможности обмена мгновенными сообщениями для локального пользователя.During the initialization process, the Office application calls the IContact.CanStart method to determine the IM capabilities for the local user. Метод CanStart получает отметку от перечисления UCCollaborationLib.ModalityTypes в качестве аргумента для параметра _modalityTypes.The CanStart method takes a flag from the UCCollaborationLib.ModalityTypes enumeration as an argument for the _modalityTypes parameter. Если текущий пользователь может взаимодействовать в запрашиваемой модальности (т. е. такой пользователь может обмениваться мгновенными, голосовыми и видеосообщениями или иметь общий доступ к приложениям), метод CanStart возвращает значение true.If the current user can engage in the requested modality (that is, the user is capable of instant messaging, audio and video messaging, or application sharing), the CanStart method returns true.

public bool CanStart(ModalityTypes _modalityTypes)
{
    // Define the capabilities of the current IM client application
    // user by using flags from the ModalityTypes enumeration.
    ModalityTypes userCapabilities = 
        ModalityTypes.ucModalityInstantMessage | 
        ModalityTypes.ucModalityAudioVideo | 
        ModalityTypes.ucModalityAppSharing;
    // Perform a simple test for equivalency.
    if (_modalityType == userCapabilities) 
    {
        return true;
    }
    else 
    {
        return false;
    }
}

Метод GetContactInformation получает информацию о контакте из объекта IContact.The GetContactInformation method retrieves information about the contact from the IContact object. Код вызова должен передать значение из перечисления UCCollaborationLib.ContactInformationType для параметра _contactInformationType, который обозначает получаемые данные.The calling code needs to pass in a value from the UCCollaborationLib.ContactInformationType enumeration for the _contactInformationType parameter, which indicates the data to be retrieved.

public object GetContactInformation(
    ContactInformationType _contactInformationType)
{
    // Determine the information to return from the contact's data based
    // on the value passed in for the _contactInformationType parameter.
    switch (_contactInformationType)
    {
        case ContactInformationType.ucPresenceEmailAddresses:
        {
            // Return the URI associated with the contact.
            string returnValue = this.Uri.ToLower().Replace("sip:", String.Empty);
            return returnValue;
        }
        case ContactInformationType.ucPresenceDisplayName:
        {
            // Return the display name associated with the contact.
            string returnValue = this._DisplayName;
            return returnValue;
        }
        default:
        {
            throw new NotImplementedException;
        }
        // Additional implementation details omitted.
    }
}

Также как и GetContactInformation, метод BatchGetContactInformation получает несколько элементов сведений о присутствии контакта из объекта IContact.Similar to the GetContactInformation, the BatchGetContactInformation method retrieves multiple presence items about the contact from the IContact object. Код вызова должен передать массив значений из перечисления ContactInformationType для параметра _contactInformationTypes.The calling code needs to pass in an array of values from the ContactInformationType enumeration for the _contactInformationTypes parameter. Метод возвращает объект UCCollaborationLib.IContactInformationDictionary, который содержит запрашиваемые данные.The method returns an UCCollaborationLib.IContactInformationDictionary object that contains the requested data.

public IMClientContactInformationDictionary BatchGetContactInformation(
    ContactInformationType[] _contactInformationTypes)
{
    // The IMClientContactInformationDictionary class implements the
    // IContactInformationDictionary interface.
    IMClientContactInformationDictionary contactDictionary = 
        new IMClientContactInformationDictionary();
    foreach (ContactInformationType type in _contactInformationTypes)
    {
        // Call GetContactInformation for each type of contact 
        // information to retrieve. This code adds a new entry to
        // a Dictionary object exposed by the
        // ContactInformationDictionary property.
        contactDictionary.ContactInformationDictionary.Add(
            type, this.GetContactInformation(type));
    }
    return contactDictionary;
}

Свойство IContact.Settings возвращает объект IContactSettingDictionary, который содержит настраиваемые свойства контакта.The IContact.Settings property returns an IContactSettingDictionary object that contains custom properties about the contact.

public IMClientContactSettingDictionary Settings
{
    get
    {
       // The IMClientContactSettingDictionary class implements
       // the IContactSettingDictionary interface.
       return new IMClientContactSettingDictionary();
    }
}

Свойство IContact.CustomGroups возвращает объект IGroupCollection, который включает все группы, участником которых контакт является.The IContact.CustomGroups property returns an IGroupCollection object that includes all of the groups of which the contact is a member.

public IMClientGroupCollection CustomGroups
{
    get {
       // The IMClientGroupCollection class implements
       // the IGroupCollection interface.
        return new IMClientGroupCollection();
    }
}

Интерфейс ISelfISelf interface

Во время процесса инициализации приложение Office получает данные для текущего пользователя, выполняя доступ к свойству ILyncClient.Self, которое должно возвращать объект ISelf.During the initialization process, the Office application gets the data for the current user by accessing the ILyncClient.Self property, which must return an ISelf object. Интерфейс ISelf представляет локального пользователя, выполнившего вход в клиентское приложение для обмена мгновенными сообщениями.The ISelf interface represents the local, signed-in IM client application user.

В Таблице 6 показаны элементы, которые необходимо реализовать в классе, наследуемом от ISelf.Table 6 shows the members that must be implemented in the class that inherits from ISelf.

Примечание

Любой элемент интерфейса ISelf, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the ISelf interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Таблица 6. Реализация интерфейса ISelfTable 6. Implementation of the ISelf interface

ЭлементMember ОписаниеDescription
Свойство ContactContact property
Получает объект IContact, связанный с локальным пользователем.Gets the IContact object associated with the local user.

Сведения о присутствии, доступные модальности, участие в группах и свойства типа контакта для локального пользователя представлены через свойство ISelf.Contact (которое возвращает объект IContact).Presence, available modalities, group membership, and contact type properties for the local user are exposed through the ISelf.Contact property (which returns an IContact object). Во время процесса инициализации приложение Office выполняет доступ к свойству ISelf.Contact для получения ссылки на контактные данные для локального пользователя.During the initialization process, the Office application accesses the ISelf.Contact property to get a reference to the contact information for the local user.

Используйте следующий код для определения класса, наследуемого от интерфейса ISelf, который реализует свойство Contact.Use the following code to define a class that inherits from the ISelf interface that implements the Contact property.

[ComVisible(true)]
public class IMClientSelf : ISelf
{
    // Declare a private field to store contact data for local user.
    private IMClientContact _contactData;
    // In the constructor for the ISelf object, the calling code 
    // must supply contact data.
    public IMClientSelf (IMClientContact _selfContactData)
    {
        this._contactData = _selfContactData;
    }
    // When accessed, the Contact property returns a reference
    // to the IContact object that represents the local user.
    public IMClientContact Contact
    {
        get
        {
            return this._contactData as IMClientContact;
        }
    }
    // Additional implementation details omitted.
}

Интерфейсы IContactManager и _IContactManagerEventsIContactManager and _IContactManagerEvents interfaces

Объект IContactManager управляет контактами локального пользователя, включая собственные контактные данные локального пользователя.The IContactManager object manages the contacts for the local user, including the local user's own contact information. Приложение Office использует объект IContactManager для доступа к объектам IContact, которые соответствуют контактам локального пользователя.The Office application uses an IContactManager object to access IContact objects that correspond to the local user's contacts.

В Таблице 7 показаны элементы, которые необходимо реализовать в классе, наследуемом от IContactManager и _IContactManagerEvents.Table 7 shows the members that must be implemented in the class that inherits from IContactManager and _IContactManagerEvents.

Примечание

Любой элемент интерфейса IContactManager, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IContactManager interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсах IContactManager и _IContactManagerEvents, а также их элементах см. в статье UCCollaborationLib.IContactManager и UCCollaborationLib._IContactManagerEvents.For more information about the IContactManager and _IContactManagerEvents interfaces and their members, see UCCollaborationLib.IContactManager and UCCollaborationLib._IContactManagerEvents.

Таблица 7. Реализация интерфейсов IContactManager и _IContactManagerEventsTable 7. Implementation of the IContactManager and _IContactManagerEvents interfaces

ИнтерфейсInterface ЭлементMember ОписаниеDescription
IContactManagerIContactManager
Метод GetContactByUriGetContactByUri method
Находит или создает новый экземпляр контакта, используя URI контакта.Finds or creates a new contact instance by using the contact URI.
Метод CreateSubscriptionCreateSubscription method
Создает объект ISubscription, который можно использовать для пакетной обработки подписок или запросов.Creates an ISubscription object that can be used for batching subscriptions or queries.
Метод LookupLookup method
Ищет контакт или группу рассылки.Looks up a contact or distribution group.
_IContactManagerEvents_IContactManagerEvents
Событие OnGroupAddedOnGroupAdded event
Создается, когда группа добавляется в коллекцию групп.Raised when a group is added to a group collection. Обновленную коллекцию групп можно получить из свойства IContactManager.Groups.The updated group collection can be obtained from the IContactManager.Groups property.
Событие OnGroupRemovedOnGroupRemoved event
Создается, когда группа удаляется из коллекции групп.Raised when a group is removed from a group collection. Обновленную коллекцию групп можно получить из свойства IContactManager.Groups.The updated group collection can be obtained from the IContactManager.Groups property.
Событие OnSearchProviderStateChangedOnSearchProviderStateChanged event
Создается, когда изменяется статус поставщика поиска.Raised when a search provider's status changes.

Office вызывает IContactManager.GetContactByUri, чтобы получить сведения контакта о присутствии, используя адрес SIP контакта.Office calls IContactManager.GetContactByUri to get a contact's presence information, by using the SIP address of the contact. Когда контакт сконфигурирован для SIP-адреса в Active Directory, Office определяет такой адрес для контакта и вызывает GetContactByUri, передавая SIP-адрес контакта для параметра _contactUri.When a contact is configured for an SIP address in the Active Directory, Office determines this address for a contact and calls GetContactByUri, passing the SIP address of the contact in for the _contactUri parameter.

Если приложению Office не удается определить SIP-адрес для контакта, оно вызывает метод IContactManager.Lookup, чтобы найти SIP, используя службу обмена мгновенными сообщениями.When Office cannot determine the SIP address for the contact, it calls the IContactManager.Lookup method to find the SIP by using the IM service. Здесь Office передает оптимальные данные, которые удается найти для контакта (например, только адрес электронной почты для контакта).Here Office passes in the best data that it can find for the contact (for example, just the email address for the contact). Метод Lookup асинхронно возвращает объект AsynchronousOperation.The Lookup method asynchronously returns an AsynchronousOperation object. Когда он инициирует обратный вызов, метод Lookup должен вернуть сведения об успешном или неудачном выполнении операции, помимо URI контакта.When it invokes the callback, the Lookup method should return the success or failure of the operation in addition to the URI of the contact.

public IMClientContact GetContactByUri(string _contactUri)
{
    // Declare a Contact variable to contain information about the contact.
    IMClientContact tempContact = null;
    // The _groupCollections field is an IGroupCollection object. Iterate 
    // over each group in collection to see if the 
    // contact is a part of the group.
    foreach (IMClientGroup group in this._groupCollections)
    {
       if (group.TryGetContact(_contactUri, out tempContact))
       {
           break;
       }
    }
    // Check to see that the URI returned a valid contact. If it
    // did not, create a new contact.
    if (tempContact == null)
    {
        tempContact = IMClientContact.BuildContact(_contactUri);
    }
    // Return the contact to the calling code.
    return tempContact;
}

Приложению Office необходимо подписаться на изменения сведений о присутствии для отдельного контакта.The Office application needs to subscribe to presence changes for an individual contact. Таким образом, когда изменяется состояние сведений о присутствии контакта, сервер обмена мгновенными сообщениями оповещает клиентское приложение для обмена мгновенными сообщениями, тем самым оповещая приложение Office.Thus, when a contact's presence status changes, the IM server alerts the IM client application—thereby alerting the Office application. Для этого приложение Office вызывает метод IContactManager.CreateSubscription, чтобы создать новый объект IContactSubscription для этого запроса.To do this, the Office application calls the IContactManager.CreateSubscription method to create a new IContactSubscription object for this request.

// Declare a private field to contain an IContactSubscription object.
private IMClientContactSubscription _contactSubscription;
// Return the IContactSubscription object associated 
// with the IContactManager object.
public IMClientContactSubscription CreateSubscription()
{
    return this._contactSubscription;
}

Интерфейсы IGroup и IGroupCollectionIGroup and IGroupCollection interfaces

Объект IGroup представляет коллекцию контактов с дополнительными свойствами для определения коллекции контактов по имени группы.The IGroup object represents a collection of contacts with additional properties for identifying the contact collection by a collective group name. Объект IGroupCollection представляет коллекцию объектов IGroup, определенную локальным пользователем и клиентским приложением для обмена мгновенными сообщениями.An IGroupCollection object represents a collection of IGroup objects defined by a local user and the IM client application. Приложение Office использует объекты IGroupCollection и IGroup, чтобы получить доступ к контактам локального пользователя.The Office application uses the IGroupCollection and IGroup objects to access the local user's contacts.

В Таблице 9 показаны элементы, которые должны быть реализованы в классах, наследуемых от IGroup и IGroupCollection в приведенной ниже таблице.Table 9 shows the members that must be implemented in the classes that inherit from IGroup and IGroupCollection in the following table.

Примечание

Любой элемент интерфейса IGroup, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IGroup interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсах IGroup и IGroupCollection, а также их элементах см. в статье UCCollaborationLib.IGroup и UCCollaborationLib.IGroupCollection.For more information about the IGroup and IGroupCollection interfaces and their members, see UCCollaborationLib.IGroup and UCCollaborationLib.IGroupCollection.

Таблица 9. Реализация интерфейсов IGroup и IGroupCollectionTable 9. Implementation of the IGroup and IGroupCollection interfaces

ИнтерфейсInterface ЭлементMember ОписаниеDescription
IGroupCollectionIGroupCollection
Свойство CountCount property
Возвращает количество объектов IGroup в коллекцииReturns the count of IGroup objects in the collection
Свойство ItemItem property
Возвращает объект IGroup в указанном индексе в коллекции.Returns the IGroup object at the specified index in the collection.
IGroupIGroup
Свойство IdId property
Возвращает идентификатор группы.Returns the ID of the group.

Когда приложение Office получает сведения для локального пользователя, оно выполняет доступ к участию в группах контакта (локальный пользователь), вызывая свойство IContact.CustomGroups, которое возвращает объект IGroupCollection.When the Office application gets the information for the local user, it accesses the group memberships of the contact (local user) by calling the IContact.CustomGroups property, which returns an IGroupCollection object. Интерфейс IGroupCollection должен содержать массив (или List) объектов IGroup.The IGroupCollection must contain an array (or List) of IGroup objects. Класс, который является производным от IGroupCollection, должен отображать свойство Count, которое возвращает количество элементов в коллекции, и метод индексатора, this(int), который возвращает объект IGroup из коллекции.The class that derives from IGroupCollection must expose a Count property, which returns the number of items in the collection, and an indexer method, this(int), which returns an IGroup object from the collection.

Интерфейс IContactSubscriptionIContactSubscription interface

Интерфейс IContactSubscription позволяет вам указать контакты для получения обновлений сведений о присутствии и типы сведений о присутствии, которые инициируют уведомление.The IContactSubscription interface allows you to specify the contacts to receive presence information updates for and the types of presence information that trigger a notification. Приложения Office используют объект IContactSubscription для регистрации изменений состояния присутствия контакта.Office applications use an IContactSubscription object to register changes to contact's presence status.

В Таблице 10 показаны элементы, которые необходимо реализовать в классах, наследуемых от IContactSubscription.Table 10 shows the members that must be implemented in the classes that inherit from IContactSubscription.

Примечание

Любой элемент интерфейса IContactSubscription, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IContactSubscription interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсе IContactSubscription и его элементах см. в статье UCCollaborationLib.IContactSubscription.For more information about the IContactSubscription interface and its members, see UCCollaborationLib.IContactSubscription.

Таблица 10. Реализация интерфейса IContactSubscriptionTable 10. Implementation of the IContactSubscription interface

ЭлементMember ОписаниеDescription
Метод AddContactAddContact method
Добавляет контакт в объект подписки.Adds a contact to the subscription object.
Метод SubscribeSubscribe method
Помогает клиентскому приложению для обмена мгновенными сообщениями отслеживать сведения о присутствии контакта.Helps the IM client application to monitor presence for a contact.

Интерфейс IContactSubscription должен содержать ссылку на все объекты IContact, которые он отслеживает, используя массив или List.The IContactSubscription interface must contain a reference to all the IContact objects that it monitors, using an array or a List. Метод IContactSubscription.AddContact добавляет объект IContact к базовой структуре данных объекта IContactSubscription, добавляя, таким образом, новый контакт для отслеживания изменений сведений о присутствии.The IContactSubscription.AddContact method adds an IContact object for the to the underlying data structure of the IContactSubscription object, thereby adding a new contact to monitor for presence changes.

// Store references to all of the IContact objects to subscribe to.
private List<IMClientContact> _subscribedContacts;
// Add a new IContact object to the collection of contacts.
public void AddContact(IMClientContact _contact)
{
    this._subscribedContacts.Add(_contact);
}

Метод IContactSubscription.Subscribe позволяет клиентскому приложению для обмена мгновенными сообщениями выполнять доступ к наблюдателям присутствия контакта.The IContactSubscription.Subscribe method allows an IM client application to access presence observers for the contact. Он может использовать стратегию опроса для получения сведений о присутствии от сервера для контактов, на которые подписано клиентское приложение для обмена мгновенными сообщениями.It can use a polling strategy to get the presence from the server for the contacts for that the IM client application has subscribed to. Метод Subscribe полезен в ситуациях, когда сведения о присутствии запрашиваются для кого-либо, кто отсутствует в списке контактов пользователя (например, из большой общедоступной сети).The Subscribe method is helpful in situations where presence is requested for someone outside of a user's contact list (for example, from a larger public network).

Интерфейс IContactEndPointIContactEndPoint interface

IContactEndPoint представляет номер телефона из коллекции телефонных номеров контакта.The IContactEndPoint represents a telephone number from a contact's collection of telephone numbers.

В Таблице 11 показаны элементы, которые необходимо реализовать в классах, наследуемых от IContactEndPoint.Table 11 shows the members that must be implemented in the classes that inherit from IContactEndPoint.

Примечание

Любой элемент интерфейса IContactEndPoint, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the IContactEndPoint interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсе IContactEndPoint и его элементах см. в статье UCCollaborationLib.IContactEndpoint.For more information about the IContactEndPoint interface and its members, see UCCollaborationLib.IContactEndpoint.

Таблица 11. Реализация интерфейса IContactEndPointTable 11. Implementation of the IContactEndPoint interface

ЭлементMember ОписаниеDescription
Свойство DisplayNameDisplayName property
Получает отображаемую строку.Gets the display string.
Свойство TypeType property
Получает тип конечной точки контактаGets the contact endpoint type
Свойство UriUri property
Получает URI контакта.Gets the contact URI.

Интерфейс ILocaleStringILocaleString interface

ILocaleString — это структура локализованной строки, которая содержит локализованную строку и код языка локализации.The ILocaleString is a localized string structure that contains both a localized string and the locale ID of the localization. Интерфейс ILocaleString используется для форматирования строки настраиваемого статуса в карточке контакта.The ILocaleString interface is used to format the custom status string on the contact card.

В Таблице 12 показаны элементы, которые необходимо реализовать в классах, наследуемых от ILocaleString.Table 12 shows the members that must be implemented in the classes that inherit from ILocaleString.

Примечание

Любой элемент интерфейса ILocaleString, не указанный в таблице, должен иметься в наличии, но не обязательно должен быть реализован.Any member of the ILocaleString interface not listed in the table must be present but does not need to be implemented. Элементы, которые имеются в наличии, но не были реализованы, могут привести к возникновению ошибки NotImplementedException или E_NOTIMPL.Members that are present but not implemented can throw a NotImplementedException or E_NOTIMPL error.

Дополнительные сведения об интерфейсе ILocalString и его элементах см. в статье UCCollaborationLib.ILocaleString.For more information about the ILocalString interface and its members, see UCCollaborationLib.ILocaleString.

Таблица 12. Реализация интерфейса ILocaleStringTable 12. Implementation of the ILocaleString interface

ЭлементMember ОписаниеDescription
Свойство LocaleIdLocaleId property
Получает код языка.Gets the locale ID.
Свойство ValueValue property
Получает строку.Gets the string.

См. такжеSee also