要通过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