COMException объектов Domino: «Недостаточно памяти» - PullRequest
0 голосов
/ 18 декабря 2018

Когда я вызываю NotesDXLExporterClass.Export для NotesDocumentClass объекта, который имеет очень большое вложение, я получаю исключение System.Runtime.InteropServices.COMException: 'Out of memory'.

Я надеялся решить эту проблему, установив NotesDXLExporter.OmitRichtextAttachments в true, но похоже, что это свойство недоступно через COM (1).

Какие у меня есть варианты, чтобы обойти эту проблему?

(1) Различия в доступе к объектам Domino через LotusScript или COM

Примечание 4: NotesXMLProcessor не реализовано в COM.NotesDXLExporter и NotesDXLImporter реализуют ExitOnFirstFatalError, Log и LogComment, а не наследуют их.)

Редактировать:

Когда я открываю C:\Program Files (x86)\IBM\Lotus\Notes\domobj.tlb в Oleview.exe и смотрю на интерфейс NotesDXLExporterClass, я вижу только следующее:

[
  uuid(29131437-2EED-1069-BF5D-00DD011186B7)
]
dispinterface NOTESDXLEXPORTER {
    properties:
        [id(0x00000bf6)        
]
        VARIANT FORCENOTEFORMAT;
        [id(0x00000bfa)        
]
        VARIANT OUTPUTDOCTYPE;
        [id(0x00000bfb)        
]
        BSTR DOCTYPESYSTEM;
        [id(0x00000f1e), readonly        
]
        BSTR LOG;
        [id(0x00000f1f)        
]
        BSTR LOGCOMMENT;
        [id(0x00000f20)        
]
        VARIANT EXITONFIRSTFATALERROR;
    methods:
        [id(0x00000f28)]
        void SETINPUT(VARIANT INPUT);
        [id(0x00000f29)]
        void SETOUTPUT(VARIANT OUTPUT);
        [id(0x00000f2a)]
        void PROCESS();
};

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Попробуйте запустить свой код как агент LotusScript.

Если произойдет сбой, проблема присуща классам, а не реализации COM, и вы ничего не сможете сделать, кроме как попробовать более свежую версию Notes / Domino.

Если это сработает, потенциальным обходным решением было бы заставить ваш COM-код вызывать на сервере агент LotusScript для выполнения этой части работы.

0 голосов
/ 18 декабря 2018

В документе, на который вы ссылались (а также в моей локальной справке Notes), не сказано, что NotesDXLExporter.OmitRichtextAttachments недоступно в COM.Вы пытались использовать это свойство и получили ошибку?

Если NotesDXLExporter.OmitRichtextAttachments недоступно, можете ли вы разработать агент в соответствующей базе данных Domino (или в другой базе данных, созданной для этой цели), которая действуеткак посредник?

Я думаю, что агент мог бы взять идентификатор заметки целевого документа через NotesAgent.Run и экспортировать DXL этого документа в поле (которое может быть расширенным текстом, еслиDXL больше 32 кБ) в другом временном документе.Ваш код должен вызвать этого агента через COM, получить полученный временный документ, прочитать DXL из его поля, а затем удалить временный документ.
Это кажется слишком сложным, но это единственное решение, которое мне приходит в голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...