Имя класса или типа не найдено — тип объекта

#lotus-notes #lotus-domino #lotusscript

#lotus-notes #lotus-domino #lotusscript

Вопрос:

Я новичок в LotusScript, у меня в моем агенте следующая ошибка:

Имя класса или типа не найдено

Моя цель — иметь возможность подключаться к серверу с помощью следующего кода:

 Option Public
Option Declare    

Sub Initialize
    Dim myServer As String
    Dim myMailfile As String
    myServer = "server"
    myMailfile = "mailfile"

    Dim filePath As String
    Dim intErgebnis As Integer
    Dim objNotes As Object
    Dim LNdb As Object
    Dim LNView As Object
    Dim LNDoc As Object
    Dim LNItem As Object
    Dim strSubject As String
    Dim LNWorkspace As Object
    Dim LNAttachment As Variant
    intErgebnis = 0
    Set objNotes = GetObject("", "Notes.NotesSession")
    Set LNdb = objNotes.GETDATABASE(myServer, myMailfile)
    Set LNWorkspace = CreateObject("notes.notesuiworkspace")
    LNWorkspace.OpenDatabase myServer, myMailfile
End Sub
 

У кого-нибудь есть идеи, как это решить? Спасибо за вашу помощь

Ответ №1:

В Lotusscript нет типа данных с именем Object . Вам необходимо объявить эти переменные с соответствующими типами объектов, например NotesDatabase, NotesView, NotesDocument и т.д.

Кроме того, вы должны объявить и инициализировать объект NotesSession, а не использовать GetObject() в Lotusscript. Похоже, вы пытаетесь написать COM-код, а не Lotusscript.

Другое предложение состоит в том, чтобы использовать имена переменных, соответствующие фактическому (установленному) соглашению об именовании. Если вы посмотрите на другой код Lotusscript, вы заметите, что переменные обычно называются одинаково, что значительно облегчает чтение кода других разработчиков. Еще одна рекомендация — сначала объявить все объекты / классы Notes, сгруппированные / отсортированные в порядке их использования, а затем остальные переменные, прежде чем какой-либо из них будут присвоены значения.

Ваш код должен выглядеть примерно так:

 Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim item As NotesItem
    Dim ws As New NotesUIWorkspace
    Dim uidoc as NotesUIDocument

    Dim mailServer As String
    Dim mailFileName As String
    Dim filePath As String
    Dim resultCount As Integer
    Dim subject As String

    mailServer = "server"
    mailFileName = "mailfile.nsf"
    resultCount = 0
    ' *** Open the specified mail file using back-end classes
    Set db = new NotesDatabase(mailServer, mailFileName)
    ' *** Get the document currently open in the Notes client using front-end classes
    Set uidoc = ws.CurrentDocument
    
End Sub
 

Вы видите, насколько это легче читать, не говоря уже о том, что оно короче и работает.

Я также рекомендую всегда использовать имена переменных на английском языке. Если вам когда-нибудь понадобится попросить кого-нибудь о помощи, например, здесь, в Stack Overflow, им будет намного легче понять ваш код, если вы используете простые для понимания имена переменных. Это также причина, по которой вы должны использовать стандартные имена для объектов / классов Notes.

Я написал серию статей о том, как лучше писать код Lotusscript, я думаю, они могут вам помочь: http://blog.texasswede.com/how-to-write-better-code-in-notesdomino /