Выкуп CreateItemFromTemplate аналог

Есть ли аналог функции Redemption для Microsoft.Office.Interop.Outlook._Application.CreateItemFromTemplate () для открытия экспортированных ранее файлов .oft (элементы задач) или .vcf (элементы встреч)?

У меня он работает с Redemption.IRDOFolder2.Import, но импортирует элемент в соответствующую папку (календарь или задачу). Я использую язык C #. Спасибо вам в авансе.


person Maverick    schedule 10.11.2020    source источник


Ответы (1)


Вы можете сначала создать новый элемент (RDOFolder.Items.Add), а затем импортировать файл OFT с помощью RDOMail.Import(..., olMsg).

person Dmitry Streblechenko    schedule 10.11.2020
comment
Я использовал следующий код: Redemption.RDOAppointmentItem assignItemRDO = null; assignItemRDO = calendarFolder.Items.Add (IPM.Appointment) как Redemption.RDOAppointmentItem; assignItemRDO.Import (filePath, Redemption.rdoSaveAsType.olICal); и он работает так же, как я упоминал ранее (с использованием IRDOFolder2.Import). Но мне НЕ нужно импортировать элемент в папку календаря, мне просто нужно создать элемент из файла и выполнить дальнейшую обработку. Как я могу это сделать без функции import ()? - person Maverick; 11.11.2020
comment
Вы имеете в виду, что не хотите создавать его в папке календаря? Вы можете создать временный файл MSG с помощью RDOSession.CreateMesageFromMsgFile (..., olAppointmentItem) - person Dmitry Streblechenko; 11.11.2020
comment
Да, я не хочу создавать какие-либо элементы в папках календаря / задач. Я проверил это: Redemption.RDOAppointmentItem assignItemRDO = Redemption.RDOAppointmentItem) RDOSession.CreateMesageFromMsgFile (..., olAppointmentItem); но получил ПУСТОЙ элемент встречи (со значениями полей по умолчанию), я имею в виду, что у него нет полей, импортированных из .ics-файла, например, SUBJECT = import_subject_value. Также я попытался использовать GetMessageFromMsgFile () и привести объект возврата к Redemption.RDOAppointmentItem, но получил исключение. - person Maverick; 12.11.2020
comment
_NameSpace.OpenSharedItem () - этот метод используется для открытия файлов встреч iCalendar (.ics), файлов vCard (.vcf) и файлов сообщений Outlook (.msg). И мне тоже нужно открывать встречи в календаре с помощью RDO. Но мне не нужно ИМПОРТИРОВАТЬ его в папку календаря! Есть аналог РДО? - person Maverick; 12.11.2020
comment
OpenSharedItem в OOM создает временный элемент в хранилище по умолчанию. RDOSession.CreateMesageFromMsgFile создает пустой элемент, вы импортировали файл ICS с помощью импорта? - person Dmitry Streblechenko; 12.11.2020
comment
Спасибо, Дима! Думаю, я нашел решение и протестировал его: Redemption.RDOAppointmentItem assignItemRDO = null; assignItemRDO = (Redemption.RDOAppointmentItem) RDOSession.CreateMessageFromMsgFile (filePath_tmp, OutlookInterop.OlItemType.olAppointmentItem, 1); assignItemRDO.Import (filePath, Redemption.rdoSaveAsType.olICal); После этого у меня появилось правильное назначениеItemRDO, импортированное из .ics-файла. - person Maverick; 12.11.2020
comment
Затем мне нужно удалить временный файл, который был создан при вызове CreateMessageFromMsgFile (). Я использовал: InteropMarshal.ReleaseComObject (ref assignItemRDO); если (File.Exists (fileTemp)) File.Delete (fileTemp); - person Maverick; 12.11.2020
comment
Может быть, вы предложите лучшее решение? Без создания temp-файла и его удаления? Также было интересно: InteropMarshal.ReleaseComObject отлично работает, НО InteropMarshal.FinalReleaseComObject - нет! Почему ? Какой-то странный маршальский баг? он должен установить счетчик ссылок на COM-объект равным 0, но что-то работает неправильно. Также приведите assignItemRDO к IDisposable, а вызов IDisposable.Dispose приведет к исключению. Еще раз большое спасибо за вашу помощь. Спасибо! - person Maverick; 12.11.2020
comment
Вы можете просто вызвать RDOMail.Delete - для сообщения, созданного поверх файла MSG, он удалит файл. - person Dmitry Streblechenko; 12.11.2020
comment
да! он отлично работает с ((Redemption.RDOAppointmentItem) assignmentItem) .Delete (Redemption.redDeleteFlags.dfHardDelete); InteropMarshal.FinalReleaseComObject (ref assignItem); теперь это полностью то, чем я хотел заниматься. Спасибо, Дмитрий. Стоит ли мне отвечать на свой вопрос и будет ли это полезно для удобства использования Redemption и помощи другим пользователям RDO? - person Maverick; 13.11.2020
comment
Конечно, я не понимаю, почему бы и нет. - person Dmitry Streblechenko; 13.11.2020