S
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Добрый день всем, не могу заставить Lotus работать, первый раз с таким сталкиваюсь. Функция не возвращает переменной, Recompile All Lotusscript не помогает.
Ага понял, в чем дело. спасибо.Функиця getPersonByNN, переменная dbPersonal является локальной.
При выходе из функции она обнуляется и теряется связь с документом.
Судя по всему код в библиотеке, можно сделать глобальную переменную dbPersonal для всей библиотеки и убрать локальные объявления.
Иначе полетит что-то другое. Проще говоря - пересмотреть код.
можно как nayke предложил.
Да, дошло, что ссылка на документ связана с базой, совсем забыл про это.Serduko
Нет, не все с ней в порядке: переменная локальная, объявлена в функции и "живет" она в рамках ффункции и все объекты полученные от нее живут так же только в рамках функции.
Когда выходишь из функции все переменные, кроме возвращающего значения - обнуляются.
Лотус так устроен, что если потерять/обнулить объект базы, то теряется и документ, который из этой базы получен.
Как только dbPersonal станет Nothing, то документ тоже будет Nothing.
Получили базу, записали в локальную перменную.
Получили документ из локальной переменной базы.
Записали в возвращающее значение документ (по факту это один и тот же объект, а не 2 разных)
Выходим из функции
локальные переменные - обнулились.
Объект базы обнулился, объект документа - обнулился, возвращающее значение тоже обнулилось.
Сделайте в Declaration перменную: dim dbPersonal2 as notesdatabase
Она будет глобальной на библиотеку.
Замените в вашей функции dbPersonal на dbPersonal2
Проверте работу.
А как здесь использовать static в Lotusscript? Не пользовался им, в отличие от javaвского.можно не глобальную переменнуюlease:
а просто Static для БД объекта
А в чем преимущество перед глобальной?
В пределах библиотеки не надо делать Public, можно даже Private сделать.-глобальные, при "переходе" между модулями - нужно объявлять как Public, иначе повторится ваш случай
по дизайну не всегда это возможно, чаще удобнее передавать кастомный объект (т.е. уже набор параметров)ни в чем.. статические переменные используют внутри функци с целью повторного использования уже полученного значения/объекта..
лучше вообще глобальностями не пользоваться.. передавайте в функцию ссылку на базу и пользуйтесь ей на здоровье.. к тому же будет понятно откуда пришел объект..
если не сделать Public, и док или вьюшка будут юзаться в к-л либе (а база инициализирована в др.) - повторится фокус с пропаданием объекта, в 7-ке точно (сталкивался)В пределах библиотеки не надо делать Public, можно даже Private сделать.
А для доступа к переменной использовать функцию из библиотеки, которая возвращает объект базы.
Kee_Keekkenen, lmike
У меня вопрос по сроку жизни Static. Сколько она живет? Плохо понимаю этот момент.
Глобальная живет пока пока есть библиотека(если не путаю), а Static?
При всем уважении к ОПП, я не сую его туда где оно может быть лишним или создаст дополнительные сложности.да и вовсе, процедурное оформление кода дает свои недостатки
Возможно... Только я почти не сталкивался, разве что коллега в коллекции документов из разных баз.если не сделать Public, и док или вьюшка будут юзаться в к-л либе (а база инициализирована в др.) - повторится фокус с пропаданием объекта, в 7-ке точно (сталкивался)
в LS этого нет, в LS естьчисто функциональный - свои минусы
если код большой - то уже никак, понятно, что ради 2-х ф-ци не стоит городить объектыЕсли могу обойтись без ООП, то делаю без него
Kee_Keekkenen, lmike
У меня вопрос по сроку жизни Static. Сколько она живет? Плохо понимаю этот момент.
Глобальная живет пока пока есть библиотека(если не путаю), а Static?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!