17.01.2017, 08:52 | #21 |
Злыдни
|
А последовательный вызов SysFlushDictionary, SysFlushAOD и SysFlushData не помогает?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
17.01.2017, 09:12 | #22 |
Участник
|
Это первое что попробовал.
Не помогает. Пробовал запускать и на клиенте и на сервере. |
|
25.01.2017, 19:02 | #23 |
Участник
|
Цитата:
Это оказывается вообще by design https://msdn.microsoft.com/EN-US/library/aa882181.aspx Цитата:
Restart the AOS after Adding Fields to Tables
When you insert data in a table during development, the SQL statement you use to insert the data is cached in the AOS. Next you might add a new field to the table and persist the change to the database. This causes the SQL statement in the cache to become stale, because the statement is not updated to include the new field. If you reuse the stale statement, the new field is ignored, or an error might occur. To avoid this problem, restart the AOS after you persist table schema changes to the database. The cache is empty when the AOS restarts. |
|
|
За это сообщение автора поблагодарили: trud (2), gl00mie (5). |
25.01.2017, 19:43 | #24 |
Участник
|
Цитата:
в микрософт вроде разрабочки изолированно работают, так что рестрат не должнен быть проблемой
Я выше в описании пояснил почему это все же проблема : 1. Как правило после добавления поля - надо их заполнить тестовыми данными и тут же прогнать проверку. Крайне неудобно закрывать клиента со всеми окнами редактора кода, затем снова открывать их и вспоминать что и где было. Это очень сильно замедляет процесс разработки. Особенно "приятно" это ощущать когда проект уже стартовал, надо срочно пофиксить баги, над душой стоит начальник с воплем, что ты сейчас зафакапишь нам все внедрение, а ты в очередной раз перестартуешь аос и снова открываешь редактор кода там где он был открыт 2 минуты назад 2. У меня к разработке может быть подключен вебпортал в котором крутится функциональность, которую я довожу до ума. Нашел ошибку - подправил код, снова продолжаю тестирование. Все перестартовывать крайне неудобно даже для одного разработчика. Кроме того, разве у нас запретили совместную разработку на одном аосе ? Нигде не видел такого указания. Да и в чем проблема то ? Дописать в ядре аналог классов SysFlushDictionary, SysFlushAOD и SysFlushData чтобы обнуляли соответствующий кеш объектов и все. Это просто лень и наплевательское отношение к коллегам по прикладной разработке. Последний раз редактировалось Logger; 25.01.2017 в 19:49. |
|
25.01.2017, 19:51 | #25 |
Участник
|
Надо будет попрбовать запустить аос с ключом
-INTERNAL=NOCURSORREUSE есть подозрение, что поможет. |
|
25.01.2017, 20:10 | #26 |
Участник
|
Проверил, похоже
-INTERNAL=NOCURSORREUSE нас спасает. Не удается повторить глюк. Правда это достигается ценой снижения производительности. Но в деве это некритично. |
|
|
За это сообщение автора поблагодарили: fed (3), Ace of Database (3), Perc (2), ax_mct (3), alex55 (3), S.Kuskov (2), Товарищ ♂uatr (1). |
27.01.2017, 01:50 | #27 |
Британский учённый
|
Цитата:
А где вы этот ключ нашли, мне что то гугл не хочет показывать... По поводу наплевательского отношения, так это же не первый случай, на разработчиках бабла не срубишь и они где то в конце списка, если вообще там
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
27.01.2017, 07:41 | #28 |
Участник
|
Последний раз редактировалось Logger; 27.01.2017 в 07:50. |
|
|
За это сообщение автора поблагодарили: Link (5). |
27.01.2017, 11:31 | #29 |
Участник
|
Наверное не то, но недавно натолкнулся, в базу знаний как говорится. На форму LedgerParameters Добавили ReferenceField. Поле сохраняется, но пишет что оно не извлечено. Оказалось что проблема в том что на форме удалён супер в методе init, и это стандарт. Как следствие дополнительные датасорсы по Reference Field не Outer джойнятся.
|
|
27.01.2017, 14:41 | #30 |
Участник
|
Парад "Неизвлеченных" полей.
На форме CustTable в источнике данных CustTable надо перекрыть метод executeQuery() вот так: X++: public void executeQuery() { QueryBuildDataSource qbds = this.query().dataSourceName(this.name()); ; qbds.orderMode(OrderMode::GroupBy); super(); } Последний раз редактировалось Ace of Database; 27.01.2017 в 14:43. |
|
27.01.2017, 16:36 | #31 |
Участник
|
|
|
27.01.2017, 17:08 | #32 |
Участник
|
Да, приятно самому управлять программно надписью "Поле не извлечено", именно когда сам этого хочешь
|
|
30.01.2017, 13:22 | #33 |
Британский учённый
|
Да, спасибо, я искал документацию, и вот что удалось найти:
The Internal command-line parameters Axapta has a number of command-line parameters which extends the formal and documented list of parameters. All of these takes the form -INTERNAL=something, where something denotes the flavor of the parameter. Below is a list of parameters maintained by the BackOffice Feature Team (links to whitepapers appear where appropriate): -INTERNAL=NOCURSORREUSE Disable the SQL cursor reuse mechanism. Hurts performance, improves easy of tracing/debugging -INTERNAL=COMMENTS Insert comments in the generated SQL showing the values of placeholders. -INTERNAL=RELAXEDONTTSLEVEL Suppress the TTS level checking. Should only be used with care. -INTERNAL=RELAXEDONUPDATE Suppress the checks on updates, and deletes (manipulating data which was not seleted locked) -INTERNAL=UNIQUEINDEXES Force all Axapta indexes to be created unique (i.e. by appending the RecId column to the index). Requires the database to be re-indexed to be applied to the database. -INTERNAL=SYSLASTVALUE Make the table SysLastValue be stored in Axapta internal storage (as opposed to the SQL database). For backward compatibility only. -INTERNAL=SYSLASTVALUECACHE:cacheMode Overrule the default caching method on the system table SysLastValue. Default is 3 (“NotFound”), valid values 0 through 3. Used for testing and debugging purposes only. -INTERNAL=MONOCASE Simulate the way the Oracle-version handles indexed fields, i.e. lower (“mono”) case the data. Used for testing and debugging purposes only. -INTERNAL=NODATAAREAID Simulate the “SavePerCompany” table property to be “FALSE” on all tables. To be used in benchmarking. -INTERNAL=NOSYNCTABLELOCK Don’t apply exclusive tablelock on a table being synchronized. Еще есть для клиента: -INTERNAL=NOMODALBOXES switch prevents Axapta from different pop-ups during the process.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: sukhanchik (6), Logger (3), Ace of Database (3), Raven Melancholic (2), gl00mie (3), -DocSerzh- (1). |
30.01.2017, 14:33 | #34 |
Участник
|
Да, прикольная ссылочка. Мне тоже попадалась.
Кстати, если открыть ax32Serv.exe и поискать в UTF16 подстроку NOCURSORREUSE то рядом с ней найдется еще кучка параметров, которые в указанной ссылке не упомянуты (конечно без описания, но у некоторых по названию ясно что делают) : ENABLEREFERENCECOUNTERTRACE ENABLEEVALSTACKINDEXCHANGETRACE HANDLEASSIGNMENT:NO SKIPUTILLAYERSQUERY FORCECLISTRCMP DELETECONFIGFILE CRASHLOGPOSTFIX: RECCACHE: REPORTWARNINGS SILENT NOUNLOADONCOMPILE NOVCS NOARRAYFETCH: OLDCOMPILEROUTPUT STRICTSYNTAX RELAXEDSYNTAX NOSYNCTABLELOCK NODATAAREAID GENERATEKEYHELP NOMODALBOXES AOCPLOG CSDEBUGLOG SYSLASTVALUECACHE: MAXCACHELEVEL: IMPORTEXPORTID EXTRACTDOCUMENT UNIQUEINDEXES STRICTONUPDATE SHOWUNFREED: STRICTONTTSLEVEL RELAXEDONUPDATE RELAXEDONTTSLEVEL STATISTICS SHOWSQLERROR MOVEAOTELEMENTS NOCURSORREUSE SHOWDEBUG CLASSONSERVER REVERSEMAP NORESTRICTED NOSCOPE Последний раз редактировалось Logger; 30.01.2017 в 14:35. |
|
30.01.2017, 15:37 | #35 |
Участник
|
Надпись "Поле не извлечено" очень полезна при модификации форм, на которых отображаются сгруппированные данные. При добавлении новых полей есть шанс забыть сделать по ним группировку.
Раньше в таких случаях отображалось пустое значение, а сейчас - "Поле не извлечено". Например, в форму "в наличии" мне надо было добавить отображение остатков в разрезе самодельных полей в партии товара. Надпись "Поле не извлечено" напомнила, что надо залезть в класс InventDimCtrl_Frm_OnHand и добавить в метод modifyQuery группировку по самодельным полям. Последний раз редактировалось Ace of Database; 30.01.2017 в 15:40. |
|
|
За это сообщение автора поблагодарили: Logger (1), gl00mie (2), dech (2). |
04.07.2019, 17:35 | #36 |
MCTS
|
Экспресс-вариант: временно изменить на таблице свойство CacheLookup в None.
Главное потом не забыть вернуть обратно. |
|
04.07.2019, 21:17 | #37 |
Участник
|
|
|
18.07.2019, 18:38 | #38 |
MCTS
|
|
|
19.07.2019, 13:48 | #39 |
Участник
|
Мне тоже сперва так показалось. Я игрался этим свойством, но по факту оно не влияет.
Внимательно посмотрите описанный мной пример как воспроизводить баг. Ядро держит некий пул курсоров и случайным образом хватает оттуда объекты, так что в итоге при последовательном добавлении нескольких полей в табличку может получиться так, что у вас в пуле будут разные курсоры, с корректным перечнем и с неправильным (разным количеством полей). По несчастливой случайности при выполнении запроса из аксапты может попасть курсор с корректным числом полей и у вас создастся ложное ощущение, что проблема решена, но если попробовать задействовать больше курсоров (открыть 5-10 обозревателей таблички или сделать несколько параллельных вставок в БД), то тут-то проблема и проявится. |
|
10.08.2019, 14:36 | #40 |
Участник
|
Заметил, что если вызвать для источника данных, на котором "Поле не извлечено" метод research(), то поле оживает до закрытия формы. То же самое - поле оживает при нажатии на кнопку F5.
Условие: на форме должна быть отображена только одна запись. Если на форме отображено несколько записей, то надо встать на уникальное поле на одной из записей - нажать правой кнопкой мыши и выполнить команду контекстного меню "Фильтровать по выбору". Тогда на форме останется только одна запись, и "Поле не извлечено" извлечется. Можно нажать первый раз "Фильтровать по выбору". Потом нажать второй раз "Фильтровать по выбору". На форме вновь отобразятся все записи и с извлеченными полями. Вуаля! Не надо АОС рестартовать. Может это конечно специальная фича, которая срабатывает только раз в году 10 августа по субботам.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 10.08.2019 в 14:46. |
|
Теги |
ax2012, command line parameters, internal, nocursorreuse, баг, не извлечено, параметры командной строки, поле не извлечено |
|
|