【问题标题】:EWS API: retrieve/update an Exchange appointmentEWS API:检索/更新 Exchange 约会
【发布时间】:2014-07-10 22:02:37
【问题描述】:

我收到以下错误消息;

ID 格式错误。

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?

【问题讨论】:

  • 我不明白 propertydefinition 在我在上面编辑的代码中设置的方案中是如何发挥作用的。
  • 我将 id 保存为 TheEventID =ointment.Id.UniqueId;但是当我尝试绑定约会以更新它时,我收到消息:在商店中找不到指定的对象。
  • 这种情况是在保存 ID 后直接发生还是仅在更旧的条目中发生?当它进入数据库时​​,您是否将其转换为十六进制,并在从中创建新的 ItemId 时将其转换回 Base64?您发布的示例是实际的 UniqueId 字符串吗?如果是这样,那就太短了。
  • 我刚刚创建了活动并检查了我的数据库。它是一个完全不同的字符串(更长),而不是十六进制。我尝试修改事件并得到错误“未找到”。
  • AAMkADQyMGJhNjE0LTQzZjktNDRiMy05M2M4LWE0NTQxYzA5NWFhMABGAAAAAAD9wuji3kHlSpmR1oSZiZu0BwAnkNsBQ//TS7en1/EP1+R1AAAAAAEOAAAnkNsBQ//TS7en1/EP1+R1AAAuXUsjpan>

标签: exchangewebservices


【解决方案1】:

这看起来太短而不能成为 ItemId。我认为您可能已经从 Appointment 中保存了 Global Unique Id 或 ICalUID,或者可能是可以通过 ConvertId 调用转换的其他 Id。

糟糕,抱歉,如果这是您看到的实际 ID,那么它肯定不是全局唯一 ID。该属性前面有一个与您显示的内容不匹配的特定 GUID。

如果这不是完整的字符串,并且您从表中提取的 ID 较长,那么您可能只需在实例化 ItemId 之前将其转换为 Base64 字符串。关于“theUID”到底是什么,或者保存后如何从约会中检索它,您是否有任何进一步的信息?

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

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

此外,如果您打算使用全局唯一 ID,请注意干净的全局唯一 ID,以及如果您打算使用它们,它们与重复发生的关系。

【讨论】:

  • 我继承了这个项目,我只能告诉你这个 ID 是使用 Exchange 2007(我们现在是 2013)和 Coldfusion 9 标签创建的; 和UID 保存到 SQL 表列 varchar(max)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
相关资源
最近更新 更多