通过ICalUid获取Exchange约会?

10

所以我正在使用给定的ICalUid创建Exchange(2007)约会:

var app = new Appointment(svc);
app.ICalUid = id;
app.Subject = "Test Appointment";
app.Recurrence = new Recurrence.DailyPattern(DateTime.Now, 3);
app.RequiredAttendees.Add("mstum@example.com");
app.AllowNewTimeProposal = false;
app.Body = new MessageBody(BodyType.HTML, "This is a <b>Test!</b>");
app.Save();

之后,我想通过ICalUid找到该约会并进行更新。

但是,似乎没有办法做到这一点?我只能使用Appointment.Bind来绑定Exchange ID,而在更新时我没有Exchange ID(存储它非常不切实际)。

我可以创建一个具有相同ICalUid的新约会,它似乎像更新一样运行,但要求再次接受/拒绝,而不仅仅是显示“不需要更新”。

是否有任何适当的方法来解决这个问题?

3个回答

8
您可以使用ExchangeService.FindItems来搜索带有ICalUidAppointment - 请参见下面的示例。请注意,它无法找到重复预约的问题。
请参见: 很遗憾您没有使用Exchange 2010,因为EWS Managed API 1.1.5中有一个getICalUID()
以下是其他一些可能使您获得更满意解决方案的链接。

谢谢,但似乎还是找不到,即使我删除了重复项 :( ICalUid 应该以什么格式呈现?我之前一直使用 Guid,但在 GetObjectIdStringFromUid 方法中会抛出异常。使用像 012345 这样的十六进制字符串不会引发异常,但也无法找到约会。 - Michael Stum
我认为你必须将其编码为Base64——在其中一个链接中提到了这一点。http://social.technet.microsoft.com/Forums/en/exchangesvrdevelopment/thread/a9148747-b51c-4b86-b942-27c1e87f4440 - Colin Smith
这也不行 :( 通过 OutlookSpy 查看,我也找不到任何字段中的 iCalUid,但这并不意味着什么。尽管如此,Exchange 似乎无法找到它。 - Michael Stum
能否展示一下更详细的示例代码?例如,展示一下你的ID是什么样子的...你是每次都动态生成唯一的GUID吗?你使用包含破折号的GUID字符串吗?还是去掉了它们?也许在创建约会时你应该只指定ID的十六进制代码,例如000C020304等。最后,看看这个...http://d-push.sourcearchive.com/documentation/1.5.3-1/utils_8php_source.html...可能会提供一些线索。 - Colin Smith
这里有一个替代示例,正在执行FindItems操作。http://archive.cnblogs.com/a/2173625/ - Colin Smith
还有一个最后的链接:http://www.infini-tec.de/post/2009/04/13/Searching-a-meeting-with-a-specific-UID-using-Exchange-Web-Services-2007.aspx - Colin Smith

3

似乎没有任何方法可以指定 iCal UID(或其他任何内容)的过滤器。 - Michael Stum
是的,似乎唯一可用的搜索方法是按日期范围。当您需要进行更新时,您有关于约会的什么上下文信息?您能否通过日期进行搜索,然后迭代结果直到找到您的ID?我知道这不是很好。 - zeFrenchy

1

看起来2007年根本没有任何方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接