使用EWS在Exchange日历中获取Google事件



要通过ICalUId从Exchange日历中获取事件,可以使用FindItem操作,使用UId base64-encoded作为由DistinguishedPropertySetId=Meeting,PropertyId=3,PropertyType=Binary。

这对于在Exchange日历中创建的事件非常有效,其中ICalUIds如下所示:040000008200E00074C5B7101A82E00800000000A7C552582821D1010000000000000000100000002550ED442EB2CF4287FD94D10A4F331D

但是,当尝试使用Google Calendar UId获取事件时,这是不起作用的,它看起来如下所示:tp90m1srk847n1oa4jtp9ofou0@google.com

遗憾的是,在@google.com工作之前甚至没有使用子字符串。

有没有办法用EWS在Exchange日历中获取谷歌事件?

在这种情况下,GlobalObjectId是使用中定义的公式从UID生成的https://msdn.microsoft.com/en-us/library/ee157690(v=exchg.80).aspx。因此,如果您只有UID,则需要生成GlobalObjectId以使用自己的算法进行搜索。例如

        String UId = "k5abv4oduaidu8knel4088iq8c@google.com";
        String Header = "040000008200E00074C5B7101A82E008";
        String Padding = "0000000000000000000000000000000000000000";
        String Prefix = "7643616C2D55696401000000";
        String DataString = Prefix + BitConverter.ToString(ASCIIEncoding.ASCII.GetBytes(UId)).Replace("-", "") + "00";
        String BigEndianlength = (DataString.Length / 2).ToString("X8");
        String LittleEndianlength = BigEndianlength.Substring(6, 2) + BigEndianlength.Substring(4, 2) + BigEndianlength.Substring(2, 2) + BigEndianlength.Substring(0, 2);
        String GlobalUidHex = Header + Padding + LittleEndianlength + DataString;

如果您随后将HexString转换为Base64字符串,则应该可以工作。

干杯glen

最新更新