AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.01.2021, 14:30   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Длина строки исходного кода в 2012 R3
Привет всем.

Вопрос
Какая в 2012-й аксапте возможна максимальная длина строки исходного кода ?
И ограничена ли она вообще ?

В ax4 - максимальная длина 250 символов.
Видимо поэтому в EDT SourceLine поставлена длина 250.

Но в 2012-й это приводит к проблемам при использовании автоматической смены регистра в исходном коде. Класс SysSourceNameWash не трогает методы, в которых есть строки длиной больше чем 250 символов.

Поднял длину EDT SourceLine до 1000 - все стало хорошо.

Но пока непонятно, какие риски это влечет.
Влияет ли это еще на что и какая же в 2012-й допустима длина строки исходного текста.
Старый 19.01.2021, 14:34   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Исправление этой и ряда других проблем.
Вложения
Тип файла: zip CaseChangeFix.zip (15.1 Кб, 95 просмотров)
Старый 19.01.2021, 17:09   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Что же там все такое глючное то
Макросы тоже не умеет обрабатывать.

Выложил еще фиксов.
Вложения
Тип файла: zip CaseChangeFix2.zip (32.4 Кб, 95 просмотров)
Старый 22.01.2021, 14:43   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Подправил еще обработку форм и ускорил их обработку.
Вложения
Тип файла: zip CaseChangeFix2021-01-22.zip (27.6 Кб, 83 просмотров)
Старый 04.03.2021, 11:09   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
по правилам оформления исходных текстов X++ зарезервированные слова должны быть в нижнем регистре, но среда разработки в 2012-й
сама подставляет их в том регистре как определено в ветке \System Documentation\Reserved Words
(а там могут быть большие символы, например ttsBegin и ttsCommit
это приводило к парадоксам - редактор подставлял значения несоответствующие правилам, а потом этот класс их заменял на текст в нижнем регистре
чтобы поддерживать единый стиль написания, пришлось бы постоянно запускать этот класс для исправления, поэтому проще оказалось исправить класс чтобы
он вел себя как редактор кода, подставлял значения из ветки \System Documentation\Reserved Words
Вложения
Тип файла: zip PKoz_CaseChangeFix2_dev.zip (21.3 Кб, 89 просмотров)

Последний раз редактировалось Logger; 04.03.2021 в 11:20.
За это сообщение автора поблагодарили: mazzy (10).
Старый 04.03.2021, 12:56   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а чем отличается файл USRonly от второго файла?
вернее, зачем 2 xpo-файла?
__________________
полезное на axForum, github, vk, coub.
Старый 04.03.2021, 13:09   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
а чем отличается файл USRonly от второго файла?
вернее, зачем 2 xpo-файла?
2-й файл - выгружен весь проект целиком.
USRonly - выгружен только usr слой. - Кому-то возможно удобнее будет себе merge делать.
Старый 04.03.2021, 13:24   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
2-й файл - выгружен весь проект целиком.
USRonly - выгружен только usr слой. - Кому-то возможно удобнее будет себе merge делать.
merge? с объектами, которые имеют "чужой" суффикс _MRC?! Оптимист

ага. понял. спасибо.

я так понимаю, что ты пытаешься улучшить стандартный класс Class_SysSourceNameWash, чтобы он чего-то умное делал. Но при этом по-прежнему используешь опасный strdel и безумный strpoke...

судя по названию проекта, меняешь регистр букв в объектах.
а зачем? и почему только в методах? есть ли замена и в свойствах?
а главное, зачем?

а может ты форматтер кода делаешь?
prettier, только для Аксапты? Давно хочется
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 04.03.2021 в 13:31.
Старый 04.03.2021, 14:07   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
merge? с объектами, которые имеют суффикс _MRC?! Оптимист
Имелись в виду классы
SysSourceNameWash
SysSourceUpdate

там стандартный код правил. Возможно у кого-то есть свои правки или версия отличается.

Цитата:
Сообщение от mazzy Посмотреть сообщение
я так понимаю, что ты пытаешься улучшить стандартный класс Class_SysSourceNameWash, чтобы он чего-то умное делал.
Не только. У нас на проекте есть много Legacy кода, который написан без соблюдения требований по регистру символов. Компилятору все равно - он регистронезависимый. Но выглядит некрасиво. Я попробовал применить этот стандартный инструмент, чтобы выправить ситуацию в старом коде, чтобы не резало глаз.

Попутно выяснилось что инструмент содержит немного багов:

1. Некорректно обрабатывает методы, в которых есть строки длиннее 250 символов, как следствие такие методы остаются необработанными, да еще и ругается на них каждый раз при запуске.

2. Ошибочно преобразует ссылки в коде на имена полей таблиц у которых в начале более 2 заглавных символов (например someTable.ISOcode испохабил - привел к нижнему региструsomeTable.isOcode, хотя не надо было трогать, т.е. не везде корректно учитывал область применения - преобразовывал первые символы к нижнему регистру там где не надо)

3. Финальное сохранение было сделано через методы xUtilElements:: которые обращались к тормозной вьюхе UtilElements (по 1 секунде на запрос) что при массовой обработке думало по полдня.

4. Кажется (точно уже не помню) некорректно обрабатывались методы на формах (лукапы, методы датасорсов итп) - (вроде бы они то ли вообще не обрабатывались то ли ссылки на них не обрабатывались)

5. Правильно обрабатывались стандартные зарезервированные слова, для которых в ветке \System Documentation\Reserved Words
почему-то были заданы большие буквы в camel стиле (ttsBegin ttsCommit ttsAbort forUpdate итп) - преобразовывались в нижний регистр, но сам редактор при вводе подставлял их неверно - как в AOT. Редактор исправить невозможно, пришлось править класс, чтобы было безобразно, но единообразно.

6. Из-за баги некорректно шла обработка методов содержащих макросы, так что исходный код всего метода оставался неизменным.

7. Не умеет корректно обрабатывать макросы. - Не меняет их содержимое.

и фич:

8. Обрабатывает все подряд, вместо конкретного слоя. (я не хотел править стандартный код, только то что на usr мы сами наваяли)

9. Запускать его надо 2 раза подряд (при 1-м запуске изменяет имена методов и переменных, при втором ссылки на методы)

пп 1-6 исправил.
п. 7 непонятно как исправлять, но это некритично.

п.8 исправил.
п.9 - просто надо учитывать и запускать обработку дважды.

В целом код обработки писал параноик, перед внесением изменений делается сравнение без учета регистра - отличается ли исходный код до изменений и после и если отличается, то изменения не вносятся. Так что запускать можно безопасно - сломать ничего не должен.

Цитата:
Сообщение от mazzy Посмотреть сообщение
...Но при этом по-прежнему используешь опасный strdel и безумный strpoke...
Это не я. Это в инструменте так написано. Я там чего-то своего почти не добавлял. - Исправил баги и все.


Цитата:
Сообщение от mazzy Посмотреть сообщение
судя по названию проекта, меняешь регистр букв в объектах.
а зачем? и почему только в методах? есть ли замена и в свойствах?
а главное, зачем?

а может ты форматтер кода делаешь?
форматтер кода не делаю.
Просто в Legacy коде была свистопляска.
методы то с большой то с маленькой буквы написаны. Имена переменных то с большой то с маленькой. Имена типов / классов / таблиц / полей таблиц в таком же стиле, т.е. отсутствии стиля. Где в лес где по дрова.

Ну, а этот инструмент это все исправляет в соответствие со стандартом. Имена самих узлов в АОТ кроме имен методов он не трогает. Только исходный код правит.

Из полезного - читаемость код улучшилась.

Последний раз редактировалось Logger; 04.03.2021 в 14:11.
Старый 04.03.2021, 14:18   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
prettier, только для Аксапты? Давно хочется
На такое я не замахивался.
Не до того.
Работу работать надо.

Стандартный аксаптовский преобразователь неплохо улучшает внешний вид и читаемость кода.
Старый 04.03.2021, 14:41   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
пп 1-6 исправил.
п. 7 непонятно как исправлять, но это некритично.

п.8 исправил.
п.9 - просто надо учитывать и запускать обработку дважды.
а... понятно.

Цитата:
Сообщение от Logger Посмотреть сообщение
В целом код обработки писал параноик, перед внесением изменений делается сравнение без учета регистра - отличается ли исходный код до изменений и после и если отличается, то изменения не вносятся. Так что запускать можно безопасно - сломать ничего не должен.
...
Это не я. Это в инструменте так написано. Я там чего-то своего почти не добавлял.
я ж не наезжаю. просто я в свое время не стал использовать этот Wash именно из-за этих странностей. боюся я таких странных.
по-моему Wash делал не параноик, а тот, кто ни аксапту, ни джаву не знает.
по-моему ощущению, какой-то человек с регистрозависимого языка

Цитата:
Сообщение от Logger Посмотреть сообщение
форматтер кода не делаю.
жаль. очень жаль.

Цитата:
Сообщение от Logger Посмотреть сообщение
Просто в Legacy коде была свистопляска.
методы то с большой то с маленькой буквы написаны. Имена переменных то с большой то с маленькой. Имена типов / классов / таблиц / полей таблиц в таком же стиле, т.е. отсутствии стиля. Где в лес где по дрова.
ну да, ну да. точку с запятой после объявления не ставят, параметры метода на новую строку не переводят, фигурные скобки после if пропускают, пробелы ставят после скобок, а не до...
Безобразие.
Может все-же форматер?

Цитата:
Сообщение от Logger Посмотреть сообщение
Ну, а этот инструмент это все исправляет в соответствие со стандартом.
всё?!

Цитата:
Сообщение от Logger Посмотреть сообщение
Имена самих узлов в АОТ кроме имен методов он не трогает. Только исходный код правит.
Я не про имена узлов в AOT, а значения в свойствах объектов - название типа, название menuItem, используемая таблица и т.п.

Цитата:
Сообщение от Logger Посмотреть сообщение
Из полезного - читаемость код улучшилась.
...
Стандартный аксаптовский преобразователь неплохо улучшает внешний вид и читаемость кода.
и это - хорошо!
__________________
полезное на axForum, github, vk, coub.
Старый 19.04.2021, 15:47   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Вылезло еще пара багов.

п.10 Если объявлена переменная или параметр с типом anytype, то, если имя переменной совпадает с существующим в системе типом (EDT, etc) то обработка изменяет все обращения на заглавную букву.
Например если объявить
X++:
anyType    num;
anyType    salesId;
то везде в коде обращения к ним будут сделаны как Num и SalesId

этот баг исправлен.

п.11 Все обращения к стандартным именам классов (classFactory, versionControl) теперь исправлены на camel-style, чтобы работа IDE и обработки приводило к одному результату.
Вложения
Тип файла: zip SysSourceNameWash_2021_04_19.zip (11.1 Кб, 71 просмотров)
За это сообщение автора поблагодарили: mazzy (5), sukhanchik (6).
Старый 19.04.2021, 18:23   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А можно попросить тебя сделать 3 вещи:
  1. убрать безумные суффиксы '_MRC'. С ними проект бесполезен - в здравом уме мало кто будет использовать объекты с суффиксами с чужого проекта. ничего, кроме расчёсывания ЧСВ автора, эти суффиксы не дают.
  2. все-таки переделать эти strpoke, strdel на нормальный StringBuilder или TextBuffer.
  3. опубликовать проект в gitHub - там гораздо удобнее следить за изменениями и предлагать правки в проект. Причем на gitHub предлагаю выложить и машинно-читаемый xpo, и человеком-читаемые xpp. xpp-файлы генерируются автоматически из xpo скриптом на powerShell. приложил образец (обязательно замени ссылки и автора). выглядит примерно так https://github.com/mazzy-ax/SysStopwatch

Да, главное - опубликуй на github под своим именем, чтобы авторство осталось за тобой. Дальше мы сможем форкать, предлагать изменения, творить историю и т.п. Но первый вариант будет твоим. Примерно вот так:
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 43
Размер:	15.3 Кб
ID:	13161  
Вложения
Тип файла: zip SysSourceNameWash.zip (25.0 Кб, 57 просмотров)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 19.04.2021 в 18:27.
За это сообщение автора поблагодарили: Logger (3).
Старый 19.04.2021, 19:14   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
  1. все-таки переделать эти strpoke, strdel на нормальный StringBuilder или TextBuffer.
Я на такое не замахивался. Изначально, думал, что подправлю пару найденных багов и все (переписывать я его не планировал). Поскольку суть алгоритма с первого раза была не вполне ясна, решил ограничиваться минимумом вмешательств со своей стороны.
Потом нашел еще багов...
И еще...
И лучше вник в код и все стало понятно.
Теперь можно и переписать, но...
Пока не нашел на это время.

Кстати, по опыту использования 2009-й - TextBuffer работает намного быстрее. Видимо из-за накладных расходов на маршаллинг в случае с StringBuilder

Цитата:
Сообщение от mazzy Посмотреть сообщение
Да, главное - опубликуй на github под своим именем, чтобы авторство осталось за тобой. Дальше мы сможем форкать, предлагать изменения, творить историю и т.п. Но первый вариант будет твоим. Примерно вот так:
Попробую.

Чем тебя так напрягают постфиксы ?
Если на проекте смешивается разный код (из разных источников), то возможны пересечения в именах. Постфиксы это как бы замена отсутствующим пространствам имен в аксапте.
Старый 19.04.2021, 19:41   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Я на такое не замахивался. Изначально, думал, что подправлю пару найденных багов и все (переписывать я его не планировал). Поскольку суть алгоритма с первого раза была не вполне ясна, решил ограничиваться минимумом вмешательств со своей стороны.
Потом нашел еще багов...
И еще...
И лучше вник в код и все стало понятно.
Теперь можно и переписать, но...
Пока не нашел на это время.
было бы прекрасно, если бы у тебя время нашлось бы.

Цитата:
Сообщение от Logger Посмотреть сообщение
Кстати, по опыту использования 2009-й - TextBuffer работает намного быстрее. Видимо из-за накладных расходов на маршаллинг в случае с StringBuilder
тут дело такое...
X++ исполняется в X++ быстрее, чем .net
X++ исполняется в CLR медленне, чем .net

для 2009 второго варианта нет
для 2012 может быть оба варианта.
для ax7+ только второй вариант.

Цитата:
Сообщение от Logger Посмотреть сообщение
Чем тебя так напрягают постфиксы ?
мне они читать чужой код мешают.
особенно, если в нашем проекте в одном методе встречаются суффиксы _MER и _MRC у идентификаторов на 30-40 букв - вынос мозга гарантирован. Считаю, что ничего хорошего суффиксы в код не привносят, кроме почёсывания ЧСВ автора. Другим читателям суффиксы только затуманивают смысл происходящего. Хуже только префиксы с логином автора кода.

Но в данной ветке речь то не обо мне, а о всех читателях кода, который ты делаешь публичным.

Цитата:
Сообщение от Logger Посмотреть сообщение
Если на проекте смешивается разный код (из разных источников), то возможны пересечения в именах. Постфиксы это как бы замена отсутствующим пространствам имен в аксапте.
Ты выкладываешь проект. В котором используются суффиксы какого-то левого для людей проекта.

Во-первых, у людей могут быть свои правила наименования. Свои запреты. Свои правила определения ответственного по суффиксу. Так же как и _MRC тоже был важен когда-то.

Во-вторых, это как грязное нижнее белье выставлять - фу-фу. ну или как strPoke использовать. Публично то зачем?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 19.04.2021 в 19:52.
Старый 19.04.2021, 19:55   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Я еще погоняю этот код и сделаю как ты рекомендовал.
Надо убедиться что не вылезет что-нибудь еще.

Но по всем признакам все уже хорошо.

Последний раз редактировалось Logger; 19.04.2021 в 20:21.
За это сообщение автора поблагодарили: mazzy (2).
Старый 03.06.2021, 13:37   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
1. Подправил оформление кода (убраны постфиксы в именах)
2. Добавил изменение подстрок
X++:
" if("  
" for(" 
" while(" 
" switch("
" catch("
теперь при обработке, в соответствие с BP добавляется пробел между ключевым словом и открывающей скобкой.
т.е. в коде становится так
X++:
" if ("  
" for (" 
" while (" 
" switch ("
" catch ("
На этом, пожалуй, все.
Вложения
Тип файла: zip CaseChangeFix2__2021_06_03.zip (14.5 Кб, 32 просмотров)

Последний раз редактировалось Logger; 03.06.2021 в 13:40.
За это сообщение автора поблагодарили: mazzy (15), sukhanchik (15), dech (10).
Старый 02.06.2022, 13:10   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Logger Посмотреть сообщение
На этом, пожалуй, все.
Похоже не все.

Следующая версия:
1. Добавлена обработка форм.

а. Если контрол назван по схеме ИмяДатасорса_ИмяПоля (а именно так среда и дает название когда drag/drop-ишь поля датасорса) то исправляет регистр в имени, Например
sAlesTablE_saleSid --> SalesTable_SalesId

б. В коде форм исправляет имена датасорсов и таблиц датасорсов а также их поля(раньше не понимал ссылки на датасорс и не исправлял. Понимал только таблички объявленные явно как локальные переменные).
Например
sAlesTablE --> salesTable
sAlesTablE_DS --> salesTable_ds
sAlesTablE.saleSid --> salesTable.SalesId

в. В коде форм исправляет имена Autodeclarated контролов.
Например
sAlesTablE_saleSid --> salesTable_SalesId
Вложения
Тип файла: zip CaseChangeFixAxforum_dev.zip (16.6 Кб, 28 просмотров)
За это сообщение автора поблагодарили: mazzy (5).
Теги
sourceline

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: November 2017 Release – Dynamics AX 2012 R3 Blog bot DAX Blogs 0 08.12.2017 10:51
dynamicsaxse: Dynamics AX 2012 R3 cumulative updates Blog bot DAX Blogs 0 15.03.2017 18:11
AX 2012 R3: сохранение масштаба в окне редактора кода alex55 DAX: Программирование 2 02.03.2016 01:26
DAX: Microsoft Dynamics AX 2012 R3 is now available! Blog bot DAX Blogs 1 02.05.2014 23:00
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:16.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.