Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Кастомные компоненты Zen в отображенном пакете / 7 сообщений из 7, страница 1 из 1
25.12.2014, 16:05
    #38843048
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
Имеется ряд проектов, работающих в разных областях, и несколько собственных компонент zen, которые в этих проектах используются. Я решил эти компоненты вынести в отдельную область - в "библиотеку", а в области проектов "прокинуть" их с помощью отображения пакетов.

Все настроил, перекомпилировал "библиотечные" компоненты в областях проектов, пакеты из "библиотеки" в проектах видны, студия их тоже "видит" - работает автозавершение, когда в редакторе начинаешь набирать имя компонента. Однако, при компиляции классов проекта вываливаются ошибки по типу "компонент не обнаружен", т.е. компилятор почему-то самописных компонент не видит. Хуже того, если в области проекта создать копию компонента (скопировать класс в студии), и использовать копию - то все работает. XML namespace в классе, где компоненты используются, и в самих компонентах - один и тот же.

Помогите разобраться, почему компилятор не видит zen-компонент из отображенных пакетов? Каким образом при компиляции отыскиваются нужные компоненты? Где-то происходит поиск по объявленному в них пространству имен?

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

Область LIB:Class Lib.Zen.text Extends %ZEN.Component.text
{
  Parameter NAMESPACE = " http://custom.org/zen" ;
}Область TEST:Class Test.Zen.TestPage Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  xmlns:custom=" http://custom.org/zen" >
  <custom:text label="Text"/>
</page>
}

}Пакет Lib.Zen отображен из области LIB в область TEST.

При компиляции возникает слеюущая ошибка
Код: sql
1.
2.
3.
4.
5.
6.
Компиляция класса: Test.Zen.TestPage
ОШИБКА #6235: Непредвиденная область для тега: text (заканчивается в строке 6 символ 30).
  > ОШИБКА #5490: Ошибка $ZE='Test.Zen.TestPage:%CreatePage' полученная при запуске генератора для метода '%2'
    > ОШИБКА #5030: Возникла ошибка при компиляции класса Test.Zen.TestPage
Компиляция программы: Test.Zen.TestPage.1
Обнаружено 1 ошибок во время компиляции.


После компиляции класса Lib.Zen.text в области TEST ошибка пропадает. На работе, однако, и после компиляции ошибка остается.

Что это, преходящий глюк? Надо просто перезагрузить сервер и всё пройдет?
...
Рейтинг: 0 / 0
25.12.2014, 22:37
    #38843400
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
konstantin_11После компиляции класса Lib.Zen.text в области TEST ошибка пропадает.Важно ещё где генерируется (хранится) для кастомных компонент код *.OBJ, *.CSS, *.JS, ...

Например, в области LIB, для которой не задано csp-приложение, результат компиляции класса Lib.Zen.text будет следующий:

Код: plaintext
1.
2.
Компиляция класса: Lib.Zen.text
Компиляция программы: Lib.Zen.text.1
Пропущена генерация include-файлов

Тогда как в области TEST, для которой уже задано csp-приложение /сsp/test, результат будет немного другим:

Код: plaintext
1.
2.
Компиляция класса: Lib.Zen.text
Компиляция программы: Lib.Zen.text.1
Генерация файла: C:\InterSystems\Cache\CSP\test\Lib_Zen.js

В области TEST компилировать Lib.Zen.text принудительно может потребоваться лишь один раз: в случае, когда он актуален (up-to-date).
Потом классы компонент будут компилироваться по мере необходимости (неактуальности/устаревания), но для этого может потребоваться указывать DependsOn и/или System=3/4 (зависит что (как) Вы компилируете: отдельную страницу, пакет или целый проект): Compile Order for Custom Component Classes .

Например, если в Вашем примере поменять NAMESPACE (" http://custom.org/zen") у обоих классов и попытаться скомпилировать только Test.Zen.TestPage , то будет ошибка.
С наличием DependsOn ошибки не будет: сначала откомпилируется Lib.Zen.text , и лишь затем - Test.Zen.TestPage (с опциями компиляции по умолчанию 'cu').

PS: 8351268
...
Рейтинг: 0 / 0
26.12.2014, 12:28
    #38843683
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
Баг оказался устойчивым - после перезагрузки сервера никуда не делся. DependsOn не помог. System = 3/4 вообще "не проходит" - в студии выделяется как ошибка, и соотв. не компилируется.

Итак, первый класс Lib.Zen.tablePane - класс, исходно существовавший в области LIB класс, расположенный в пакете, отображенном на область проекта. Класс Lib.Zen.tablePane1 - копия исходного класса, созданная средствами студии.
Компилируются оба класса совершенно нормально:
Код: plaintext
1.
2.
3.
4.
5.
6.
Компиляция началась с квалификаторами 'cuk /checkuptodate=expandedonly'
Компиляция класса: Lib.Zen.tablePane 
Компиляция программы: Lib.Zen.tablePane.1
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.js
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.css
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.3.css
Компиляция успешно завершена
Код: plaintext
1.
2.
3.
4.
5.
6.
Компиляция началась с квалификаторами 'cuk /checkuptodate=expandedonly'
Компиляция класса: Lib.Zen.tablePane1 
Компиляция программы: Lib.Zen.tablePane1.1
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.js
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.css
Генерация файла:C:\InterSystems\Cache\CSP\refs\Lib_Zen.3.css
Компиляция успешно завершена

Первый класс - исходный - не работает, ошибка
Код: plaintext
1.
ОШИБКА #6237: Неожиданный тег при XML вводе: tablePane (заканчивается в строке 14 символ 114).
  > ОШИБКА #5030: Возникла ошибка при компиляции класса Org.Locations

Второй класс работает даже без DependsOn и прочих ухищрений. Может быть все же баг системы? Версия системы : Cache for Windows (x86-32) 2012.1 (Build 564)
...
Рейтинг: 0 / 0
26.12.2014, 13:33
    #38843766
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
Дальнейшее исследование показало, что проблема возникает только с кастомными компонентами, имя класса которых совпадает с именем наследуемого класса. Исходя из соображений здравого смысла и судя по тому, что в версии 2014.x такой проблемы не возникает, я решил, что это все же баг системы.
...
Рейтинг: 0 / 0
26.12.2014, 23:19
    #38844282
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
konstantin_11System = 3/4 вообще "не проходит" - в студии выделяется как ошибка, и соотв. не компилируется.Если всё же послушаться документации и включить режим эксперта, то ошибки не будет.
...
Рейтинг: 0 / 0
29.12.2014, 14:47
    #38845661
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
konstantin_11Дальнейшее исследование показало, что проблема возникает только с кастомными компонентами, имя класса которых совпадает с именем наследуемого класса. Исходя из соображений здравого смысла и судя по тому, что в версии 2014.x такой проблемы не возникает, я решил, что это все же баг системы.У меня (Cache for Windows (x86-32) 2012.1 (Build 564U) Thu Feb 2 2012 13:18:51 EST) ошибка не воспроизводится.
Проверил на чистой системе:БД LIB:Class Lib.Zen.tablePane Extends %ZEN.Component.tablePane
{

Parameter NAMESPACE = " http://custom.org/zen" ;

Property caption As %ZEN.Datatype.caption [ InitialExpression = "qwe" ];

}БД TEST:Class Test.Zen.TestPage Extends %ZEN.Component.page [DependsOn = Lib.Zen.tablePane]
{

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  xmlns:custom=" http://custom.org/zen" >
  <tablePane label="Text"/>
  <custom:tablePane label="Text"/>
</page>
}

}Оба класса компилируются без проблем при изменении обоих, что подтверждаетservitНапример, если в Вашем примере поменять NAMESPACE (" http://custom.org/zen") у обоих классов и попытаться скомпилировать только Test.Zen.TestPage , то будет ошибка.
С наличием DependsOn ошибки не будет: сначала откомпилируется Lib.Zen.text , и лишь затем - Test.Zen.TestPage (с опциями компиляции по умолчанию 'cu').
...
Рейтинг: 0 / 0
29.12.2014, 14:50
    #38845670
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные компоненты Zen в отображенном пакете
konstantin_11Исходя из соображений здравого смысла и судя по тому, что в версии 2014.x такой проблемы не возникает, я решил, что это все же баг системы.И обновиться хотя бы до версии 2012.1.5 тоже не помешает.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Кастомные компоненты Zen в отображенном пакете / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]