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

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 6 окт 2009.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    есть класс... в нем есть такие переменные
    Код (Text):
        Private MyError As Boolean
    Private MyErrorCode As Integer
    Private MyErrorLine As Integer 
    Private MyErrorDesc As String
    есть такой метод. он правда к делу не относится сильно
    Код (Text):
        Public Sub New( body As NotesRichTextItem )
    .......

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    NickProstoNick
    весь код приведи с четким местом где ошибка
     
  3. Yakov

    Yakov Гость

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ToxaRat
    Ошибка при попытке создания.... входа в класс не происходит
    Set xml = New XMLTable( body )
    Yakov
    Да вроде все компилировал... уже не знаю что делать ;)
    Крыша едет
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Yakov прально написал

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

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

    зы: если не критично, то можно перекомпилить весь LS в базе соответствующим действием в меню Tools\Recompile All LotusScript
     
    2 пользователям это понравилось.
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    спасибо! Победил! ;)
     
  7. Anonimous

    Anonimous Well-Known Member

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

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Смотрите метод на который ругается в другой библиотеке. Есть или нет, объявлен и т.д.
    Код могли писать до вас например в 6 клиенте, а вы смотрите в 8 поэтому раньше ошибка не появлялась.
     
  9. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Метод, на который ругается, есть, объявлен. А вот код могли написать в 6-й версии. Как тогда потупить, плз, посоветуйте!
     
  10. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Anonimous
    Если уровней вложенности > 2, то Recompile All Lotus Scripts может не решить эту проблему. Тогда определяем зависимость библиотек до той самой, из которой этот метод, открываем её, ставим пробел, стираем его же и жмём Ctrl+S, и так поднимаясь вверх (пересохраняя) до той библиотеки, которая ругается на метод.
    Если продолжит ругаться, значит что-то с параметрами не то.
    А может что-то удаляли из библы и снесли "Option Public", тогда код этой библы не будет виден снаружи.

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

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Уже делал, не помогает. 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, что-то видит, что-то нет. Предварительное пересохранение проблем не предотвратило. Я пересохранял все субформы, формы, агенты, библиотеки. Мои две строчки ни на что не влияют
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Так не помогает:
    Код (LotusScript):
    Dim orgD As OrgDirectory
    Dim collD As OrgUnitCollection
    Set orgD = GetOrg()
    IF Not orgD Is Nothing Then
    Set collD = orgD.GetP()
    End If
    ?
     
  13. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    функция то приватная видна только внутри класса
     
  14. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Добавлено:
    Нет то же самое
    Даже когда убрал приватность - все равно
     
  15. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    возможно что-то ещё приватное, или какой-нибудь из используемых классов или метод
    чудес не бывает
     
  16. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    В библиотеке Org:
    Класс OrgDirectory стоит Public, его метод GetP() , на который ругается, тоже Public.
    Класс OrgUnitCollection - Public. Приватного больше ничего.
     
  17. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Другие методы подтягиваются? без кода сказать в чем дело невозможно.. Тут либо видимость, либо синтаксическая ошибка, или библиотека не работает.

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

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Попробуйте ещё создать другую библиотеку и покопировать оттуда код этих классов. Только копировать код нужно не с помощью Ctrl+A, а каждый класс отдельно.
     
  19. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Да, сделал. Еще в новой библиотеке Org поубирал Public перед именами классов и методов. Теперь при вводе строчки

    Set collD = GetOrg().GetP()

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

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Попробуйте создать БД, скопировать туда эти 2 библиотеки и повычищать ненужный код, не имеющий отношения к делу (классы, методы и т.д.), ну чтобы осталось пара классов, процедура и пара методов, и выложить сюда.
    Можно просто сюда под спойлер.
     
Загрузка...

Поделиться этой страницей