четверг, апреля 19

Lotus Script. фичи

Обнаружился довольно интересный глюк в скрипте - метод Getdocumentbykey у NotesView "изменяет" значение передаваемого ключа, если ключ типа Variant (при строгой типизации такого не происходит).

пример:

Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Variant

Set view = ses.currentdatabase.Getview("XXX")
num = "50000001"
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(num, True)
Print "3: " & num ' Выведет 134217728


Теперь немного видоизменим программный код, приведя к Long переменную:


Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Long

Set view = ses.currentdatabase.Getview("XXX")
num = 50000001
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(num, True)
Print "3: " & num ' Выведет 50000001

А теперь изменим тип только в вызове метода getDocumentByKey:

Dim ses As New NotesSession
Dim view As NotesView
Dim doc As notesdocument
Dim num As Variant

Set view = ses.currentdatabase.Getview("XXX")
num = 50000001
Print "1: " & num ' Выведет 50000001
num = clng(num)
Print "2: " & num ' Выведет 50000001
Set doc = view.Getdocumentbykey(CLng(num), True)
Print "3: " & num ' Выведет 50000001

отсюда вывод: использовать тип Variant конечно удобно, но это как хождение по минному полю - путь короче, но не знаешь где рванёт ;)

ЗЫ: клиент Standard 8.5.3FP1



Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Комментариев нет:

Отправить комментарий