EWS API:检索/更新Exchange约会

时间:2014-07-07 18:51:30

标签: exchangewebservices

我收到以下错误消息;

我的格式不正确。

CD0000008B9511D182D800C04FB1625DBA75FAB1A56555459257CE195FAEBE39

ID来自我在日历中创建提醒时保存ID的表格。

CF9和Exchange 2013:

<cfobject type="Java" class="microsoft.exchange.webservices.data.Appointment" name="appointment">
<cfobject type="Java" class="microsoft.exchange.webservices.data.AppointmentSchema" name="appointmentschema">
<cfset appointment.init( service )>
<cfobject type="Java" class="microsoft.exchange.webservices.data.PropertySet" name="propertyset">
<cfset propertyset.init()>
<cfobject type="Java" class="microsoft.exchange.webservices.data.ItemId" name="thisitemid">
<cfset thisitemid.init("#arguments.ExchangeID#")>
<cfset appointment = appointment.Bind(service, thisitemid) />
<cfscript>
    appointment.setStart(#StartDate#);
    appointment.setEnd(#EndDate#);
    appointment.setSubject("#Arguments.EventName#");
    appointment.setBody(MessageBody.getMessageBodyFromText("#Arguments.EventDescription#"));
    appointment.Update(ConflictResolutionMode.AlwaysOverwrite);
</cfscript>

编辑: 以下代码是我今天用来创建约会的代码。但是,我还没弄清楚如何返回约会的正确“ID”,以便我可以保存,以防需要删除或更新约会。

    <cfobject type="Java" class="microsoft.exchange.webservices.data.ExchangeService" name="service">
    <cfset service.init()>
    <cfobject type="Java" class="microsoft.exchange.webservices.data.ExchangeVersion" name="version">
    <cfset service.init(version.Exchange2010)>
    <cfobject type="Java" class="microsoft.exchange.webservices.data.WebCredentials" name="credentials">
    <cfset credentials.init("#Arguments.EmailAddress#","#Arguments.Pword#")>
    <cfset service.setCredentials(credentials) />
    <cfobject type="Java" class="java.net.URI" name="uri">
    <cfset uri.init("https://south.exch999.serverdata.net/EWS/Exchange.asmx?wsdl")>
    <cfset service.setUrl(uri) />
<cfoutput>
    <cfobject type="Java" class="microsoft.exchange.webservices.data.Appointment" name="appointment">
    <cfset appointment.init( service )>
    <cfobject type="Java" class="microsoft.exchange.webservices.data.MessageBody" name="MessageBody">
    <cfscript>
    appointment.setStart(#createDateTime(Year(Arguments.EventStartDateTime),       Month(Arguments.EventStartDateTime),Day(Arguments.EventStartDateTime), evaluate(Hour(Arguments.EventStartDateTime)), Minute(Arguments.EventStartDateTime), 0)#);
    appointment.setEnd(#createDateTime(Year(Arguments.EventEndDateTime), Month(Arguments.EventEndDateTime),Day(Arguments.EventEndDateTime), evaluate(Hour(Arguments.EventEndDateTime)), Minute(Arguments.EventEndDateTime), 0)#);
    appointment.setSubject("#Arguments.EventName#");                        appointment.setBody(MessageBody.getMessageBodyFromText("#Arguments.EventDescription#"));
    appointment.Save();
    TheEventID = appointment.Id.UniqueId;
    </cfscript>

我应该检索哪些属性来保存可用于稍后检索约会的ID?

1 个答案:

答案 0 :(得分:0)

看起来太短暂不能成为ItemId。我认为您可能已经从约会中保存了全局唯一ID或ICalUID,或者可能通过ConvertId调用可以转换的其他ID。

哎呀,抱歉,如果这是你看到的实际ID,那么它肯定不是全球唯一ID。该属性由特定GUID预先设置,该GUID与您显示的内容不匹配。

如果那不是完整的字符串,并且您从表中提取的ID更长,那么您可能只需要在实例化ItemId之前将其转换为Base64字符串。你有什么进一步的信息&#34; theUID&#34;一旦它被保存,它是否或如何从约会中检索出来?

如果没有,那么我不确定你在看什么。它似乎与我所知道的Exchange中的任何特定属性无关。您可以尝试使用ConvertId将它们转换为其他Id类型,看看是否有任何问题(您可能必须先在该十六进制上进行Base64转换)。这可能是OWA ID,但我还没有直接与他们合作。

如果你正在寻找一个Id,那么Appointment.ItemId.UniqueId会起作用(可以从UniqueId字符串中实例化一个新的ItemId),但要注意它不是一个不可变属性,可以通过如果将约会移动到另一个文件夹,或者假设已安装Service Pack或已经过了足够的时间,则进行Exchange。它应该只在短期内使用。您可以使用全局唯一ID,但是一旦保存约会,您必须将其显式加载为扩展属性。但是,全局唯一ID需要FindItems操作才能根据它检索项目,并且它没有被编入索引,因此如果您有大文件夹和频繁搜索,性能可能不会那么好。您可以尝试两者的组合:Appointment.Bind与ItemId和全局唯一ID上的双重检查以确保它是正确的,或者回退它并搜索无法找到约会。或者,您可以使用自己的ID而不是全局唯一ID。

此外,如果您要使用全局唯一标识,请注意清洁全局唯一标识以及如果您计划使用它们,它们与重现的关系。