31.12.2004, 11:55 | #1 |
Участник
|
Система не видит новые параметры методов при работе
Столкнулась со следующей проблемой.
В стандартные методы системы добавлены новые параметры (параметры функции). Все видно, все компилируется, все ОК (в том числе и то место, откуда метод вызвается). Запускаю отработку - система не желает заходить внуть измененного метода. Ругается и не видит новых параметров. Убираю параметры - снова все становится хорошо. В чем может быть проблема?? ЗЫ Что уже пробовала сделать: перекомпилировала АОТ, удалила индексы, очистила таблицу SySLastValues (именно в таком порядке). Не помогло. HELP!!!!
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
31.12.2004, 12:31 | #2 |
Участник
|
Инкрементная компиляция класса в котором меняли методы & обновить перекрестные ссылки
|
|
31.12.2004, 12:39 | #3 |
Участник
|
Пробовала - не помогает.
Более того. Проблема наблюдается не только для методов классов, но и для методов, например, на мэпах. И еще система не видит новые методы объявленные в мэпе (только во время работы - во время компиляции все ОК)
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
01.01.2005, 09:43 | #4 |
Участник
|
Re: Система не видит новые параметры методов при работе
Цитата:
Изначально опубликовано Anais
В стандартные методы системы добавлены новые параметры (параметры функции). А в родителе не добавили? Дело в том, что параметры в виртуальных методах должны совпадать. А в Аксапте (как и в Джаве) все методы виртуальные. Будьте предельно осторожны. Добавляйте параметры только со значениями по-умолчанию. Поскольку добавляя параметры, вы меняете интерфейс класса. И, скорее всего, вам придется менять и вызовы данного метода во всем коде. |
|
01.01.2005, 21:59 | #5 |
Участник
|
Увы, все на так просто.
Я добавила параметры в класс - наследник RunBaseBatch, в новый (нет наследуемый) метод initParameters. И у всех новых параметров заданы значения по-умолчанию.
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
02.01.2005, 11:53 | #6 |
Участник
|
Цитата:
Изначально опубликовано Anais
Я добавила параметры в класс - наследник RunBaseBatch, в новый (нет наследуемый) метод initParameters. Добавляйте параметры со значением по-умолчанию в класс родитель. В тот класс, где метод появился впервые. Во всех классах потомках, метод будет виртуальным и будет иметь те же параметры, что и у класса-родителя (к сожалению, перегрузки методов нет ни в джаве, ни в Х++). Поскольку RunBaseBatch системный класс, изменить параметры в нем вы не сможете. Поэтому в вашем случае и параметры добавить не сможете. Выкручивайтесь при помощи переменных класса и метода обертки. |
|
03.01.2005, 19:31 | #7 |
Участник
|
Но ведь метода initParameters нет в RunBaseBatch. Он (initParameters) как раз и появляется впервые в том самом методе, в котором я пытаюсь добавить новые параметры.
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
03.01.2005, 21:29 | #8 |
Участник
|
приложите код.
|
|
04.01.2005, 13:49 | #9 |
Участник
|
Похожая проблема - уже не знаю что делать.
Когда то в класс Global добавил свою ф-ю (например int func( int a )). Много раз ею пользовался. Спустя долгое время понадобилось расширить список параметров, видоизменил ф-ю следующим образом: int func( int a, int b = 0 ). И тут начались странности - если выполнять обновлённый код (где исп-ся оба параметра ф-ии) выдаётся ошибка "метод был вызван с неверным числом параметров" - откомпилировав класс Global от этой ошибки избавляемся, но только для текущего пользователя! Если заходить под разными пользователями ошибка возникает снова и снова пока под конкретным пользователем не откомпилируешь Global. Пробовал глобальную перекомпиляцию, инкрементную компиляцию Global и класса, который использует ф-ю, перезапускал АОС - ничего не помогает. |
|
04.01.2005, 14:12 | #10 |
Модератор
|
Перекрестные ссылки компилировал?
С Уважением, Георгий. |
|
04.01.2005, 14:14 | #11 |
Moderator
|
Если мне не изменяет память, то экземпляр класса global создается для каждой клиентской сесии и для контекста сервера приложений. То есть - методы исполняющиеся на сервере и на клиенте (в рамках одной пользовательской сесии) обращаются к разным экземплярам globals. Я когда-то с этим изрядно намялся когда хотел в globals глобальную переменную состояния завести.
Так что боюсь - единственное что спасает в такой ситуации - это рестарт AOS |
|
04.01.2005, 14:32 | #12 |
Участник
|
Цитата:
Изначально опубликовано fed
Если мне не изменяет память, то экземпляр класса global создается для каждой клиентской сесии и для контекста сервера приложений. То есть - методы исполняющиеся на сервере и на клиенте (в рамках одной пользовательской сесии) обращаются к разным экземплярам globals. Я когда-то с этим изрядно намялся когда хотел в globals глобальную переменную состояния завести. Так что боюсь - единственное что спасает в такой ситуации - это рестарт AOS |
|
04.01.2005, 14:47 | #13 |
Участник
|
Цитата:
Изначально опубликовано Alks
Похожая проблема - уже не знаю что делать. При построении перекрестных ссылок выполняется компиляция. А тут компиляция не помогла. Тогда совсем глупый вопрос - у вас в каких слоях ваш метод определен? Если вы создали метод в слое cus, например, то в слое usr вы не сможете изменить интерфейс (возвращаемый тип и параметры) этого метода. Но это уж совсем тривиальный случай. |
|
04.01.2005, 15:13 | #14 |
Участник
|
Цитата:
Изначально опубликовано mazzy
Не, перекрестные ссылки тут не при чем. При построении перекрестных ссылок выполняется компиляция. А тут компиляция не помогла. Тогда совсем глупый вопрос - у вас в каких слоях ваш метод определен? Если вы создали метод в слое cus, например, то в слое usr вы не сможете изменить интерфейс (возвращаемый тип и параметры) этого метода. Но это уж совсем тривиальный случай. |
|
04.01.2005, 15:18 | #15 |
Модератор
|
Этто не то... Это типа BestPractice очищенный слой (насколько я понимаю).
Цитата:
Не, перекрестные ссылки тут не при чем.
При построении перекрестных ссылок выполняется компиляция. Попробуй перекрестные, все-таки. P.S. С бубеном танцевал? Бил в него? С Уважением, Георгий. |
|
04.01.2005, 15:49 | #16 |
Moderator
|
Ну и я на последок задам банальный вопрос:
А ты не пробовал на клиентских рабочих местах стирать кэш AOD ? (Это который в файлах с расширением .AOC на каждом клиентском компе лежит) Если нет - рекомендую поискать по форуму ключевое слово aoc. Тут эта тема неоднократно поднималась |
|
04.01.2005, 17:09 | #17 |
Участник
|
Цитата:
Изначально опубликовано fed
Ну и я на последок задам банальный вопрос: А ты не пробовал на клиентских рабочих местах стирать кэш AOD ? (Это который в файлах с расширением .AOC на каждом клиентском компе лежит) Если нет - рекомендую поискать по форуму ключевое слово aoc. Тут эта тема неоднократно поднималась ... Вот только про кеш AOD на клиентах я ничего слышал, а поиск по слову АОС выдаст мне треть всего этого форума. Ладно, буду рыть, спасибо всем за советы! |
|
04.01.2005, 17:14 | #18 |
Участник
|
Цитата:
Изначально опубликовано fed
Ну и я на последок задам банальный вопрос: А ты не пробовал на клиентских рабочих местах стирать кэш AOD ? (Это который в файлах с расширением .AOC на каждом клиентском компе лежит) Если нет - рекомендую поискать по форуму ключевое слово aoc. Тут эта тема неоднократно поднималась Спасибо, завтра буду пробовать. |
|
04.01.2005, 18:08 | #19 |
Модератор
|
Ага! У меня прям батник есть, я его запускаю периодически на всякий случай.
Но что бы чистить на каждом клиенте Удачи! С Уважением, Георгий. |
|
04.01.2005, 22:32 | #20 |
Участник
|
Цитата:
Изначально опубликовано mazzy
Тогда совсем глупый вопрос - у вас в каких слоях ваш метод определен? Если вы создали метод в слое cus, например, то в слое usr вы не сможете изменить интерфейс (возвращаемый тип и параметры) этого метода. Но это уж совсем тривиальный случай. Может, это глупый аргумент, но ведь раньше работало. Никогда никакие проблем... Код такой: <b>Определение метода (класс FactureJourCreate_RU)</b> public void initParameters(NoYes _mustBeUpdated, NoYes _showPreview, PrintOut _printOut, FacturePrintType_RU _printType, NoYes _printMST, FactureExternalId_RU _factureExtId, TransDate _factureDate, CustVendAC _custVendAC, CurrencyCode _currencyCode, FactureType_RU _factureType, CustVendAC _consignee = "", CustVendAC _consignor = "", OffSessionId_RU _offsessionId = "", AttorneyId_RU _attorneyId = "", AttorneyIssuedName_RU _attorneyIssuedName = "", AttorneyDate_RU _attorneyDate = dateNull(), Addressing _deliveryAddress = "", TransDate _factureDateExternal = _factureDate, NumberSequenceGroupId _factureExtIdNumSeq = "", BGR_FactureDescr _bgr_FactureDescr = "" // BGR_BF0026 // BGR_BF0035 >> ,BGR_NumDecimalsQty _BGR_numDecimalsQty = BGR_NumDecimalsQty::None, BGR_SalesFormType _BGR_salesFormType = BGR_SalesFormType::None, FromDate _BGR_fromDate = dateNull(), ToDate _BGR_toDate = dateNull(), BGR_NumDecimals _BGR_numDecimals = BGR_NumDecimals::None // BGR_BF0035 << ) { ... } <b>Вызов метода (из метода createFacture формы FactureEditLines_RU)</b> factureCreate.initParameters(update, preview, printFacture, printType, PrintInMST.value(), FactureExternalId.text(), FactureDate.dateValue(), contragLoc, Currency.text(), factureEngine.factureType(), Consignee.text(), Consignor.text(), factureEngine.offSessionID(), AttorneyId.text(), AttorneyIssuedName.text(), AttorneyDate.dateValue(), Address.Address, FactureDate_External.dateValue(), // BGR_BF0035 >> FactureExtIdNumSeqGroupId.text(), BGR_FactureDescr.text(), BGR_NumDecimalsQty.selection(), custInvoiceJour1.BGR_SalesFormType, BGR_StartDate.dateValue(), BGR_FinishDate.dateValue(), BGR_NumDecimals.selection()); // BGR_BF0035 << Танцы с АОС'ами и кэшами точно не годятся - проблемы в двухзвенке, машины перегружались не раз.
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|