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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
есть класс... в нем есть такие переменные
Код:
	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

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
NickProstoNick
весь код приведи с четким местом где ошибка
 
Y

Yakov

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

NickProstoNick

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

Akupaka

Yakov прально написал

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

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

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

Anonimous

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

nayke

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

Смотрите метод на который ругается в другой библиотеке. Есть или нет, объявлен и т.д.
Код могли писать до вас например в 6 клиенте, а вы смотрите в 8 поэтому раньше ошибка не появлялась.
 
A

Anonimous

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

VladSh

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

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

Anonimous

Если уровней вложенности > 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

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

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 797
158
BIT
232
возможно что-то ещё приватное, или какой-нибудь из используемых классов или метод
чудес не бывает
 
A

Anonimous

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

nayke

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

Другие методы подтягиваются? без кода сказать в чем дело невозможно.. Тут либо видимость, либо синтаксическая ошибка, или библиотека не работает.

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

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
Попробуйте ещё создать другую библиотеку и покопировать оттуда код этих классов. Только копировать код нужно не с помощью Ctrl+A, а каждый класс отдельно.
 
A

Anonimous

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

Set collD = GetOrg().GetP()

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

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
Попробуйте создать БД, скопировать туда эти 2 библиотеки и повычищать ненужный код, не имеющий отношения к делу (классы, методы и т.д.), ну чтобы осталось пара классов, процедура и пара методов, и выложить сюда.
Можно просто сюда под спойлер.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!