|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
Имеется ряд проектов, работающих в разных областях, и несколько собственных компонент 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.
После компиляции класса Lib.Zen.text в области TEST ошибка пропадает. На работе, однако, и после компиляции ошибка остается. Что это, преходящий глюк? Надо просто перезагрузить сервер и всё пройдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 16:05 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
konstantin_11После компиляции класса Lib.Zen.text в области TEST ошибка пропадает.Важно ещё где генерируется (хранится) для кастомных компонент код *.OBJ, *.CSS, *.JS, ... Например, в области LIB, для которой не задано csp-приложение, результат компиляции класса Lib.Zen.text будет следующий: Код: plaintext 1. 2.
Тогда как в области TEST, для которой уже задано csp-приложение /сsp/test, результат будет немного другим: Код: plaintext 1. 2.
В области 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 22:37 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
Баг оказался устойчивым - после перезагрузки сервера никуда не делся. DependsOn не помог. System = 3/4 вообще "не проходит" - в студии выделяется как ошибка, и соотв. не компилируется. Итак, первый класс Lib.Zen.tablePane - класс, исходно существовавший в области LIB класс, расположенный в пакете, отображенном на область проекта. Класс Lib.Zen.tablePane1 - копия исходного класса, созданная средствами студии. Компилируются оба класса совершенно нормально: Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2. 3. 4. 5. 6.
Первый класс - исходный - не работает, ошибка Код: plaintext 1.
Второй класс работает даже без DependsOn и прочих ухищрений. Может быть все же баг системы? Версия системы : Cache for Windows (x86-32) 2012.1 (Build 564) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 12:28 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
Дальнейшее исследование показало, что проблема возникает только с кастомными компонентами, имя класса которых совпадает с именем наследуемого класса. Исходя из соображений здравого смысла и судя по тому, что в версии 2014.x такой проблемы не возникает, я решил, что это все же баг системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 13:33 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
konstantin_11System = 3/4 вообще "не проходит" - в студии выделяется как ошибка, и соотв. не компилируется.Если всё же послушаться документации и включить режим эксперта, то ошибки не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 23:19 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
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'). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 14:47 |
|
Кастомные компоненты Zen в отображенном пакете
|
|||
---|---|---|---|
#18+
konstantin_11Исходя из соображений здравого смысла и судя по тому, что в версии 2014.x такой проблемы не возникает, я решил, что это все же баг системы.И обновиться хотя бы до версии 2012.1.5 тоже не помешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2014, 14:50 |
|
|
start [/forum/topic.php?fid=39&msg=38843400&tid=1556743]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 387ms |
0 / 0 |