Ошибки в LS-классах после/во_время компиляции

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#1
есть класс... в нем есть такие переменные
Код:
	Private MyError As Boolean
Private MyErrorCode As Integer
Private MyErrorLine As Integer	
Private MyErrorDesc As String
есть такой метод. он правда к делу не относится сильно
Код:
	Public Sub New( body As NotesRichTextItem )
.......

End Sub
Суть в чем. При попытке создания объекта возникает ошибка Type mismatch on external name: <имя класса>
Но достаточно закоментировать MyErrorLine и MyErrorDesc - как ошибка пропадает.
Эти переменные нигде пока не используются... пока не получается их объявить ;)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#2
NickProstoNick
весь код приведи с четким местом где ошибка
 
Y

Yakov

#3
Когда вы меняете состав членов класса, необходимо перекомпилировать все библиотеки, явно использующие эту библиотеку (прямым или опосредованным включением библиотеки операторм Use). Если интересует, почему, позже постараюсь объяснить.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#4
ToxaRat
Ошибка при попытке создания.... входа в класс не происходит
Set xml = New XMLTable( body )
Yakov
Да вроде все компилировал... уже не знаю что делать ;)
Крыша едет
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#5
Yakov прально написал

звыняйте за офф, но ;)
Если интересует, почему, позже постараюсь объяснить
слушай, издавай уже эл. книгу! :)
блог не ведешь где-нить со всеми наработками?..

Да вроде все компилировал... уже не знаю что делать
сначала сохраняешь библиотеку, в которой исправления были.
если ее использует, к примеру, форма, то надо эту форму переоткрыть! и пересохранить, внеся требуемые изменения. иногда полезно в Options как-то поправить, чтобы сохранение было принудительное, т.к. иногда оно не спешит сохраняться, если изменений не было.
если первую библиотеку использует другая библиотека, то сначала надо другую библиотеку переоткрыть, перекомпилить, а потом уже перекомпилить аналогично все вышеследующие элементы...

зы: если не критично, то можно перекомпилить весь LS в базе соответствующим действием в меню Tools\Recompile All LotusScript
 
Симпатии: Понравилось anna
A

Anonimous

#7
сначала сохраняешь библиотеку, в которой исправления были.
если ее использует, к примеру, форма, то надо эту форму переоткрыть! и пересохранить, внеся требуемые изменения. иногда полезно в Options как-то поправить, чтобы сохранение было принудительное, т.к. иногда оно не спешит сохраняться, если изменений не было.
если первую библиотеку использует другая библиотека, то сначала надо другую библиотеку переоткрыть, перекомпилить, а потом уже перекомпилить аналогично все вышеследующие элементы...
Надо внести исправления в одну библу. Пересохранял формы, субформы, агенты, другие библы, которые ее используют (в Options). Меняю код нужной библиотеки, сохраняю, перекомпиливаю весь LotusScript. В измененной библиотеке теперь ошибка Not a member: имя метода класса другой библиотеки. Измененная библиотека использует классы этой другой, не наоборот. При компиляции библиотек еще возникает LotusScript Error - Syntax Error.
Кто-нибудь, подскажите, плиз, может я не в том порядке сделал?
 

nayke

Well-known member
04.08.2010
310
0
#8
Надо внести исправления в одну библу. Пересохранял формы, субформы, агенты, другие библы, которые ее используют (в Options). Меняю код нужной библиотеки, сохраняю, перекомпиливаю весь LotusScript. В измененной библиотеке теперь ошибка Not a member: имя метода класса другой библиотеки. Измененная библиотека использует классы этой другой, не наоборот. При компиляции библиотек еще возникает LotusScript Error - Syntax Error.
Кто-нибудь, подскажите, плиз, может я не в том порядке сделал?
Смотрите метод на который ругается в другой библиотеке. Есть или нет, объявлен и т.д.
Код могли писать до вас например в 6 клиенте, а вы смотрите в 8 поэтому раньше ошибка не появлялась.
 
A

Anonimous

#9
Метод, на который ругается, есть, объявлен. А вот код могли написать в 6-й версии. Как тогда потупить, плз, посоветуйте!
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#10
Anonimous
Если уровней вложенности > 2, то Recompile All Lotus Scripts может не решить эту проблему. Тогда определяем зависимость библиотек до той самой, из которой этот метод, открываем её, ставим пробел, стираем его же и жмём Ctrl+S, и так поднимаясь вверх (пересохраняя) до той библиотеки, которая ругается на метод.
Если продолжит ругаться, значит что-то с параметрами не то.
А может что-то удаляли из библы и снесли "Option Public", тогда код этой библы не будет виден снаружи.

А вообще мало информации чтобы что-то советовать конкретное. Выложили бы хоть скрины с ошибками.
 
A

Anonimous

#11
Если уровней вложенности > 2, то Recompile All Lotus Scripts может не решить эту проблему. Тогда определяем зависимость библиотек до той самой, из которой этот метод, открываем её, ставим пробел, стираем его же и жмём Ctrl+S, и так поднимаясь вверх (пересохраняя) до той библиотеки, которая ругается на метод.
Уже делал, не помогает. Option Public ничего не дает.
Подробнее.
Есть библиотека Org, там классы OrgDirectory и OrgUnitCollection. У класса есть свойства, методы. Мне надо менять библиотеку Sign. В ней используются методы классов первой библиотеки. Библиотеки уже были скомпилены, работали, мне надо вставить в Sign две строчки, которые на суть вещей не влияют. Переоткрывал и пересохранял все, что использует библиотеки Org или Sign. В Sign вставляю свои строчки.
В библиотеке Sign возникают проблемы такие:

Dim collD As OrgUnitCollection ' OrgUnitCollection - класс библы Org

Set collD = GetOrg().GetP() ' Здесь возникает ошибка Not a member: GETP

GetOrg() - функция в библиотеке Sign, объявлена так:

Private Function GetOrg() As OrgDirectory ' OrgDirectory - класс библы Org. Этот класс имеет функцию GetP, которая вызывалась выше и должна вернуть значение переменной collD

End Function

Просто как будто измененная библа Sign перестала видеть все классы и функции библы Org, что-то видит, что-то нет. Предварительное пересохранение проблем не предотвратило. Я пересохранял все субформы, формы, агенты, библиотеки. Мои две строчки ни на что не влияют
 
A

Anonimous

#14
Добавлено:
Так не помогает:

Dim orgD As OrgDirectory
Dim collD As OrgUnitCollection
Set orgD = GetOrg()
IF Not orgD Is Nothing Then
Set collD = orgD.GetP()
End If

?
Нет то же самое
функция то приватная видна только внутри класса
Даже когда убрал приватность - все равно
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#15
возможно что-то ещё приватное, или какой-нибудь из используемых классов или метод
чудес не бывает
 
A

Anonimous

#16
В библиотеке Org:
Класс OrgDirectory стоит Public, его метод GetP() , на который ругается, тоже Public.
Класс OrgUnitCollection - Public. Приватного больше ничего.
 

nayke

Well-known member
04.08.2010
310
0
#17
В библиотеке Org:
Класс OrgDirectory стоит Public, его метод GetP() , на который ругается, тоже Public.
Класс OrgUnitCollection - Public. Приватного больше ничего.
Другие методы подтягиваются? без кода сказать в чем дело невозможно.. Тут либо видимость, либо синтаксическая ошибка, или библиотека не работает.

попробуйте дописать GetP1 будет ли виден метод и т.д
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#18
Попробуйте ещё создать другую библиотеку и покопировать оттуда код этих классов. Только копировать код нужно не с помощью Ctrl+A, а каждый класс отдельно.
 
A

Anonimous

#19
Да, сделал. Еще в новой библиотеке Org поубирал Public перед именами классов и методов. Теперь при вводе строчки

Set collD = GetOrg().GetP()

метод GetP() видит и предлагает для выбора. Но ошибка все равно осталась :-(
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#20
Попробуйте создать БД, скопировать туда эти 2 библиотеки и повычищать ненужный код, не имеющий отношения к делу (классы, методы и т.д.), ну чтобы осталось пара классов, процедура и пара методов, и выложить сюда.
Можно просто сюда под спойлер.