如何使用Java EWS API搜索iCalUid的Exchange约会?

我正在使用Java EWS library在iCalUid中搜索用户日历中的约会(示例iCalUid我有:040000008200E00074C5B7101A82E00800000000F66E2C0D59A9D001000000000000000010000000F7A6AACB779B00429164F39AE6DD6BB9).这是我的Scala代码

import microsoft.exchange.webservices.data._

import java.net.URI
import java.util.Date

val exchange = {
  val service = new ExchangeService(ExchangeVersion.Exchange2010_SP2)
  service.setUrl(new URI(host))
  service.setCredentials(new WebCredentials(user, pass))
  service
}

def calendarFolderFor(email: String) = new FolderId(WellKNownFolderName.Calendar, MailBox.getMailBoxFromString(email))

def findMatchingAppointments(iCalUid: String, email: String) = {
  val searchFilter = new SearchFilter.IsEqualTo(AppointmentSchema.ICalUid, iCalUid)
  exchange.findItems(calendarFolderFor(email), searchFilter, new ItemView(1)).getItems
}

上面的代码抛出了这个错误

microsoft.exchange.webservices.data.ServiceResponseException: The property can not be used with this type of restriction.
  at microsoft.exchange.webservices.data.ServiceResponse.internalThrowIfNecessary(ServiceResponse.java:262) ~[ews-java-api-1.3-SNAPSHOT.jar:na]
  at microsoft.exchange.webservices.data.ServiceResponse.throwIfNecessary(ServiceResponse.java:251) ~[ews-java-api-1.3-SNAPSHOT.jar:na]
  at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:146) ~[ews-java-api-1.3-SNAPSHOT.jar:na]
  at microsoft.exchange.webservices.data.ExchangeService.findItems(ExchangeService.java:807) ~[ews-java-api-1.3-SNAPSHOT.jar:na]
  at microsoft.exchange.webservices.data.ExchangeService.findItems(ExchangeService.java:851) ~[ews-java-api-1.3-SNAPSHOT.jar:na]

然后我尝试调整this thread代码

def findMatchingAppointments(iCalUid: String, email: String) = {
  import org.apache.commons.codec.binary.{Hex, Base64}
  val searchFilter = new SearchFilter.IsEqualTo(
    new ExtendedPropertyDeFinition(DefaultExtendedPropertySet.Appointment, 0x03, MapiPropertyType.Binary),
    Base64.encodeBase64String(Hex.decodeHex(iCalUid.tochararray))
  )
  val view = new ItemView(1)
  view.setPropertySet(new PropertySet(BasePropertySet.FirstClassproperties, AppointmentSchema.ICalUid))        
  exchange.findItems(calendarFolderFor(email), searchFilter, view).getItems
}

但是,现在它不会抛出异常,但它也没有找到约会.我知道约会存在是因为我强迫并​​使用这段代码找到约会:

def bruteForceFind(start: Date, end: Date, iCalUid: String, email: String) = {
  val view = new CalendarView(start, end, 100)
  exchange.findAppointments(calendarFolderFor(email), view).getItems
  val allAppointments = exchange.findAppointments(calendarFolderFor(email), view).getItems
  allAppointments.filter(_.getICalUid == iCalUid)
}

我究竟做错了什么?如何在给定iCalUid的情况下搜索用户的约会?使用Java / Scala代码也没问题.

解决方法:

显然,会议和约会之间存在差异.替换此行:

new ExtendedPropertyDeFinition(DefaultExtendedPropertySet.Appointment, 0x03, MapiPropertyType.Binary),

new ExtendedPropertyDeFinition(DefaultExtendedPropertySet.Meeting, 0x03, MapiPropertyType.Binary)

作品.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...