2017-02-15 23 views
1

Спасибо, что посмотрели.Как получить UID из ICS-файла, который будет принят в Outlook?

Я разрабатываю надстройки Outlook и иметь необходимость доступа значение UID, внедренный в файл .ics, когда пользователь принимает его:

enter image description here

Если просмотреть исходные данные в файл ICS-я могу видеть, что UID есть:

enter image description here

Я хотел бы знать, какое событие срабатывает (что я могу прикрепить к), когда пользователь принимает встречу и, как только у меня есть перспективы объект, который принимается, как мне получить UID от него?

UPDATE:

Благодаря помощи Дмитрия Streblechenko теперь я понимаю, что Глобальное Назначение Id только закодированный вариант UID. Его инструмент OutlookSpy был очень полезен в этом. Тем не менее, я все еще придерживаюсь последней части, которая заключается в преобразовании глобального идентификатора встречи в UID в C#. Google приводит меня к этому примеру, чтобы преобразовать свойство EntryId, но я не могу найти правильную схему или шестнадцатеричный код, чтобы получить свойство Global Appointment ID и декодированное значение. Любые предложения о том, как изменить код ниже для глобального Назначение ID будут оценены:

var oPA = appt.PropertyAccessor; 

//Get EntryId Value 
var entryIDProperty = "http://schemas.microsoft.com/mapi/proptag/0x0FFF0102"; 
var entryId= oPA.BinaryToString(oPA.GetProperty(entryIDProperty)); 

//Now how to get the Global Appointment ID?? 
var globalApptProperty = http://schemas.microsoft.com/mapi/proptag/0x????????"; 
var globalId= oPA.BinaryToString(oPA.GetProperty(globalApptProperty)); 

Спасибо заранее.

РЕШЕНИЕ

Я понимаю, что это не может быть лучшим способом для достижения этой цели, но это работает так, я отправляю в случае это помогает кто-то еще:

var item = Item as Outlook.MeetingItem; 
var appt = item.GetAssociatedAppointment(false);    
var oPA = appt.PropertyAccessor; 

//This parses the Global Appointment ID to a byte array. We need to retrieve the "UID" from it (if available). 
byte[] bytes = (byte[]) oPA.StringToBinary(appt.GlobalAppointmentID); 

//According to https://msdn.microsoft.com/en-us/library/ee157690(v=exchg.80).aspx we don't need first 40 bytes    
if (bytes.Length>=40) 
{      
    byte[] bytesThatContainData = new byte[bytes.Length - 40]; 
    Array.Copy(bytes, 40, bytesThatContainData, 0, bytesThatContainData.Length); 

    //In some cases, there won't be a UID. 
    var test = Encoding.UTF8.GetString(bytesThatContainData, 0, bytesThatContainData.Length); 

    if (test.StartsWith("vCal-Uid")) 
    { 
     //remove vCal-Uid from start string and special symbols 
     test = test.Replace("vCal-Uid", string.Empty); 
     test = test.Replace("\u0001", string.Empty); 
     test = test.Replace("\0", string.Empty); 

     //Here is the result 
     var uid = test; 
    }else{ 
     // Bad format!!! 
    } 
} 

ответ

1

Вы можете извлечь его из свойства AppointmentItem.GlobalAppointmentID. Его формат документирован по адресу https://msdn.microsoft.com/en-us/library/ee157690(v=exchg.80).aspx. Если раздел данных начинается с «vCal-Uid», следует UID.

+0

Спасибо, но когда я получаю доступ к свойству GlobalAppointmentId (помещая точку останова, которая попадает, когда пользователь принимает запрос на собрание), это на самом деле другая, гораздо более длинная строка. Это была оригинальная причина моего вопроса, мы пытаемся синхронизировать собрания, созданные в Интернете, и собрания, созданные в Outlook, с помощью общего идентификатора. –

+0

Например, UID в оригинале пригласить в «[email protected]», но Global Назначение ID в объекте Outlook, является «040000008200E00074C5B7101A82E0080000000000000000000000000000000000000000320000007643616C2D556964010000006175676B61613338336D6A37763634317264696B6C756974373040676F6F676C652E636F6D00». Еще раз спасибо. –

+0

Да, как я уже упоминал ранее, UID внедрен внутри этого двоичного свойства. Вам нужно будет разобрать его. Взгляните на данные с помощью OutlookSpy - нажмите кнопку «Сообщение», выберите свойство GlobalObjectId, нажмите кнопку «...» рядом со значением «Значение». –