2014-04-04 3 views
1

Мне нужно получить прямые отчеты от зарегистрированного пользователя (MVC 4) Мне не нужны имена прямых отчетов, но мне нужны их адреса электронной почты, включая их прокси-сервер адреса. Поэтому по этой причине мне нужно выполнить поиск через Exchange. Я лично никогда не пытался искать Exchange в прошлом, и все, что я узнал, говорит мне, как перейти от шага 8 к финишной линии, но ничего не говорит о том, как перейти с шага 1 до 8.Получить прямые отчеты от пользователя с помощью Exchange

Я могу получить текущие пользователи имя пользователя просто

User.Identity.Name.Replace(@"yourdomain\", "") 

, и я нашел этот пример, который до сих пор, вероятно, лучший пример, который я нашел http://msdn.microsoft.com/en-us/library/office/ff184617(v=office.15).aspx

, но даже с этим примером линии

Outlook.AddressEntry currentUser = 
    Application.Session.CurrentUser.AddressEntry; 

фактически не получает текущего пользователя, зарегистрированного на сайте.

Я действительно надеюсь, что кто-то там знаком с этим и может заставить меня пройти мимо этого момента.

ответ

2

Я переработал образец из URL как следующий запрос LINQPad 4. Я обнаружил, что LINQPad - отличный способ экспериментировать, потому что он очень скриптен, позволяет быстро экспериментировать, и вы можете легко просматривать данные с помощью метода расширения Dump(). Приобретение поддержки intellisense вполне оправдано.

Кроме того, я заметил, есть много мелкий шрифт, как:

Вошедший пользователь должен быть онлайн для этого метода, чтобы вернуть коллекцию AddressEntries; в противном случае GetDirectReports возвращает нулевую ссылку. Для производственного кода вы должны проверить, чтобы пользователь находился в автономном режиме, используя свойство _NameSpace.ExchangeConnectionMode или свойство _Account.ExchangeConnectionMode для нескольких сценариев Exchange.

и

Если текущий пользователь имеет менеджер, GetDirectReports() называются вернуть коллекцию AddressEntries, которая представляет запись адреса для всех прямых докладов менеджера пользователя. Если менеджер не имеет прямых отчетов, GetDirectReports возвращает коллекцию AddressEntries, которая имеет счет нуля.

Таким образом, существует множество предположений, например, что Exchange настроен правильно с отношениями прямого отчета, и текущий пользователь находится в сети ... который, я считаю, приносит Lync в уравнение. Надеюсь, этот запрос LINQPad будет вам полезен. Просто скопируйте и вставьте его в текстовый редактор и назовите его с расширением .linq. Затем вы сможете открыть его в LINQPad 4. BTW: вы меня привлекли к себе внимание, потому что недавно я говорил о моей работе по вытягиванию прямых отчетов из Active Directory. Хотел бы я быть более полезным ... удачи.

<Query Kind="Program"> 
    <Reference>&lt;ProgramFilesX86&gt;\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Outlook.dll</Reference> 
    <Reference>&lt;ProgramFilesX86&gt;\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.OutlookViewCtl.dll</Reference> 
    <Namespace>Microsoft.Office.Interop.Outlook</Namespace> 
</Query> 

void Main() 
{ 
    GetManagerDirectReports(); 
} 

// Define other methods and classes here 
private void GetManagerDirectReports() 
{ 
    var app = new Microsoft.Office.Interop.Outlook.Application(); 
    AddressEntry currentUser = app.Session.CurrentUser.AddressEntry; 
    if (currentUser.Type == "EX") 
    { 
     ExchangeUser manager = currentUser.GetExchangeUser().GetExchangeUserManager(); 
     manager.Dump(); 
     if (manager != null) 
     { 
      AddressEntries addrEntries = manager.GetDirectReports(); 
      if (addrEntries != null) 
      { 
       foreach (AddressEntry addrEntry in addrEntries) 
       { 
        ExchangeUser exchUser = addrEntry.GetExchangeUser(); 
        StringBuilder sb = new StringBuilder(); 
        sb.AppendLine("Name: " + exchUser.Name); 
        sb.AppendLine("Title: " + exchUser.JobTitle); 
        sb.AppendLine("Department: " + exchUser.Department); 
        sb.AppendLine("Location: " + exchUser.OfficeLocation); 
        sb.Dump(); 
       } 
      } 
     } 
    } 
} 
0

Я бы предложил использовать управляемый API EWS совместно с вашим кодом, чтобы получить прямые отчеты для пользователя. Как Джереми упомянул в своем ответе, что вам нужно настроить ваши прямые отношения с отчетами.Чтобы помочь вам начать работу, вот некоторые шаги, чтобы получить EWS Managed API и работает:

  1. Download the latest version of EWS Managed API
  2. Get started with EWS Managed API client applications, чтобы узнать о том, как сослаться на сборку, установите URL службы, а также общаться с EWS.
  3. Начните работать с кодом. Если вам нужен какой-то действующий код для вас, посмотрите Exchange 2013 101 Code Samples, у которого уже есть код аутентификации, и несколько примеров, которые вы можете изменить, чтобы сделать свой собственный.
  4. Если у вас есть адрес электронной почты или имя пользователя текущего пользователя, вы можете использовать метод ResolveName(), чтобы добраться до своего почтового ящика, чтобы получить дополнительную информацию. Вот статья, чтобы помочь с этим методом: How to: Resolve ambiguous names by using EWS in Exchange 2013

По сути вы хотите, чтобы добраться до точки, где вы можете запустить команду, подобную этой:

NameResolutionCollection coll = service.ResolveName(NameToResolve, ResolveNameSearchLocation.DirectoryOnly, true, new PropertySet(BasePropertySet.FirstClassProperties)); 

Если вы даете достаточно уникальное значение в параметр NameToResolve вы должны вернуть только один элемент в коллекции. При этом вы можете посмотреть коллекцию прямых отчетов внутри этого одного элемента и посмотреть не только имена их прямых отчетов, но и их адреса электронной почты.

Надеюсь, эта информация поможет. Если это решит вашу проблему, отметьте сообщение как ответ.

Спасибо,

--- Боб ---

 Смежные вопросы

  • Нет связанных вопросов^_^