Небольшая ошибка: код для создания, сохранения и открытия Lotus Draft Email через VBA - PullRequest
0 голосов
/ 15 сентября 2010

Эта функция была написана для создания электронной почты Lotus, ее заполнения, сохранения в разделе «Черновики» и открытия ее для редактирования пользователем. Тем не менее, у него есть 2 проблемы:

  1. Не всегда открывается правильный черновик письма для редактирования.
  2. Иногда выдает «Заметка об ошибке - указанная команда недоступна в рабочей области». сообщение об ошибке. (Электронная почта все еще сохраняется, так что это не большая потеря).

Обе проблемы возникают с нерегулярными интервалами. Если есть образец, я еще не видел это. Могу ли я заставить эти проблемы уйти? Любые другие советы по снижению ошибок здесь?

(Примечание: я опускаю обработчик ошибок)

Dim NtSession As New NotesSession
Dim NtDB As New NotesDatabase
Dim NtWkSp As Object
Dim NtDoc As New NotesDocument
Dim NtObj As New NotesEmbeddedObject
Dim NtBodyRT As New NotesRichTextItem
NtSession.Initialize

'==========================================================================
'Open the mail server
Set NtDB = NtSession.GetDatabase( _
    NtSession.GetEnvironmentString("MailServer", True), _
    NtSession.GetEnvironmentString("MailFile", True), _
    True)

'==========================================================================
'Fill in basic email fields
Set NtDoc = NtDB.CreateDocument
NtDoc.AppendItemValue "Form", "Memo"
Set NtBodyRT = NtDoc.CreateRichTextItem("Body")
AddFields

'=========================================================================
' Save it to the drafts folder
DoEvents
NtDoc.SaveMessageOnSend = True
NtDoc.SignOnSend = True
NtDoc.Save False, False, True
Set NtWkSp = CreateObject("Notes.NotesUIWorkspace")
DoEvents
NtWkSp.OpenDatabase _
    NtSession.GetEnvironmentString("MailServer", True), _
    NtSession.GetEnvironmentString("MailFile", True), _
    "($Drafts)"
DoEvents
NtWkSp.VIEWREFRESH
NtWkSp.EDITDOCUMENT

Set NtWkSp = Nothing
Set NtSession = Nothing

Ответы [ 3 ]

0 голосов
/ 15 сентября 2010

Метод EditDocument в NotesUIWorkspace можно дополнительно передать дескриптор в документ Notes, и он откроется в режиме редактирования. Итак, вы можете использовать что-то вроде:

...
NtWkSP.EditDocument (true, NtDoc)
0 голосов
/ 18 сентября 2010

Два набора классов не связаны и используют разные API и разные контексты времени выполнения - ваш объект NtDoc не будет существовать в контексте рабочего пространства.Как бы мне не хотелось это делать, я бы предложил делать все это в классах Notes Automation.В любом случае вам придется открыть NotesSession в пространстве имен Notes, чтобы убедиться, что у вас есть нужный документ (будь то с использованием NotesDatabase.GetDocumentByUNID, NotesDatabase.GetDocumentByID или NotesView.GetDocumentByKey).Очевидно, что наличие двух сессий, двух баз данных, двух документов и т. Д., Все из которых указывают на разные дескрипторы одного и того же набора объектов, может стать грязным и может фактически вызвать коллизии на этом пути.

(И ответить наВ предыдущем вопросе Lotus Domino Objects - это поддерживаемый COM-интерфейс, который поддерживает раннее связывание, но имеет доступ только к внутреннему интерфейсу, интерфейс Notes Automation Objects - это более ранний и устаревший интерфейс OLE, который не поддерживает раннее связывание и, честно говоря, является своего родаcrashy.)

0 голосов
/ 15 сентября 2010

после вызова NtWkSp.VIEWREFRESH вам нужно будет убедиться, что выбранный вид находится на только что добавленном черновике, в противном случае, когда вы наберете NtWkSp.EDITDOCUMENT, он всегда откроет первый черновик, так как именно на него указывает вид.

Кроме того, кажется странным, что вы использовали бы Раннее связывание для объектов Domino и Позднее связывание для классов автоматизации Lotus, но, возможно, есть цель?

На какой строке происходит ошибка Notes?

...