Libmapi: повторяющиеся встречи

Если вы когда-либо будете использовать libmapi, для чтения рекуррентных (повторяющихся) встреч, то знайте, что вызов get_RecurrencePattern в текущей (0.8.2) версии читает даже близко не всё, что нужно, а структура RecurrencePattern, которая возвращается этим вызовом, не дописана для большинства типов встреч.

Так что, увы, придётся получать поле PidLidAppointmentRecur (не забудьте, что его ID нуждается в трансляции через mapi_nameid_GetIDsFromNames) и самостоятельно его парсить. Документация от Microsoft есть — документ MS-OXOCAL. Поздравьте, я справился.

Поделиться
Отправить
 4   2009   libmapi
4 комментария
astur (astur.net.ru) 2009

Поздравляю!

Евгений Степанищев (bolknote.ru) 2009

Комментарий для astur.net.ru:

Ага, спасибо! :)

Евгений Степанищев (bolknote.ru) 2009

На всякий случай сгружу сюда более полные структуры для get_RecurrencePattern, в них нет только массива для изменённых событий (одни даты), но результат вызова можно кастануть в эту структуру и получить правильные данные для всех типов событий:

class MonthRecurrencePattern(Structure):
    _fields_ = [

        (’Res1’, c_uint32),

        (’Res2’, c_uint32),

        (’EveryNDay’, c_uint32),

        (’EndType’, c_uint32),

        (’OccurrenceCount’, c_uint32),

    ]

class MonthComplexRecurrencePattern(Structure):
    _fields_ = [

        (’DayBitMask’, c_uint32),

        (’Nth’, c_uint32),

        (’EndType’, c_uint32),

        (’OccurrenceCount’, c_uint32),

        (’FirstDOW’, c_uint8),

    ]

class DayRecurrencePattern(Structure):
    _fields_ = [

        (’DayBitMask’, c_uint32),

        (’N’, c_uint32),

        (’EndType’, c_uint32),

        (’OccurrenceCount’, c_uint32),

        (’FirstDOW’, c_uint8),

    ]

class PatternTypeSpecific(Union):
    _fields_ = [

        (’MonthRecurrencePattern’, MonthRecurrencePattern),

        (’MonthComplexRecurrencePattern’,MonthComplexRecurrencePattern),

        (’DayRecurrencePattern’, DayRecurrencePattern),

    ]

class RecurrencePattern(Structure):
    _fields_ = [

        (’ReaderVersion’, c_uint16),

        (’WriterVersion’, c_uint16),

        (’RecurFrequency’, c_uint32),

        (’PatternType’, c_uint32),

        (’CalendarType’, c_uint32),

        (’FirstDateTime’, c_uint32),

        (’Period’, c_uint32),

        (’SlidingFlag’, c_uint32),

        (’PatternTypeSpecific’, PatternTypeSpecific),

        (’DeletedInstanceCount’, c_uint32),

        (’DeletedInstanceDates’, POINTER(c_uint32)),

        (’ModifiedInstanceCount’, c_uint32),

        (’ModifiedInstanceDates’, POINTER(c_uint32)),

        (’StartDate’, c_uint32),

        (’EndDate’, c_uint32),

    ]

Евгений Степанищев (bolknote.ru) 2009

Да, структуры для Python, в формате ctypes.

Популярное